OSDN Git Service

* path.cc (is_floppy): Make externally available.
authorcorinna <corinna>
Tue, 29 Mar 2005 17:42:48 +0000 (17:42 +0000)
committercorinna <corinna>
Tue, 29 Mar 2005 17:42:48 +0000 (17:42 +0000)
* path.h (is_floppy): Declare.
* syscalls.cc (sync): Check for floppies on A: and B: in guid case.
Don't call setmntent in non-guid case but evaluate drive bit mask
locally.

winsup/cygwin/ChangeLog
winsup/cygwin/path.cc
winsup/cygwin/path.h
winsup/cygwin/syscalls.cc

index 68a1a28..2281427 100644 (file)
@@ -1,5 +1,13 @@
 2005-03-29  Corinna Vinschen  <corinna@vinschen.de>
 
+       * path.cc (is_floppy): Make externally available.
+       * path.h (is_floppy): Declare.
+       * syscalls.cc (sync): Check for floppies on A: and B: in guid case.
+       Don't call setmntent in non-guid case but evaluate drive bit mask
+       locally.
+
+2005-03-29  Corinna Vinschen  <corinna@vinschen.de>
+
        * fhandler_process.cc: Re-add exename.
 
 2005-03-28  Christopher Faylor  <cgf@timesys.com>
index 5276796..62227e6 100644 (file)
@@ -2478,7 +2478,7 @@ cygwin_umount (const char *path, unsigned flags)
   return res;
 }
 
-static bool
+bool
 is_floppy (const char *dos)
 {
   char dev[256];
index e0a565f..bc3e2cc 100644 (file)
@@ -274,6 +274,8 @@ bool fnunmunge (char *, const char *) __attribute__ ((regparm (2)));
 
 int path_prefix_p (const char *path1, const char *path2, int len1) __attribute__ ((regparm (3)));
 
+bool is_floppy (const char *);
+
 /* FIXME: Move to own include file eventually */
 
 #define MAX_ETC_FILES 2
index b2375e6..7cca8b6 100644 (file)
@@ -954,6 +954,15 @@ sync ()
              else
                debug_printf ("Try volume %s", vol);
 
+             /* Check pvol for being a floppy on A: or B:.  Skip them. */
+             if (strncasematch (pvol, "A:", 2)
+                 || strncasematch (pvol, "B:", 2))
+               {
+                 pvol[2] = '\0';
+                 if (is_floppy (pvol))
+                   continue;
+               }
+
              /* Eliminate trailing backslash. */
              vol[strlen (vol) - 1] = '\0';
              sync_worker (vol);
@@ -964,10 +973,13 @@ sync ()
     }
   else if (wincap.is_winnt ()) /* 9x has no concept for opening volumes */
     {
-      extern FILE *setmntent (const char *, const char *);
-      setmntent ("", "");
-      DWORD drives = _my_tls.locals.available_drives;
+      DWORD drives = GetLogicalDrives ();
       DWORD mask = 1;
+      /* Skip floppies on A: and B: as in setmntent. */
+      if ((drives & 1) && is_floppy ("A:"))
+       drives &= ~1;
+      if ((drives & 2) && is_floppy ("B:"))
+       drives &= ~2;
       strcpy (vol, "\\\\.\\A:");
       do
         {