Mail Archives: cygwin-developers/2000/11/06/09:04:42
--fJTEvxt9BaY1Ejyj
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
See attached for the setup.exe patch that makes the cygdrive mount mode
consistent with the mount mode selected by the user during installation.
The following is the cinstall ChangeLog:
Sun Nov 5 12:51:42 2000 Jason Tishler <jt AT dothill DOT com>
* install.cc (do_install): Add call to set_cygdrive_flags to sync
the mount modes.
* mount.cc (set_cygdrive_flags): New function.
* mount.cc (get_cygdrive_flags): Ditto.
* mount.cc (default_cygdrive): Ditto.
* mount.cc (set_cygdrive_flags): Ditto.
* mount.h: Add prototype for set_cygdrive_flags.
The following is the cygwin ChangeLog:
Sun Nov 5 12:51:42 2000 Jason Tishler <jt AT dothill DOT com>
* path.cc (mount_info::read_cygdrive_info_from_registry): Use
CYGWIN_INFO_CYGDRIVE_PREFIX, CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX,
and CYGWIN_INFO_CYGDRIVE_FLAGS.
* path.cc (mount_info::write_cygdrive_info_to_registry): Use
CYGWIN_INFO_CYGDRIVE_PREFIX and CYGWIN_INFO_CYGDRIVE_FLAGS.
* path.cc (mount_info::remove_cygdrive_info_from_registry): Ditto.
* path.cc (mount_info::get_cygdrive_prefixes): Use
CYGWIN_INFO_CYGDRIVE_PREFIX.
* include/cygwin/version.h: Add CYGWIN_INFO_CYGDRIVE_FLAGS,
CYGWIN_INFO_CYGDRIVE_PREFIX, and CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX.
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 DOT Tishler AT dothill DOT com
Hazlet, NJ 07730 USA WWW: http://www.dothill.com
--fJTEvxt9BaY1Ejyj
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="CygdriveSetup.patch"
Index: cinstall/install.cc
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/install.cc,v
retrieving revision 2.7
diff -u -p -r2.7 install.cc
--- install.cc 2000/10/23 19:46:01 2.7
+++ install.cc 2000/11/05 18:34:32
@@ -523,6 +523,7 @@ do_install (HINSTANCE h)
create_mount ("/", root_dir, istext, issystem);
create_mount ("/usr/bin", concat (root_dir, "/bin", 0), istext, issystem);
create_mount ("/usr/lib", concat (root_dir, "/lib", 0), istext, issystem);
+ set_cygdrive_flags (istext, issystem);
if (errors)
exit_msg = IDS_INSTALL_INCOMPLETE;
Index: cinstall/mount.cc
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/mount.cc,v
retrieving revision 2.1
diff -u -p -r2.1 mount.cc
--- mount.cc 2000/08/11 18:00:38 2.1
+++ mount.cc 2000/11/05 18:34:32
@@ -139,3 +139,90 @@ remove_mount (char *posix)
remove1 (HKEY_LOCAL_MACHINE, posix);
remove1 (HKEY_CURRENT_USER, posix);
}
+
+static void
+set_cygdrive_flags (HKEY key, int istext, DWORD cygdrive_flags)
+{
+ int cur_istext = (cygdrive_flags & MOUNT_BINARY) ? 0 : 1;
+ if (cur_istext != istext)
+ {
+ if (!istext)
+ cygdrive_flags |= MOUNT_BINARY;
+ else
+ cygdrive_flags &= ~MOUNT_BINARY;
+ RegSetValueEx (key, CYGWIN_INFO_CYGDRIVE_FLAGS, 0, REG_DWORD,
+ (BYTE *)&cygdrive_flags, sizeof (cygdrive_flags));
+ }
+}
+
+static LONG
+get_cygdrive_flags (HKEY key, DWORD *cygdrive_flags)
+{
+ DWORD retvallen = sizeof(*cygdrive_flags);
+ LONG status = RegQueryValueEx (key, CYGWIN_INFO_CYGDRIVE_FLAGS, 0, 0,
+ (BYTE *)cygdrive_flags, &retvallen);
+ return status;
+}
+
+static DWORD
+default_cygdrive(HKEY key)
+{
+ RegSetValueEx (key, CYGWIN_INFO_CYGDRIVE_PREFIX, 0, REG_SZ,
+ (BYTE *)CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX,
+ strlen (CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX) + 1);
+ DWORD cygdrive_flags = MOUNT_AUTO;
+ RegSetValueEx (key, CYGWIN_INFO_CYGDRIVE_FLAGS, 0, REG_DWORD,
+ (BYTE *)&cygdrive_flags, sizeof (cygdrive_flags));
+ return cygdrive_flags;
+}
+
+void
+set_cygdrive_flags (int istext, int issystem)
+{
+ int found_system = 0;
+
+ char buf[1000];
+ sprintf (buf, "Software\\%s\\%s\\%s",
+ CYGWIN_INFO_CYGNUS_REGISTRY_NAME,
+ CYGWIN_INFO_CYGWIN_REGISTRY_NAME,
+ CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME);
+
+ if (issystem)
+ {
+ HKEY key;
+ DWORD disposition;
+ LONG status = RegCreateKeyEx (HKEY_LOCAL_MACHINE, buf, 0, 0, 0,
+ KEY_ALL_ACCESS, 0, &key, &disposition);
+ if (status == ERROR_SUCCESS)
+ {
+ DWORD cygdrive_flags = 0;
+ status = get_cygdrive_flags (key, &cygdrive_flags);
+ if (status == ERROR_SUCCESS)
+ {
+ set_cygdrive_flags (key, istext, cygdrive_flags);
+ found_system = 1;
+ }
+ RegCloseKey(key);
+ }
+ }
+
+ HKEY key;
+ DWORD disposition;
+ LONG status = RegCreateKeyEx (HKEY_CURRENT_USER, buf, 0, 0, 0, KEY_ALL_ACCESS,
+ 0, &key, &disposition);
+ if (status != ERROR_SUCCESS)
+ fatal ("set_cygdrive_flags");
+
+ DWORD cygdrive_flags = 0;
+ status = get_cygdrive_flags (key, &cygdrive_flags);
+ if (status == ERROR_FILE_NOT_FOUND && !found_system)
+ {
+ cygdrive_flags = default_cygdrive(key);
+ status = ERROR_SUCCESS;
+ }
+
+ if (status == ERROR_SUCCESS)
+ set_cygdrive_flags (key, istext, cygdrive_flags);
+
+ RegCloseKey(key);
+}
Index: cinstall/mount.h
===================================================================
RCS file: /cvs/src/src/winsup/cinstall/mount.h,v
retrieving revision 2.0
diff -u -p -r2.0 mount.h
--- mount.h 2000/08/08 00:27:54 2.0
+++ mount.h 2000/11/05 18:34:32
@@ -23,3 +23,8 @@ char * find_root_mount (int *istext, int
void create_mount (char *posix, char *win32, int istext, int issystem);
void remove_mount (char *posix);
+
+/* Sets the cygdrive flags. Used to make the automounted drives' binary/text
+mode consistent with the standard Cygwin mounts. */
+
+void set_cygdrive_flags (int istext, int issystem);
Index: cygwin/path.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
retrieving revision 1.77
diff -u -p -r1.77 path.cc
--- path.cc 2000/11/02 02:15:02 1.77
+++ path.cc 2000/11/05 18:34:50
@@ -1502,7 +1502,8 @@ mount_info::read_cygdrive_info_from_regi
/* reg_key for user path prefix in HKEY_CURRENT_USER. */
reg_key r;
- if (r.get_string ("cygdrive prefix", cygdrive, sizeof (cygdrive), "") != 0)
+ if (r.get_string (CYGWIN_INFO_CYGDRIVE_PREFIX, cygdrive, sizeof (cygdrive),
+ "") != 0)
{
/* Didn't find the user path prefix so check the system path prefix. */
@@ -1513,17 +1514,19 @@ mount_info::read_cygdrive_info_from_regi
CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME,
NULL);
- if (r2.get_string ("cygdrive prefix", cygdrive, sizeof (cygdrive), "") != 0)
+ if (r2.get_string (CYGWIN_INFO_CYGDRIVE_PREFIX, cygdrive, sizeof (cygdrive),
+ "") != 0)
{
/* Didn't find either so write the default to the registry and use it.
NOTE: We are writing and using the user path prefix. */
- write_cygdrive_info_to_registry ("/cygdrive", MOUNT_AUTO);
+ write_cygdrive_info_to_registry (CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX,
+ MOUNT_AUTO);
}
else
{
/* Fetch system cygdrive_flags from registry; returns MOUNT_AUTO on
error. */
- cygdrive_flags = r2.get_int ("cygdrive flags", MOUNT_AUTO);
+ cygdrive_flags = r2.get_int (CYGWIN_INFO_CYGDRIVE_FLAGS, MOUNT_AUTO);
slashify (cygdrive, cygdrive, 1);
cygdrive_len = strlen(cygdrive);
}
@@ -1532,7 +1535,7 @@ mount_info::read_cygdrive_info_from_regi
{
/* Fetch user cygdrive_flags from registry; returns MOUNT_AUTO on
error. */
- cygdrive_flags = r.get_int ("cygdrive flags", MOUNT_AUTO);
+ cygdrive_flags = r.get_int (CYGWIN_INFO_CYGDRIVE_FLAGS, MOUNT_AUTO);
slashify (cygdrive, cygdrive, 1);
cygdrive_len = strlen(cygdrive);
}
@@ -1571,13 +1574,13 @@ mount_info::write_cygdrive_info_to_regis
nofinalslash (cygdrive_prefix, hold_cygdrive_prefix);
int res;
- res = r.set_string ("cygdrive prefix", hold_cygdrive_prefix);
+ res = r.set_string (CYGWIN_INFO_CYGDRIVE_PREFIX, hold_cygdrive_prefix);
if (res != ERROR_SUCCESS)
{
__seterrno_from_win_error (res);
return -1;
}
- r.set_int ("cygdrive flags", flags);
+ r.set_int (CYGWIN_INFO_CYGDRIVE_FLAGS, flags);
/* This also needs to go in the in-memory copy of "cygdrive", but only if
appropriate:
@@ -1609,8 +1612,8 @@ mount_info::remove_cygdrive_info_from_re
NULL);
/* Delete cygdrive prefix and flags. */
- int res = r.killvalue ("cygdrive prefix");
- int res2 = r.killvalue ("cygdrive flags");
+ int res = r.killvalue (CYGWIN_INFO_CYGDRIVE_PREFIX);
+ int res2 = r.killvalue (CYGWIN_INFO_CYGDRIVE_FLAGS);
/* Reinitialize the cygdrive path prefix to reflect to removal from the
registry. */
@@ -1624,7 +1627,7 @@ mount_info::get_cygdrive_prefixes (char
{
/* Get the user path prefix from HKEY_CURRENT_USER. */
reg_key r;
- int res = r.get_string ("cygdrive prefix", user, MAX_PATH, "");
+ int res = r.get_string (CYGWIN_INFO_CYGDRIVE_PREFIX, user, MAX_PATH, "");
/* Get the system path prefix from HKEY_LOCAL_MACHINE. */
reg_key r2 (HKEY_LOCAL_MACHINE, KEY_ALL_ACCESS, "SOFTWARE",
@@ -1632,7 +1635,7 @@ mount_info::get_cygdrive_prefixes (char
CYGWIN_INFO_CYGWIN_REGISTRY_NAME,
CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME,
NULL);
- int res2 = r2.get_string ("cygdrive prefix", system, MAX_PATH, "");
+ int res2 = r2.get_string (CYGWIN_INFO_CYGDRIVE_PREFIX, system, MAX_PATH, "");
return (res != ERROR_SUCCESS) ? res : res2;
}
Index: cygwin/include/cygwin/version.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/include/cygwin/version.h,v
retrieving revision 1.19
diff -u -p -r1.19 version.h
--- version.h 2000/10/30 01:53:02 1.19
+++ version.h 2000/11/05 18:34:56
@@ -156,6 +156,9 @@ details. */
#define CYGWIN_INFO_CYGWIN_REGISTRY_NAME "Cygwin"
#define CYGWIN_INFO_PROGRAM_OPTIONS_NAME "Program Options"
#define CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME "mounts v2"
+#define CYGWIN_INFO_CYGDRIVE_FLAGS "cygdrive flags"
+#define CYGWIN_INFO_CYGDRIVE_PREFIX "cygdrive prefix"
+#define CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX "/cygdrive"
/* In addition to the above version number strings, the build
process adds some strings that may be useful in
--fJTEvxt9BaY1Ejyj--
- Raw text -