This is the mail archive of the cygwin-patches@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

stopping floppy seeks (Was: available for test: findutils-20041219-1)


Brian Dessent wrote:

> > Let me say it again.  This is not new behavior:
> >
> > 2003-08-05  Pavel Tsekov  <ptsekov AT gmx.net>
> >
> >         * path.cc (cygdrive_getmntent): Do not skip over drives of type
> >         DRIVE_REMOVABLE.
> >
> > Perhaps you should be discussing this with Pavel.
> 
> Okay, I misunderstood.  I thought that you were saying someone had
> posted a patch that would prevent checking floppy drives in that section
> of the code.  I now see that it used to be the case that this was done,
> and the above patch removed that functionality.
> 
> I have no idea what Pavel's intentions were with his change.  I can only
> guess it was to support /cygdrive use with some form of removable media,
> perhaps floppy, perhaps otherwise.  However at the time it was
> committed, there was no mount checking code in find, and so there were
> no spurious floppy seeks for opening a login shell and many other
> activities.  I will CC him on this email to see if he wants to clarify.
> It seems to me that making this behavior settable through a CYGWIN env
> option would satisy everyone, but I'm also quite sure that no patch I
> submit to implement this would be accepted, mainly due to not having a
> copyright assignment on file.

Here is a patch.  If $CYGWIN does not contain "removable" (or contains
"noremovable") then /cygdrive's where GetDriveType() returns
DRIVE_REMOVABLE are skipped, avoiding the annoying floppy seeks. 
CYGWIN=removable works the same as current code.

Note: I don't know if this would be considered trivial or not.  Nor do I
know if it satisfies Pavel's needs.  Just thought I'd post it anyway.

2004-12-24  Brian Dessent  <brian@dessent.net>

	* environ.cc: Add extern decl for `cygdrive_removable'.
	(struct parse_thing): Add entry for `[no]removable'. 
	* path.cc (cygdrive_getmntent): Ignore drive letters of 
	removable drives, unless `cygdrive_removable' set.
Index: src/winsup/cygwin/environ.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/environ.cc,v
retrieving revision 1.105
diff -u -p -r1.105 environ.cc
--- src/winsup/cygwin/environ.cc	3 Dec 2004 23:49:06 -0000	1.105
+++ src/winsup/cygwin/environ.cc	24 Dec 2004 09:12:45 -0000
@@ -31,6 +31,7 @@ extern bool ignore_case_with_glob;
 extern bool allow_ntea;
 extern bool allow_smbntsec;
 extern bool allow_winsymlinks;
+extern bool cygdrive_removable;
 extern bool strip_title_path;
 extern int pcheck_case;
 extern int subauth_id;
@@ -537,6 +538,7 @@ static struct parse_thing
   {"ntea", {func: set_ntea}, isfunc, NULL, {{0}, {s: "yes"}}},
   {"ntsec", {func: set_ntsec}, isfunc, NULL, {{0}, {s: "yes"}}},
   {"smbntsec", {func: set_smbntsec}, isfunc, NULL, {{0}, {s: "yes"}}},
+  {"removable", {&cygdrive_removable}, justset, NULL, {{false}, {true}}},
   {"reset_com", {&reset_com}, justset, NULL, {{false}, {true}}},
   {"strip_title", {&strip_title_path}, justset, NULL, {{false}, {true}}},
   {"subauth_id", {func: &subauth_id_init}, isfunc, NULL, {{0}, {0}}},
Index: src/winsup/cygwin/path.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
retrieving revision 1.335
diff -u -p -r1.335 path.cc
--- src/winsup/cygwin/path.cc	23 Dec 2004 21:37:43 -0000	1.335
+++ src/winsup/cygwin/path.cc	24 Dec 2004 09:12:57 -0000
@@ -2301,6 +2301,9 @@ mount_item::getmntent ()
   return fillout_mntent (native_path, posix_path, flags);
 }
 
+/* If true, removable /cygdrive's should be returned by getmntent() */
+bool cygdrive_removable;
+
 static struct mntent *
 cygdrive_getmntent ()
 {
@@ -2316,7 +2319,8 @@ cygdrive_getmntent ()
 	  break;
 
       __small_sprintf (native_path, "%c:\\", drive);
-      if (GetFileAttributes (native_path) == INVALID_FILE_ATTRIBUTES)
+      if ((!cygdrive_removable && GetDriveType (native_path) == DRIVE_REMOVABLE) ||
+	  GetFileAttributes (native_path) == INVALID_FILE_ATTRIBUTES)
 	{
 	  _my_tls.locals.available_drives &= ~mask;
 	  continue;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]