Hi AND low pass filter -- fresh from the oven werks.
[ardour.git] / libs / pbd / mountpoint.cc
index f2731463431b30da1c37cb68cf2ef317afcce57f..82aaadb9eb26f2a6a27ad0d58cc69829d881358b 100644 (file)
@@ -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
 
     $Id$
 */
-
+#ifndef  COMPILER_MSVC
 #include <cstdio>
 #include <cstring>
 #include <string>
 #include <cstring>
 #include <limits.h>
 
-#include <pbd/mountpoint.h>
+#include "pbd/mountpoint.h"
 
 using std::string;
 
-#if HAVE_GETMNTENT
+#ifdef WAF_BUILD
+#include "libpbd-config.h"
+#endif
+
+#ifdef HAVE_GETMNTENT
 #include <mntent.h>
 
 struct mntent_sorter {
@@ -46,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 "";
        }
@@ -59,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.
                */
 
@@ -90,6 +94,19 @@ mountpoint (string path)
        return best;
 }
 
+#elif defined(PLATFORM_WINDOWS)
+#include <assert.h>
+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 <sys/param.h>
@@ -105,9 +122,14 @@ mountpoint (string path)
        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";
        }
 
@@ -117,7 +139,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.
                */
 
@@ -131,7 +153,6 @@ mountpoint (string path)
 
                if (cpath[matchlen] == '\0') {
                        snprintf(best, sizeof(best), "%s", mntbufp[i].f_mntonname);
-                       free(mntbufp);
                        return best;
 
                } else {
@@ -143,14 +164,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());
@@ -158,3 +177,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