* 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:
parent
4f7831c1f5
commit
c114dfb0c0
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user