* path.cc (oopts): Sort alphabetically, add missing "auto" and
"override" entries. (from_fstab_line): Handle mount points same as Cygwin itself. Use "cygdrive prefix" as posix name of cygdrive prefix. (from_fstab): Add auto entries for /usr/bin and /usr/lib. Add MOUNT_AUTOMATIC and MOUNT_IMMUTABLE flags to default root dir entry. Use "cygdrive prefix" as posix name of default cygdrive prefix. (getmntent): Allocate smaller buffers. Align output closer to output of mount(1).
This commit is contained in:
		
							parent
							
								
									5c1939c8c4
								
							
						
					
					
						commit
						070a99e8aa
					
				|  | @ -1,3 +1,15 @@ | |||
| 2009-06-10  Corinna Vinschen  <corinna@vinschen.de> | ||||
| 
 | ||||
| 	* path.cc (oopts): Sort alphabetically, add missing "auto" and | ||||
| 	"override" entries. | ||||
| 	(from_fstab_line): Handle mount points same as Cygwin itself.  Use | ||||
| 	"cygdrive prefix" as posix name of cygdrive prefix. | ||||
| 	(from_fstab): Add auto entries for /usr/bin and /usr/lib.  Add | ||||
| 	MOUNT_AUTOMATIC and MOUNT_IMMUTABLE flags to default root dir entry. | ||||
| 	Use "cygdrive prefix" as posix name of default cygdrive prefix. | ||||
| 	(getmntent): Allocate smaller buffers.  Align output closer to output | ||||
| 	of mount(1). | ||||
| 
 | ||||
| 2009-05-17  Corinna Vinschen  <corinna@vinschen.de> | ||||
| 
 | ||||
| 	* cygpath.cc (codepage): New variable. | ||||
|  |  | |||
|  | @ -309,18 +309,20 @@ static struct opt | |||
|   bool clear; | ||||
| } oopts[] = | ||||
| { | ||||
|   {"user", MOUNT_SYSTEM, 1}, | ||||
|   {"nouser", MOUNT_SYSTEM, 0}, | ||||
|   {"binary", MOUNT_BINARY, 0}, | ||||
|   {"text", MOUNT_BINARY, 1}, | ||||
|   {"exec", MOUNT_EXEC, 0}, | ||||
|   {"notexec", MOUNT_NOTEXEC, 0}, | ||||
|   {"cygexec", MOUNT_CYGWIN_EXEC, 0}, | ||||
|   {"nosuid", 0, 0}, | ||||
|   {"acl", MOUNT_NOACL, 1}, | ||||
|   {"auto", 0, 0}, | ||||
|   {"binary", MOUNT_BINARY, 0}, | ||||
|   {"cygexec", MOUNT_CYGWIN_EXEC, 0}, | ||||
|   {"exec", MOUNT_EXEC, 0}, | ||||
|   {"noacl", MOUNT_NOACL, 0}, | ||||
|   {"nosuid", 0, 0}, | ||||
|   {"notexec", MOUNT_NOTEXEC, 0}, | ||||
|   {"nouser", MOUNT_SYSTEM, 0}, | ||||
|   {"override", MOUNT_OVERRIDE, 0}, | ||||
|   {"posix=0", MOUNT_NOPOSIX, 0}, | ||||
|   {"posix=1", MOUNT_NOPOSIX, 1}, | ||||
|   {"posix=0", MOUNT_NOPOSIX, 0} | ||||
|   {"text", MOUNT_BINARY, 1}, | ||||
|   {"user", MOUNT_SYSTEM, 1} | ||||
| }; | ||||
| 
 | ||||
