This is the mail archive of the cygwin-developers@sources.redhat.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]

Re: mount --show-cygdrive-prefixes patch


See attached for the second version of my patch that enhances mount
--show-cygdrive-prefixes to display the flags too.  This version
allows the old mount (and other programs that expect the original
CW_GET_CYGDRIVE_PREFIXES functionality) to continue to run without
crashing with the new version of the DLL.

The following is the cygwin ChangeLog:

Wed Nov  8 08:49:27 2000 Jason Tishler <jt@dothill.com>

	* external.cc (get_cygdrive_info): New function.
	* external.cc (get_cygdrive_prefixes): Change to use get_cygdrive_info
	but toss the user and system flags.
	* external.cc (cygwin_internal): Add new CW_GET_CYGDRIVE_INFO case.
	* path.cc (mount_info::get_cygdrive_prefixes): Remove method.
	* path.cc (mount_info::get_cygdrive_info): New method.  Actually,
	get_cygdrive_info is really an enhanced version of get_cygdrive_prefixes
	renamed to get_cygdrive_info that also gets the user and system flags.
	* shared_info.h (get_cygdrive_prefixes): Remove method.
	* shared_info.h (get_cygdrive_info): New method.
	* include/cygwin/version.h: Bump minor API version due to adding
	CW_GET_CYGDRIVE_INFO to cygwin_internal.
	* include/sys/cygwin.h (cygwin_getinfo_types): Add CW_GET_CYGDRIVE_INFO.

The following is the utils ChangeLog:

Wed Nov  8 08:49:27 2000 Jason Tishler <jt@dothill.com>

	* mount.cc (main): Call show_cygdrive_info instead of
	show_cygdrive_prefixes.
	* mount.cc (show_cygdrive_prefixes): Remove function.
	* mount.cc (show_cygdrive_info): New function.  Actually,
	show_cygdrive_info is really an enhanced version of
	show_cygdrive_prefixes renamed to show_cygdrive_info that also displays
	the user and system flags.

Thanks,
Jason

-- 
Jason Tishler
Director, Software Engineering       Phone: +1 (732) 264-8770 x235
Dot Hill Systems Corporation         Fax:   +1 (732) 264-8798
82 Bethany Road, Suite 7             Email: Jason.Tishler@dothill.com
Hazlet, NJ 07730 USA                 WWW:   http://www.dothill.com
Index: cygwin/external.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/external.cc,v
retrieving revision 1.18
diff -u -p -r1.18 external.cc
--- external.cc	2000/11/05 06:42:23	1.18
+++ external.cc	2000/11/08 13:23:40
@@ -88,13 +88,24 @@ fillout_pinfo (pid_t pid, int winpid)
 }
 
 static DWORD
-get_cygdrive_prefixes (char *user, char *system)
+get_cygdrive_info (char *user, char *system, char *user_flags,
+	           char *system_flags)
 {
   shared_info *info = cygwin_getshared();
-  int res = info->mount.get_cygdrive_prefixes(user, system);
+  int res = info->mount.get_cygdrive_info (user, system, user_flags,
+				          system_flags);
   return (res == ERROR_SUCCESS) ? 1 : 0;
 }
 
