Remove PBD::to_string() function from pbd/convert.h
[ardour.git] / libs / pbd / mountpoint.cc
index acc549890a81c65eb469528cf36009575dc695db..89675c985e1260a4bb8ac131781b1f6fe3118a32 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 {
@@ -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 <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>
@@ -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