| static bool | ||||
|  | @ -405,21 +407,29 @@ from_fstab_line (mnt_t *m, char *line, bool user) | |||
| 	    return false; | ||||
| 	  } | ||||
|       m->posix = strdup (posix_path); | ||||
|       m->native = strdup ("."); | ||||
|       m->native = strdup ("cygdrive prefix"); | ||||
|       m->flags = mount_flags | MOUNT_CYGDRIVE; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       for (mnt_t *sm = mount_table; sm < m; ++sm) | ||||
| 	if (!strcasecmp (sm->posix, posix_path)) | ||||
| 	if (!strcmp (sm->posix, posix_path)) | ||||
| 	  { | ||||
| 	    if ((mount_flags & MOUNT_SYSTEM) || !(sm->flags & MOUNT_SYSTEM)) | ||||
| 	      { | ||||
| 	      	if (sm->native) | ||||
| 		  free (sm->native); | ||||
| 		sm->native = strdup (native_path); | ||||
| 		sm->flags = mount_flags; | ||||
| 	      } | ||||
| 	    /* Don't allow overriding of a system mount with a user mount. */ | ||||
| 	    if ((sm->flags & MOUNT_SYSTEM) && !(mount_flags & MOUNT_SYSTEM)) | ||||
| 	      return false; | ||||
| 	    if ((sm->flags & MOUNT_SYSTEM) != (mount_flags & MOUNT_SYSTEM)) | ||||
| 	      continue; | ||||
| 	    /* Changing immutable mount points require the override flag. */ | ||||
| 	    if ((sm->flags & MOUNT_IMMUTABLE) | ||||
| 	    	&& !(mount_flags & MOUNT_OVERRIDE)) | ||||
| 	      return false; | ||||
| 	    if (mount_flags & MOUNT_OVERRIDE) | ||||
| 	      mount_flags |= MOUNT_IMMUTABLE; | ||||
| 	    if (sm->native) | ||||
| 	      free (sm->native); | ||||
| 	    sm->native = strdup (native_path); | ||||
| 	    sm->flags = mount_flags; | ||||
| 	    return false; | ||||
| 	  } | ||||
|       m->posix = strdup (posix_path); | ||||
|  | @ -462,13 +472,26 @@ from_fstab (bool user, PWCHAR path, PWCHAR path_end) | |||
|         *(native_path += 2) = '\\'; | ||||
|       m->posix = strdup ("/"); | ||||
|       m->native = strdup (native_path); | ||||
|       m->flags = MOUNT_SYSTEM | MOUNT_BINARY; | ||||
|       m->flags = MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_IMMUTABLE | ||||
| 		 | MOUNT_AUTOMATIC; | ||||
|       ++m; | ||||
|       /* Create default /usr/bin and /usr/lib entries. */ | ||||
|       char *trail = strchr (native_path, '\0'); | ||||
|       strcpy (trail, "\\bin"); | ||||
|       m->posix = strdup ("/usr/bin"); | ||||
|       m->native = strdup (native_path); | ||||
|       m->flags = MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC; | ||||
|       ++m; | ||||
|       strcpy (trail, "\\lib"); | ||||
|       m->posix = strdup ("/usr/lib"); | ||||
|       m->native = strdup (native_path); | ||||
|       m->flags = MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC; | ||||
|       ++m; | ||||
|       /* Create a default cygdrive entry.  Note that this is a user entry.
 | ||||
|          This allows to override it with mount, unless the sysadmin created | ||||
|          a cygdrive entry in /etc/fstab. */ | ||||
|       m->posix = strdup (CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX); | ||||
|       m->native = strdup ("."); | ||||
|       m->native = strdup ("cygdrive prefix"); | ||||
|       m->flags = MOUNT_BINARY | MOUNT_CYGDRIVE; | ||||
|       ++m; | ||||
|       max_mount_entry = m - mount_table; | ||||
|  | @ -845,29 +868,33 @@ getmntent (FILE *) | |||
|   mnt.mnt_fsname = (char *) m->native; | ||||
|   mnt.mnt_dir = (char *) m->posix; | ||||
|   if (!mnt.mnt_type) | ||||
|     mnt.mnt_type = (char *) malloc (1024); | ||||
|     mnt.mnt_type = (char *) malloc (16); | ||||
|   if (!mnt.mnt_opts) | ||||
|     mnt.mnt_opts = (char *) malloc (1024); | ||||
|   if (m->flags & MOUNT_SYSTEM) | ||||
|     strcpy (mnt.mnt_type, (char *) "system"); | ||||
|   else | ||||
|     strcpy (mnt.mnt_type, (char *) "user"); | ||||
|     mnt.mnt_opts = (char *) malloc (64); | ||||
| 
 | ||||
|   strcpy (mnt.mnt_type, (char *) (m->flags & MOUNT_SYSTEM) ? "system" : "user"); | ||||
| 
 | ||||
|   if (!(m->flags & MOUNT_BINARY)) | ||||
|     strcpy (mnt.mnt_opts, (char *) "textmode"); | ||||
|     strcpy (mnt.mnt_opts, (char *) "text"); | ||||
|   else | ||||
|     strcpy (mnt.mnt_opts, (char *) "binmode"); | ||||
|     strcpy (mnt.mnt_opts, (char *) "binary"); | ||||
| 
 | ||||
|   if (m->flags & MOUNT_CYGWIN_EXEC) | ||||
|     strcat (mnt.mnt_opts, (char *) ",cygexec"); | ||||
|   else if (m->flags & MOUNT_EXEC) | ||||
|     strcat (mnt.mnt_opts, (char *) ",exec"); | ||||
|   else if (m->flags & MOUNT_NOTEXEC) | ||||
|     strcat (mnt.mnt_opts, (char *) ",noexec"); | ||||
|   if ((m->flags & MOUNT_CYGDRIVE))	/* cygdrive */ | ||||
|     strcat (mnt.mnt_opts, (char *) ",cygdrive"); | ||||
|   if ((m->flags & MOUNT_NOACL)) | ||||
| 
 | ||||
|   if (m->flags & MOUNT_NOACL) | ||||
|     strcat (mnt.mnt_opts, (char *) ",noacl"); | ||||
|   if ((m->flags & MOUNT_NOPOSIX)) | ||||
| 
 | ||||
|   if (m->flags & MOUNT_NOPOSIX) | ||||
|     strcat (mnt.mnt_opts, (char *) ",posix=0"); | ||||
| 
 | ||||
|   if (m->flags & (MOUNT_AUTOMATIC | MOUNT_CYGDRIVE)) | ||||
|     strcat (mnt.mnt_opts, (char *) ",auto"); | ||||
| 
 | ||||
|   mnt.mnt_freq = 1; | ||||
|   mnt.mnt_passno = 1; | ||||
|   m++; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue