X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fmountpoint.cc;h=89675c985e1260a4bb8ac131781b1f6fe3118a32;hb=9695fd4ca96a9a6a057d5ac453acb791543f1efc;hp=acc549890a81c65eb469528cf36009575dc695db;hpb=da45f489dd3d923bbba8f1cee39ab445c4bf1b64;p=ardour.git diff --git a/libs/pbd/mountpoint.cc b/libs/pbd/mountpoint.cc index acc549890a..89675c985e 100644 --- a/libs/pbd/mountpoint.cc +++ b/libs/pbd/mountpoint.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2002 Paul Davis + Copyright (C) 2002 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,17 +17,22 @@ $Id$ */ - +#ifndef COMPILER_MSVC #include #include #include +#include #include -#include +#include "pbd/mountpoint.h" using std::string; -#if HAVE_GETMNTENT +#ifdef WAF_BUILD +#include "libpbd-config.h" +#endif + +#ifdef HAVE_GETMNTENT #include struct mntent_sorter { @@ -45,7 +50,7 @@ mountpoint (string path) unsigned int matchlen; const char *cpath = path.c_str(); char best[PATH_MAX+1]; - + if ((mntf = setmntent ("/etc/mtab", "r")) == 0) { return ""; } @@ -58,7 +63,7 @@ mountpoint (string path) n = 0; matchlen = 0; - /* note: strcmp's semantics are not + /* note: strcmp's semantics are not strict enough to use for this. */ @@ -89,6 +94,19 @@ mountpoint (string path) return best; } +#elif defined(PLATFORM_WINDOWS) +#include +string +mountpoint (string path) +{ + /* this function is currently only called from 'old_peak_path()' + * via find_broken_peakfile() - only relevant for loading pre + * libsndfile Ardour 2.0 sessions. + */ + assert(0); + return ""; // TODO ... if needed +} + #else // !HAVE_GETMNTENT #include @@ -98,15 +116,24 @@ mountpoint (string path) string mountpoint (string path) { +#if defined(__NetBSD__) + struct statvfs *mntbufp = 0; +#else struct statfs *mntbufp = 0; +#endif int count; unsigned int maxmatch = 0; unsigned int matchlen; const char *cpath = path.c_str(); char best[PATH_MAX+1]; - + + /* From the manpage, under "BUGS" : "The memory allocated by getmntinfo() cannot be free(3)'d by the + application." + + Thus: we do NOT try to free memory allocated by getmntinfo() + */ + if ((count = getmntinfo(&mntbufp, MNT_NOWAIT)) == 0) { - free(mntbufp); return "\0"; } @@ -116,7 +143,7 @@ mountpoint (string path) unsigned int n = 0; matchlen = 0; - /* note: strcmp's semantics are not + /* note: strcmp's semantics are not strict enough to use for this. */ @@ -130,7 +157,6 @@ mountpoint (string path) if (cpath[matchlen] == '\0') { snprintf(best, sizeof(best), "%s", mntbufp[i].f_mntonname); - free(mntbufp); return best; } else { @@ -142,14 +168,12 @@ mountpoint (string path) } } - free(mntbufp); - return best; } #endif // HAVE_GETMNTENT #ifdef TEST_MOUNTPOINT - + main (int argc, char *argv[]) { printf ("mp of %s = %s\n", argv[1], mountpoint (argv[1]).c_str()); @@ -157,3 +181,7 @@ main (int argc, char *argv[]) } #endif // TEST_MOUNTPOINT + +#else // COMPILER_MSVC + const char* pbd_mountpoint = "pbd/msvc/mountpoint.cc takes precedence over this file"; +#endif // COMPILER_MSVC