From d29b6111a5517d528bdaebfbd850c7e9471b41ae Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Tue, 28 Mar 2000 21:49:16 +0000 Subject: * Makefile.in: Use default rules when compiling cygrun.o. * dcrt0.cc (host_dependent_constants::init): Limit non-NT platforms to 32K chunks when copying regions during a fork. * path.cc (symlink_check_one): Add temporary debugging output. Simplify PATH_EXEC test. * syscalls.cc (stat_suffixes): Null terminate this list. --- winsup/cygwin/ChangeLog | 9 +++++++++ winsup/cygwin/Makefile.in | 4 ++-- winsup/cygwin/dcrt0.cc | 2 ++ winsup/cygwin/path.cc | 20 +++++++++++--------- winsup/cygwin/syscalls.cc | 3 ++- 5 files changed, 26 insertions(+), 12 deletions(-) (limited to 'winsup/cygwin') diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e3793d127..4b334f7d9 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +Tue Mar 28 16:45:42 2000 Christopher Faylor + + * Makefile.in: Use default rules when compiling cygrun.o. + * dcrt0.cc (host_dependent_constants::init): Limit non-NT platforms to + 32K chunks when copying regions during a fork. + * path.cc (symlink_check_one): Add temporary debugging output. + Simplify PATH_EXEC test. + * syscalls.cc (stat_suffixes): Null terminate this list. + Sat Mar 25 20:46:39 2000 Christopher Faylor * path.cc (symlink_check_one): Recognize symlink settings from the diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in index de386a91b..bcfa67d30 100644 --- a/winsup/cygwin/Makefile.in +++ b/winsup/cygwin/Makefile.in @@ -193,9 +193,9 @@ winver_stamp: mkvers.sh include/cygwin/version.h winver.rc $(DLL_OFILES) touch $@; \ $(COMPILE_CXX) -o version.o version.cc -cygrun.exe : $(srcdir)/cygrun.c $(DLL_IMPORTS) $(w32api_lib)/libuser32.a \ +cygrun.exe : cygrun.o $(DLL_IMPORTS) $(w32api_lib)/libuser32.a \ $(w32api_lib)/libshell32.a - $(CC) -o $@ -L$(w32api_lib) $(srcdir)/cygrun.c + $(CC) -o $@ -L$(w32api_lib) ${word 1,$^} # diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index b05b215e8..0a5c080ff 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -151,6 +151,7 @@ host_dependent_constants NO_COPY host_dependent; void host_dependent_constants::init () { + extern DWORD chunksize; /* fhandler_disk_file::lock needs a platform specific upper word value for locking entire files. @@ -169,6 +170,7 @@ host_dependent_constants::init () case win32s: win32_upper = 0x00000000; shared = FILE_SHARE_READ | FILE_SHARE_WRITE; + chunksize = 32 * 1024 * 1024; break; default: diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 6a18dc1ff..a58a1b445 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -2164,12 +2164,10 @@ symlink_check_one (const char *in_path, char *buf, int buflen, DWORD& fileattr, if (fileattr & FILE_ATTRIBUTE_DIRECTORY) unixattr |= S_IFDIR; - if (! get_file_attribute (TRUE, path, &unixattr)) + if (!get_file_attribute (TRUE, path, &unixattr)) { if (unixattr & STD_XBITS) *pflags |= PATH_EXEC; - if (! S_ISLNK (unixattr)) - ; } /* Open the file. */ @@ -2177,6 +2175,8 @@ symlink_check_one (const char *in_path, char *buf, int buflen, DWORD& fileattr, h = CreateFileA (path, GENERIC_READ, FILE_SHARE_READ, &sec_none_nih, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); +syscall_printf ("opened '%s'(%p)", path, h); + res = -1; if (h == INVALID_HANDLE_VALUE) __seterrno (); @@ -2185,6 +2185,7 @@ symlink_check_one (const char *in_path, char *buf, int buflen, DWORD& fileattr, char cookie_buf[sizeof (SYMLINK_COOKIE) - 1]; DWORD got; +syscall_printf ("ReadFile"); if (! ReadFile (h, cookie_buf, sizeof (cookie_buf), &got, 0)) set_errno (EIO); else if (got == sizeof (cookie_buf) @@ -2215,24 +2216,24 @@ symlink_check_one (const char *in_path, char *buf, int buflen, DWORD& fileattr, && memcmp (cookie_buf, SOCKET_COOKIE, sizeof (cookie_buf)) == 0) { - res = 0; *pflags |= PATH_SOCKET; goto close_and_return; } - else if (*pflags & PATH_EXEC) - goto close_and_return; - else if (!(*pflags & PATH_EXEC)) + else { /* Not a symlink, see if executable. */ - if (got >= 2 && + if (!(*pflags & PATH_EXEC) && got >= 2 && ((cookie_buf[0] == '#' && cookie_buf[1] == '!') || (cookie_buf[0] == ':' && cookie_buf[1] == '\n'))) *pflags |= PATH_EXEC; - close_and_return: + close_and_return: +syscall_printf ("close_and_return"); CloseHandle (h); goto file_not_symlink; } } + +syscall_printf ("breaking from loop"); CloseHandle (h); break; } @@ -2241,6 +2242,7 @@ symlink_check_one (const char *in_path, char *buf, int buflen, DWORD& fileattr, file_not_symlink: set_errno (EINVAL); + syscall_printf ("not a symlink"); if (ext_here) strcpy (buf, ext_here); res = 0; diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index dba72590d..a4c725368 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -920,7 +920,8 @@ stat_dev (DWORD devn, int unit, unsigned long ino, struct stat *buf) static suffix_info stat_suffixes[] = { suffix_info ("", 1), - suffix_info (".exe", 1) + suffix_info (".exe", 1), + suffix_info (NULL) }; /* Cygwin internal */ -- cgit v1.2.3