From db27ea412581b5618a0f8f0a6ce7014b59feb4e8 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 29 Mar 2005 17:42:50 +0000 Subject: * 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. --- winsup/cygwin/ChangeLog | 8 ++++++++ winsup/cygwin/path.cc | 2 +- winsup/cygwin/path.h | 2 ++ winsup/cygwin/syscalls.cc | 18 +++++++++++++++--- 4 files changed, 26 insertions(+), 4 deletions(-) (limited to 'winsup') diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 68a1a28..2281427 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,13 @@ 2005-03-29 Corinna Vinschen + * 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 + * fhandler_process.cc: Re-add exename. 2005-03-28 Christopher Faylor diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 5276796..62227e6 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -2478,7 +2478,7 @@ cygwin_umount (const char *path, unsigned flags) return res; } -static bool +bool is_floppy (const char *dos) { char dev[256]; diff --git a/winsup/cygwin/path.h b/winsup/cygwin/path.h index e0a565f..bc3e2cc 100644 --- a/winsup/cygwin/path.h +++ b/winsup/cygwin/path.h @@ -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 diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index b2375e6..7cca8b6 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -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 { -- cgit v1.1