+static DWORD
+get_cygdrive_prefixes (char *user, char *system)
+{
+  char user_flags[MAX_PATH];
+  char system_flags[MAX_PATH];
+  DWORD res = get_cygdrive_info (user, system, user_flags, system_flags);
+  return res;
+}
+
 extern "C" DWORD
 cygwin_internal (cygwin_getinfo_types t, ...)
 {
@@ -150,6 +161,15 @@ cygwin_internal (cygwin_getinfo_types t,
       case CW_INIT_EXCEPTIONS:
 	init_exceptions ((exception_list *) arg);
 	return 0;
+
+      case CW_GET_CYGDRIVE_INFO:
+	{
+	  char *user = va_arg (arg, char *);
+	  char *system = va_arg (arg, char *);
+	  char *user_flags = va_arg (arg, char *);
+	  char *system_flags = va_arg (arg, char *);
+	  return get_cygdrive_info (user, system, user_flags, system_flags);
+	}
 
       default:
 	return (DWORD) -1;
Index: cygwin/path.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
retrieving revision 1.78
diff -u -p -r1.78 path.cc
--- path.cc	2000/11/06 16:40:29	1.78
+++ path.cc	2000/11/08 13:23:43
@@ -1623,12 +1623,20 @@ mount_info::remove_cygdrive_info_from_re
 }
 
 int
-mount_info::get_cygdrive_prefixes (char *user, char *system)
+mount_info::get_cygdrive_info (char *user, char *system, char* user_flags,
+			       char* system_flags)
 {
   /* Get the user path prefix from HKEY_CURRENT_USER. */
   reg_key r;
   int res = r.get_string (CYGWIN_INFO_CYGDRIVE_PREFIX, user, MAX_PATH, "");
 
+  /* Get the user flags, if appropriate */
+  if (res == ERROR_SUCCESS)
+    {
+      int flags = r.get_int (CYGWIN_INFO_CYGDRIVE_FLAGS, MOUNT_AUTO);
+      strcpy (user_flags, (flags & MOUNT_BINARY) ? "binmode" : "textmode");
+    }
+
   /* Get the system path prefix from HKEY_LOCAL_MACHINE. */
   reg_key r2 (HKEY_LOCAL_MACHINE, KEY_ALL_ACCESS, "SOFTWARE",
 	      CYGWIN_INFO_CYGNUS_REGISTRY_NAME,
@@ -1636,6 +1644,13 @@ mount_info::get_cygdrive_prefixes (char 
 	      CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME,
 	      NULL);
   int res2 = r2.get_string (CYGWIN_INFO_CYGDRIVE_PREFIX, system, MAX_PATH, "");
+
+  /* Get the system flags, if appropriate */
+  if (res2 == ERROR_SUCCESS)
+    {
+      int flags = r2.get_int (CYGWIN_INFO_CYGDRIVE_FLAGS, MOUNT_AUTO);
+      strcpy (system_flags, (flags & MOUNT_BINARY) ? "binmode" : "textmode");
+    }
 
   return (res != ERROR_SUCCESS) ? res : res2;
 }
Index: cygwin/shared_info.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/shared_info.h,v
retrieving revision 1.2
diff -u -p -r1.2 shared_info.h
--- shared_info.h	2000/09/08 02:56:55	1.2
+++ shared_info.h	2000/11/08 13:23:43
@@ -85,7 +85,8 @@ public:
 
   int write_cygdrive_info_to_registry (const char *cygdrive_prefix, unsigned flags);
   int remove_cygdrive_info_from_registry (const char *cygdrive_prefix, unsigned flags);
-  int get_cygdrive_prefixes (char *user, char *system);
+  int get_cygdrive_info (char *user, char *system, char* user_flags,
+		         char* system_flags);
 
   void import_v1_mounts ();
 
Index: cygwin/include/cygwin/version.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/include/cygwin/version.h,v
retrieving revision 1.21
diff -u -p -r1.21 version.h
--- version.h	2000/11/07 02:21:33	1.21
+++ version.h	2000/11/08 13:23:45
@@ -119,10 +119,11 @@ details. */
        27: CW_GETPINFO_FULL addition to external.cc
        28: Accidentally bumped by cgf
        29: Export hstrerror
+       30: CW_GET_CYGDRIVE_INFO addition to external.cc
      */
 
 #define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 29
+#define CYGWIN_VERSION_API_MINOR 30
 
      /* There is also a compatibity version number associated with the
 	shared memory regions.  It is incremented when incompatible
Index: cygwin/include/sys/cygwin.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/include/sys/cygwin.h,v
retrieving revision 1.21
diff -u -p -r1.21 cygwin.h
--- cygwin.h	2000/11/03 04:27:03	1.21
+++ cygwin.h	2000/11/08 13:23:45
@@ -58,7 +58,8 @@ typedef enum
     CW_PERFILE,
     CW_GET_CYGDRIVE_PREFIXES,
     CW_GETPINFO_FULL,
-    CW_INIT_EXCEPTIONS
+    CW_INIT_EXCEPTIONS,
+    CW_GET_CYGDRIVE_INFO
   } cygwin_getinfo_types;
 
 #define CW_NEXTPID 0x80000000	// or with pid to get next one
Index: utils/mount.cc
===================================================================
RCS file: /cvs/src/src/winsup/utils/mount.cc,v
retrieving revision 1.9
diff -u -p -r1.9 mount.cc
--- mount.cc	2000/10/28 05:00:00	1.9
+++ mount.cc	2000/11/08 13:23:53
@@ -22,7 +22,7 @@ details. */
 #include <errno.h>
 
 static void show_mounts (void);
-static void show_cygdrive_prefixes (void);
+static void show_cygdrive_info (void);
 static void change_cygdrive_prefix (const char *new_prefix, int flags);
 static int mount_already_exists (const char *posix_path, int flags);
 
@@ -144,7 +144,7 @@ main (int argc, const char **argv)
 	  if ((i + 1) != argc)
 	    usage ();
 
-	  show_cygdrive_prefixes ();
+	  show_cygdrive_info ();
 	}
       else if (strcmp (argv[i], "-b") == 0)
 	flags |= MOUNT_BINARY;
@@ -263,23 +263,27 @@ change_cygdrive_prefix (const char *new_
   exit (0);
 }
 
-/* show_cygdrive_prefixes: Show the user and/or cygdrive path prefixes */
+/* show_cygdrive_info: Show the user and/or cygdrive info, i.e., prefixes and
+   flags.*/
 static void
-show_cygdrive_prefixes ()
+show_cygdrive_info ()
 {
-  /* Get the Cygdrive user and system path prefixes */
+  /* Get the cygdrive info */
   char user[MAX_PATH];
   char system[MAX_PATH];
-  cygwin_internal (CW_GET_CYGDRIVE_PREFIXES, user, system);
+  char user_flags[MAX_PATH];
+  char system_flags[MAX_PATH];
+  cygwin_internal (CW_GET_CYGDRIVE_INFO, user, system, user_flags,
+		   system_flags);
 
   /* Display the user and system cygdrive path prefixes, if necessary
      (ie, not empty) */
-  const char *format = "%-18s  %-11s\n";
-  printf (format, "Prefix", "Type");
+  const char *format = "%-18s  %-11s  %s\n";
+  printf (format, "Prefix", "Type", "Flags");
   if (strlen (user) > 0)
-    printf (format, user, "user");
+    printf (format, user, "user", user_flags);
   if (strlen (system) > 0)
-    printf (format, system, "system");
+    printf (format, system, "system", system_flags);
 
   exit (0);
 }

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