* 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.
This commit is contained in:
parent
32c3034969
commit
07c3cd5bb1
@ -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>
|
Tue Jun 26 10:47:24 2001 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
* mmap.cc: Clean up *ResourceLock calls throughout.
|
* mmap.cc: Clean up *ResourceLock calls throughout.
|
||||||
|
@ -993,8 +993,8 @@ fhandler_disk_file::fstat (struct stat *buf)
|
|||||||
{
|
{
|
||||||
/* FIXME should we use /etc/magic ? */
|
/* FIXME should we use /etc/magic ? */
|
||||||
magic[0] = magic[1] = magic[2] = '\0';
|
magic[0] = magic[1] = magic[2] = '\0';
|
||||||
if (ReadFile (get_handle (), magic, 3, &done, 0) &&
|
if (ReadFile (get_handle (), magic, 3, &done, NULL) &&
|
||||||
done == 3 && has_exec_chars (magic, done))
|
has_exec_chars (magic, done))
|
||||||
set_execable_p ();
|
set_execable_p ();
|
||||||
SetFilePointer (get_handle(), cur, NULL, FILE_BEGIN);
|
SetFilePointer (get_handle(), cur, NULL, FILE_BEGIN);
|
||||||
}
|
}
|
||||||
|
@ -743,6 +743,7 @@ skip_arg_parsing:
|
|||||||
|
|
||||||
HANDLE waitbuf[3] = {pi.hProcess, signal_arrived, spr};
|
HANDLE waitbuf[3] = {pi.hProcess, signal_arrived, spr};
|
||||||
int nwait = 3;
|
int nwait = 3;
|
||||||
|
bool saw_signal = 0;
|
||||||
|
|
||||||
res = 0;
|
res = 0;
|
||||||
exited = FALSE;
|
exited = FALSE;
|
||||||
@ -761,8 +762,8 @@ skip_arg_parsing:
|
|||||||
break;
|
break;
|
||||||
case WAIT_OBJECT_0 + 1:
|
case WAIT_OBJECT_0 + 1:
|
||||||
sigproc_printf ("signal arrived");
|
sigproc_printf ("signal arrived");
|
||||||
// reset_signal_arrived ();
|
reset_signal_arrived ();
|
||||||
thisframe.call_signal_handler ();
|
saw_signal = 1;
|
||||||
continue;
|
continue;
|
||||||
case WAIT_OBJECT_0 + 2:
|
case WAIT_OBJECT_0 + 2:
|
||||||
if (mode == _P_OVERLAY)
|
if (mode == _P_OVERLAY)
|
||||||
@ -820,6 +821,9 @@ skip_arg_parsing:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (saw_signal && mode != _P_OVERLAY)
|
||||||
|
thisframe.call_signal_handler ();
|
||||||
|
|
||||||
MALLOC_CHECK;
|
MALLOC_CHECK;
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
|
@ -1068,10 +1068,17 @@ stat_worker (const char *caller, const char *name, struct stat *buf,
|
|||||||
(os_being_run == winNT
|
(os_being_run == winNT
|
||||||
&& dtype != DRIVE_NO_ROOT_DIR
|
&& dtype != DRIVE_NO_ROOT_DIR
|
||||||
&& dtype != DRIVE_UNKNOWN)))
|
&& dtype != DRIVE_UNKNOWN)))
|
||||||
|
{
|
||||||
|
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);
|
fh.set_query_open (TRUE);
|
||||||
oret = fh.open (real_path, O_RDONLY | O_BINARY | O_DIROPEN |
|
oret = fh.open (real_path, O_RDONLY | O_BINARY | O_DIROPEN |
|
||||||
(nofollow ? O_NOSYMLINK : 0), 0);
|
(nofollow ? O_NOSYMLINK : 0), 0);
|
||||||
|
}
|
||||||
/* Check a special case here. If ntsec is ON it happens
|
/* Check a special case here. If ntsec is ON it happens
|
||||||
that a process creates a file using mode 000 to disallow
|
that a process creates a file using mode 000 to disallow
|
||||||
other processes access. In contrast to UNIX, this results
|
other processes access. In contrast to UNIX, this results
|
||||||
|
Loading…
x
Reference in New Issue
Block a user