mountlist: fix local drive detection on cygwin
authorEric Blake <eblake@redhat.com>
Tue, 28 Dec 2010 17:07:58 +0000 (10:07 -0700)
committerEric Blake <eblake@redhat.com>
Wed, 29 Dec 2010 18:48:15 +0000 (11:48 -0700)
* lib/mountlist.c (ME_REMOTE) [__CYGWIN__]: Provide implementation
that works for cygwin.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
lib/mountlist.c

index 021102c..f9aff45 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-29  Eric Blake  <eblake@redhat.com>
+
+       mountlist: fix local drive detection on cygwin
+       * lib/mountlist.c (ME_REMOTE) [__CYGWIN__]: Provide implementation
+       that works for cygwin.
+
 2010-12-29  Paul Eggert  <eggert@cs.ucla.edu>
 
        ftoastr, snprintf: ftoastr + snprintf module
index 996b71a..126f43d 100644 (file)
      || strcmp (Fs_type, "ignore") == 0)
 #endif
 
+#ifdef __CYGWIN__
+# include <windows.h>
+# define ME_REMOTE me_remote
+/* All cygwin mount points include `:' or start with `//'; so it
+   requires a native Windows call to determine remote disks.  */
+static bool
+me_remote (char const *fs_name, char const *fs_type _GL_UNUSED)
+{
+  if (fs_name[0] && fs_name[1] == ':')
+    {
+      char const drive[3] = { fs_name[0], ':', '\0' };
+      switch (GetDriveType (drive))
+        {
+        case DRIVE_REMOVABLE:
+        case DRIVE_FIXED:
+        case DRIVE_CDROM:
+        case DRIVE_RAMDISK:
+          return false;
+        }
+    }
+  return true;
+}
+#endif
+
 #ifndef ME_REMOTE
 /* A file system is `remote' if its Fs_name contains a `:'
    or if (it is of type (smbfs or cifs) and its Fs_name starts with `//').  */