Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2001-06-27 01:03:08 +0400
committerChristopher Faylor <me@cgf.cx>2001-06-27 01:03:08 +0400
commit07c3cd5bb1d74bd173c1b98501e3e77ff0ba862a (patch)
tree7b20c1eb9ef656c4678c3de46ff84114ddcff46e
parent32c30349694070062428a8b52f362db45bf9d0c1 (diff)
* fhandler.cc (fhandler_disk_file::fstat): Don't rely on exactly 3 characters
being read for executable test since we could be checking for less than that. * syscalls.cc (stat_worker): Try opening the file the "correct" way first so that #! processing can potentially happen. If that fails, then use "query open" method. * spawn.cc (spawn_guts): Delay processing of signal until after we've notified parent about reparenting.
-rw-r--r--winsup/cygwin/ChangeLog12
-rw-r--r--winsup/cygwin/fhandler.cc4
-rw-r--r--winsup/cygwin/spawn.cc8
-rw-r--r--winsup/cygwin/syscalls.cc9
4 files changed, 28 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index b1f56ed0d..a04141e66 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,15 @@
+Tue Jun 26 16:59:16 2001 Christopher Faylor <cgf@cygnus.com>
+
+ * fhandler.cc (fhandler_disk_file::fstat): Don't rely on exactly 3
+ characters being read for executable test since we could be checking
+ for less than that.
+ * syscalls.cc (stat_worker): Try opening the file the "correct" way
+ first so that #! processing can potentially happen. If that fails,
+ then use "query open" method.
+
+ * spawn.cc (spawn_guts): Delay processing of signal until after we've
+ notified parent about reparenting.
+
Tue Jun 26 10:47:24 2001 Christopher Faylor <cgf@cygnus.com>
* mmap.cc: Clean up *ResourceLock calls throughout.
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 6c745c097..65ef21411 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -993,8 +993,8 @@ fhandler_disk_file::fstat (struct stat *buf)
{
/* FIXME should we use /etc/magic ? */
magic[0] = magic[1] = magic[2] = '\0';
- if (ReadFile (get_handle (), magic, 3, &done, 0) &&
- done == 3 && has_exec_chars (magic, done))
+ if (ReadFile (get_handle (), magic, 3, &done, NULL) &&
+ has_exec_chars (magic, done))
set_execable_p ();
SetFilePointer (get_handle(), cur, NULL, FILE_BEGIN);
}
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index db2603e30..d461e532b 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -743,6 +743,7 @@ skip_arg_parsing:
HANDLE waitbuf[3] = {pi.hProcess, signal_arrived, spr};
int nwait = 3;
+ bool saw_signal = 0;
res = 0;
exited = FALSE;
@@ -761,8 +762,8 @@ skip_arg_parsing:
break;
case WAIT_OBJECT_0 + 1:
sigproc_printf ("signal arrived");
- // reset_signal_arrived ();
- thisframe.call_signal_handler ();
+ reset_signal_arrived ();
+ saw_signal = 1;
continue;
case WAIT_OBJECT_0 + 2:
if (mode == _P_OVERLAY)
@@ -820,6 +821,9 @@ skip_arg_parsing:
}
}
+ if (saw_signal && mode != _P_OVERLAY)
+ thisframe.call_signal_handler ();
+
MALLOC_CHECK;
switch (mode)
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 23b6540e3..8b1a41e1e 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -1069,9 +1069,16 @@ stat_worker (const char *caller, const char *name, struct stat *buf,
&& dtype != DRIVE_NO_ROOT_DIR
&& dtype != DRIVE_UNKNOWN)))
{
- fh.set_query_open (TRUE);
oret = fh.open (real_path, O_RDONLY | O_BINARY | O_DIROPEN |
(nofollow ? O_NOSYMLINK : 0), 0);
+ /* If we couldn't open the file, try a "query open" with no permissions.
+ This will allow us to determine *some* things about the file, at least. */
+ if (!oret)
+ {
+ fh.set_query_open (TRUE);
+ oret = fh.open (real_path, O_RDONLY | O_BINARY | O_DIROPEN |
+ (nofollow ? O_NOSYMLINK : 0), 0);
+ }
/* Check a special case here. If ntsec is ON it happens
that a process creates a file using mode 000 to disallow
other processes access. In contrast to UNIX, this results