* path.cc (symlink_check_one): Recognize symlink settings from the mount table.
* path.h: Make PATH_SYMLINK an alias for MOUNT_SYMLINK. * syscalls.cc (stat_worker): Use extension search mechanism in path_conv to look for .exe rather than trying to special case it here. * mount.h: Make MOUNT_SYMLINK a real option.
This commit is contained in:
		| @@ -1,3 +1,12 @@ | ||||
| Sat Mar 25 20:46:39 2000  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
| 	* path.cc (symlink_check_one): Recognize symlink settings from the | ||||
| 	mount table. | ||||
| 	* path.h: Make PATH_SYMLINK an alias for MOUNT_SYMLINK. | ||||
| 	* syscalls.cc (stat_worker): Use extension search mechanism in | ||||
| 	path_conv to look for .exe rather than trying to special case it here. | ||||
| 	* mount.h: Make MOUNT_SYMLINK a real option. | ||||
|  | ||||
| Sat Mar 25 00:22:32 2000  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
| 	* environ.cc: Add TMPDIR to the list of environment variables which are | ||||
| @@ -7,7 +16,7 @@ Sat Mar 25 00:22:32 2000  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
| Sun Mar 19 12:01:00 2000  Corinna Vinschen <corinna@vinschen.de> | ||||
|  | ||||
|         * syscalls.cc (stat_worker): Set st_nlink to 1 on remote drives. | ||||
| 	* syscalls.cc (stat_worker): Set st_nlink to 1 on remote drives. | ||||
|  | ||||
| Sat Mar 18 23:04:27 2000  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
| @@ -30,41 +39,41 @@ Sat Mar 18 01:24:25 2000  Christopher Faylor <cgf@cygnus.com> | ||||
| Fri Mar 17 18:16:00 2000  Corinna Vinschen <corinna@vinschen.de> | ||||
|  | ||||
| 	Patch suggested by Eric Fifer <EFifer@sanwaint.com> | ||||
|         * fhandler.cc (fhandler_base::open): Call set_file_attribute() | ||||
|         only if a file is really created. | ||||
| 	* fhandler.cc (fhandler_base::open): Call set_file_attribute() | ||||
| 	only if a file is really created. | ||||
|  | ||||
| Thu Mar 16 14:15:00 2000  Corinna Vinschen <corinna@vinschen.de> | ||||
|  | ||||
|         * security.cc (set_process_privileges): Remove `static'. | ||||
|         (get_nt_attribute): Returns uid and gid additionally. Remove call | ||||
|         to set_process_privileges(). | ||||
|         (get_file_attribute): Returns uid and gid additionally. Don't | ||||
|         call ntea if ntsec is ON. | ||||
|         (set_nt_attribute): Remove call to set_process_privileges(). | ||||
|         Don't call ntea if ntsec is ON. | ||||
|         (acl): Remove call to set_process_privileges(). | ||||
|         * dcrt0.cc (dll_crt0_1): Call set_process_privileges(). | ||||
|         * winsup.h: New prototype for set_process_privileges(), | ||||
|         changed prototype for get_file_attribute(). | ||||
|         * fhandler.cc (get_file_owner): Discard function. | ||||
|         (get_file_group): Ditto. | ||||
|         (fhandler_disk_file::fstat): Discard calls to get_file_owner() and | ||||
|         get_file_group(). | ||||
|         * path.cc (path_conv::path_conv): New debugging output for result | ||||
|         of GetVolumeInformation(). | ||||
|         (mount_info::conv_to_win32_path): Call backslashify() with pathbuf | ||||
|         instead of src_path. | ||||
|         * syscalls.cc (chown): Reformat slightly. | ||||
|         (chmod): Replace get_file_owner() and get_file_group() calls | ||||
|         by a call to get_file_attribute(). Discard local variable has_acls. | ||||
|         Reformat slightly. | ||||
|         (stat_worker): Root dir check now done by a call to rootdir(). | ||||
|         Don't call num_entries() on remote drives. | ||||
|         Discard local variable has_acls. | ||||
| 	* security.cc (set_process_privileges): Remove `static'. | ||||
| 	(get_nt_attribute): Returns uid and gid additionally. Remove call | ||||
| 	to set_process_privileges(). | ||||
| 	(get_file_attribute): Returns uid and gid additionally. Don't | ||||
| 	call ntea if ntsec is ON. | ||||
| 	(set_nt_attribute): Remove call to set_process_privileges(). | ||||
| 	Don't call ntea if ntsec is ON. | ||||
| 	(acl): Remove call to set_process_privileges(). | ||||
| 	* dcrt0.cc (dll_crt0_1): Call set_process_privileges(). | ||||
| 	* winsup.h: New prototype for set_process_privileges(), | ||||
| 	changed prototype for get_file_attribute(). | ||||
| 	* fhandler.cc (get_file_owner): Discard function. | ||||
| 	(get_file_group): Ditto. | ||||
| 	(fhandler_disk_file::fstat): Discard calls to get_file_owner() and | ||||
| 	get_file_group(). | ||||
| 	* path.cc (path_conv::path_conv): New debugging output for result | ||||
| 	of GetVolumeInformation(). | ||||
| 	(mount_info::conv_to_win32_path): Call backslashify() with pathbuf | ||||
| 	instead of src_path. | ||||
| 	* syscalls.cc (chown): Reformat slightly. | ||||
| 	(chmod): Replace get_file_owner() and get_file_group() calls | ||||
| 	by a call to get_file_attribute(). Discard local variable has_acls. | ||||
| 	Reformat slightly. | ||||
| 	(stat_worker): Root dir check now done by a call to rootdir(). | ||||
| 	Don't call num_entries() on remote drives. | ||||
| 	Discard local variable has_acls. | ||||
|  | ||||
| Wed Mar 15 20:38:06 2000  Corinna Vinschen <corinna@vinschen.de> | ||||
|  | ||||
|         * errno.cc: Map ERROR_NOACCESS to EFAULT. | ||||
| 	* errno.cc: Map ERROR_NOACCESS to EFAULT. | ||||
|  | ||||
| Wed Mar 15 14:25:38 2000  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ extern "C" { | ||||
|  | ||||
| enum | ||||
|   { | ||||
|     /* MOUNT_SYMLINK = 1, place holder.  Do not use it. */ | ||||
|     MOUNT_SYMLINK = 1,	/* "mount point" is a symlink */ | ||||
|     MOUNT_BINARY =  2,	/* "binary" format read/writes */ | ||||
|     MOUNT_SYSTEM =  8,	/* mount point came from system table */ | ||||
|     MOUNT_EXEC   = 16,	/* Any file in the mounted directory gets 'x' bit */ | ||||
|   | ||||
| @@ -2156,7 +2156,7 @@ symlink_check_one (const char *in_path, char *buf, int buflen, DWORD& fileattr, | ||||
|  | ||||
|       /* A symlink will have the `system' file attribute. */ | ||||
|       /* Only files can be symlinks (which can be symlinks to directories). */ | ||||
|       if (!SYMLINKATTR (fileattr)) | ||||
|       if (!(*pflags & PATH_SYMLINK) && !SYMLINKATTR (fileattr)) | ||||
| 	goto file_not_symlink; | ||||
|  | ||||
|       /* Check the file's extended attributes, if it has any.  */ | ||||
|   | ||||
| @@ -28,7 +28,7 @@ enum symlink_follow | ||||
| enum | ||||
| { | ||||
|   PATH_NOTHING = 0, | ||||
|   PATH_SYMLINK = 1, | ||||
|   PATH_SYMLINK = MOUNT_SYMLINK, | ||||
|   PATH_BINARY = MOUNT_BINARY, | ||||
|   PATH_EXEC = MOUNT_EXEC, | ||||
|   PATH_SOCKET =  0x40000000, | ||||
|   | ||||
| @@ -917,6 +917,12 @@ stat_dev (DWORD devn, int unit, unsigned long ino, struct stat *buf) | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
| static suffix_info stat_suffixes[] =  | ||||
| { | ||||
|   suffix_info ("", 1), | ||||
|   suffix_info (".exe", 1) | ||||
| }; | ||||
|  | ||||
| /* Cygwin internal */ | ||||
| static int | ||||
| stat_worker (const char *caller, const char *name, struct stat *buf, | ||||
| @@ -931,7 +937,9 @@ stat_worker (const char *caller, const char *name, struct stat *buf, | ||||
|  | ||||
|   debug_printf ("%s (%s, %p)", caller, name, buf); | ||||
|  | ||||
|   path_conv real_path (name, nofollow ? SYMLINK_NOFOLLOW : SYMLINK_FOLLOW, 1); | ||||
|   path_conv real_path (name, nofollow ? SYMLINK_NOFOLLOW : SYMLINK_FOLLOW, 1, | ||||
| 		       stat_suffixes); | ||||
|  | ||||
|   if (real_path.error) | ||||
|     { | ||||
|       set_errno (real_path.error); | ||||
| @@ -947,25 +955,6 @@ stat_worker (const char *caller, const char *name, struct stat *buf, | ||||
|  | ||||
|   atts = real_path.file_attributes (); | ||||
|  | ||||
| /* FIXME: this is of dubious merit and is fundamentally flawed. | ||||
|    E.g., what if the .exe file is a symlink?  This is not accounted | ||||
|    for here.  Also, what about all of the other special extensions? | ||||
|  | ||||
|    This could be "fixed" by passing the appropriate extension list | ||||
|    to path_conv but I'm not sure that this is really justified.  */ | ||||
|  | ||||
|   /* If we can't find the name, try again with a .exe suffix | ||||
|      [but only if not already present].  */ | ||||
|   if (atts == -1 && GetLastError () == ERROR_FILE_NOT_FOUND && | ||||
|       !(strrchr (win32_name, '.') > strrchr (win32_name, '\\'))) | ||||
|     { | ||||
|       debug_printf ("trying with .exe suffix"); | ||||
|       strcat (win32_name, ".exe"); | ||||
|       atts = (int) GetFileAttributesA (win32_name); | ||||
|       if (atts == -1) | ||||
| 	strchr (win32_name, '\0')[4] = '\0'; | ||||
|     } | ||||
|  | ||||
|   debug_printf ("%d = GetFileAttributesA (%s)", atts, win32_name); | ||||
|  | ||||
|   strcpy (root, win32_name); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user