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
path: root/winsup
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-03-20 04:34:53 +0300
committerChristopher Faylor <me@cgf.cx>2003-03-20 04:34:53 +0300
commit4da34970dea1656ccc686491a988452533a3ce77 (patch)
tree3f5bd769470eadf35d9215adcb11cda7452d8f1d /winsup
parent8e3121c535a304caccc43d3f8005b95d837f63a9 (diff)
* sigproc.h (signal_fixup_after_exec): Eliminate argument in declaration.
* exceptions.cc (signal_fixup_after_exec): Eliminate argument in definition. Don't reset signal handlers after spawm. Just treat like fork/exec. * dcrt0.cc (dll_crt0_1): Don't pass PROC_SPAWN argument to signal_fixup_after_exec. * syscalls.cc (unlink): Don't change attributes of file if not readonly/system. Ditto for resetting of arguments.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog11
-rw-r--r--winsup/cygwin/dcrt0.cc2
-rw-r--r--winsup/cygwin/exceptions.cc4
-rw-r--r--winsup/cygwin/sigproc.h2
-rw-r--r--winsup/cygwin/syscalls.cc22
5 files changed, 30 insertions, 11 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index bc70eed7e..d79fd7588 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,14 @@
+2003-03-19 Christopher Faylor <cgf@redhat.com>
+
+ * sigproc.h (signal_fixup_after_exec): Eliminate argument in declaration.
+ * exceptions.cc (signal_fixup_after_exec): Eliminate argument in
+ definition. Don't reset signal handlers after spawm. Just treat like
+ fork/exec.
+ * dcrt0.cc (dll_crt0_1): Don't pass PROC_SPAWN argument to
+ signal_fixup_after_exec.
+ * syscalls.cc (unlink): Don't change attributes of file if not readonly/system.
+ Ditto for resetting of arguments.
+
2003-03-19 Corinna Vinschen <corinna@vinschen.de>
* glob.c: Eliminate __INSIDE_CYGWIN__ preprocessor conditionals
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 515745c25..9da8111ec 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -612,7 +612,7 @@ dll_crt0_1 ()
envp = spawn_info->moreinfo->envp;
envc = spawn_info->moreinfo->envc;
cygheap->fdtab.fixup_after_exec (spawn_info->parent);
- signal_fixup_after_exec (child_proc_info->type == PROC_SPAWN);
+ signal_fixup_after_exec ();
CloseHandle (spawn_info->parent);
if (spawn_info->moreinfo->old_title)
{
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index e2df0c913..5acbe558d 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -735,13 +735,13 @@ signal_fixup_after_fork ()
}
void __stdcall
-signal_fixup_after_exec (bool isspawn)
+signal_fixup_after_exec ()
{
/* Set up child's signal handlers */
for (int i = 0; i < NSIG; i++)
{
myself->getsig (i).sa_mask = 0;
- if (myself->getsig (i).sa_handler != SIG_IGN || isspawn)
+ if (myself->getsig (i).sa_handler != SIG_IGN)
myself->getsig (i).sa_handler = SIG_DFL;
}
}
diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h
index c8c208e13..cda8cad67 100644
--- a/winsup/cygwin/sigproc.h
+++ b/winsup/cygwin/sigproc.h
@@ -118,7 +118,7 @@ BOOL __stdcall pid_exists (pid_t) __attribute__ ((regparm(1)));
int __stdcall sig_send (_pinfo *, int, DWORD ebp = (DWORD) __builtin_frame_address (0),
bool exception = 0) __attribute__ ((regparm(3)));
void __stdcall signal_fixup_after_fork ();
-void __stdcall signal_fixup_after_exec (bool);
+void __stdcall signal_fixup_after_exec ();
void __stdcall wait_for_sigthread ();
extern char myself_nowait_dummy[];
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 61bb08646..7c6d9a703 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -146,8 +146,15 @@ unlink (const char *ourname)
goto done;
}
- /* Allow us to delete even if read-only */
- SetFileAttributes (win32_name, (DWORD) win32_name & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM));
+ bool setattrs;
+ if (!((DWORD) win32_name & (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)))
+ setattrs = false;
+ else
+ {
+ /* Allow us to delete even if read-only */
+ SetFileAttributes (win32_name, (DWORD) win32_name & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM));
+ setattrs = true;
+ }
/* Attempt to use "delete on close" semantics to handle removing
a file which may be open. */
HANDLE h;
@@ -155,12 +162,12 @@ unlink (const char *ourname)
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0);
if (h != INVALID_HANDLE_VALUE)
{
- (void) SetFileAttributes (win32_name, (DWORD) win32_name);
+ if (wincap.has_hard_links () && setattrs)
+ (void) SetFileAttributes (win32_name, (DWORD) win32_name);
BOOL res = CloseHandle (h);
syscall_printf ("%d = CloseHandle (%p)", res, h);
- if (!win32_name.isremote ()
- || (GetFileAttributes (win32_name) == INVALID_FILE_ATTRIBUTES
- || wincap.has_delete_on_close ()))
+ if (GetFileAttributes (win32_name) == INVALID_FILE_ATTRIBUTES
+ || !win32_name.isremote ())
{
syscall_printf ("CreateFile (FILE_FLAG_DELETE_ON_CLOSE) succeeded");
goto ok;
@@ -168,7 +175,8 @@ unlink (const char *ourname)
else
{
syscall_printf ("CreateFile (FILE_FLAG_DELETE_ON_CLOSE) failed");
- SetFileAttributes (win32_name, (DWORD) win32_name & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM));
+ if (setattrs)
+ SetFileAttributes (win32_name, (DWORD) win32_name & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM));
}
}