[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Compile on mingw32
From: |
Paul Eggert |
Subject: |
Re: [PATCH] Compile on mingw32 |
Date: |
Sun, 25 Nov 2007 09:24:15 -0800 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) |
Thanks for that bug report. I applied the following
slightly-different patch, to avoid other GCC warnings about shadowed
variables:
2007-11-25 Paul Eggert <address@hidden>
* gzip.c (handled_sig): Move out of install_signal_handlers, and
move previous to all uses of SIGPIPE, to fix a bug encountered when
porting to mingw32. Reported by Robert Millan in
<http://lists.gnu.org/archive/html/bug-gzip/2007-11/msg00007.html>.
Index: gzip.c
===================================================================
RCS file: /cvsroot/gzip/gzip/gzip.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -p -u -r1.20 -r1.21
--- gzip.c 3 Jul 2007 20:37:08 -0000 1.20
+++ gzip.c 25 Nov 2007 17:19:46 -0000 1.21
@@ -54,7 +54,7 @@ static char *license_msg[] = {
*/
#ifdef RCSID
-static char rcsid[] = "$Id: gzip.c,v 1.20 2007/07/03 20:37:08 eggert Exp $";
+static char rcsid[] = "$Id: gzip.c,v 1.21 2007/11/25 17:19:46 eggert Exp $";
#endif
#include <config.h>
@@ -232,6 +232,30 @@ unsigned insize; /* valid byte
unsigned inptr; /* index of next byte to be processed in inbuf */
unsigned outcnt; /* bytes in output buffer */
+static int handled_sig[] =
+ {
+ /* SIGINT must be first, as 'foreground' depends on it. */
+ SIGINT
+
+#ifdef SIGHUP
+ , SIGHUP
+#endif
+#ifdef SIGPIPE
+ , SIGPIPE
+#else
+# define SIGPIPE 0
+#endif
+#ifdef SIGTERM
+ , SIGTERM
+#endif
+#ifdef SIGXCPU
+ , SIGXCPU
+#endif
+#ifdef SIGXFSZ
+ , SIGXFSZ
+#endif
+ };
+
struct option longopts[] =
{
/* { name has_arg *flag val } */
@@ -1755,30 +1779,7 @@ local void treat_dir (fd, dir)
static void
install_signal_handlers ()
{
- static int sig[] =
- {
- /* SIGINT must be first, as 'foreground' depends on it. */
- SIGINT
-
-#ifdef SIGHUP
- , SIGHUP
-#endif
-#ifdef SIGPIPE
- , SIGPIPE
-#else
-# define SIGPIPE 0
-#endif
-#ifdef SIGTERM
- , SIGTERM
-#endif
-#ifdef SIGXCPU
- , SIGXCPU
-#endif
-#ifdef SIGXFSZ
- , SIGXFSZ
-#endif
- };
- int nsigs = sizeof sig / sizeof sig[0];
+ int nsigs = sizeof handled_sig / sizeof handled_sig[0];
int i;
#if SA_NOCLDSTOP
@@ -1787,9 +1788,9 @@ install_signal_handlers ()
sigemptyset (&caught_signals);
for (i = 0; i < nsigs; i++)
{
- sigaction (sig[i], NULL, &act);
+ sigaction (handled_sig[i], NULL, &act);
if (act.sa_handler != SIG_IGN)
- sigaddset (&caught_signals, sig[i]);
+ sigaddset (&caught_signals, handled_sig[i]);
}
act.sa_handler = abort_gzip_signal;
@@ -1797,20 +1798,20 @@ install_signal_handlers ()
act.sa_flags = 0;
for (i = 0; i < nsigs; i++)
- if (sigismember (&caught_signals, sig[i]))
+ if (sigismember (&caught_signals, handled_sig[i]))
{
if (i == 0)
foreground = 1;
- sigaction (sig[i], &act, NULL);
+ sigaction (handled_sig[i], &act, NULL);
}
#else
for (i = 0; i < nsigs; i++)
- if (signal (sig[i], SIG_IGN) != SIG_IGN)
+ if (signal (handled_sig[i], SIG_IGN) != SIG_IGN)
{
if (i == 0)
foreground = 1;
- signal (sig[i], abort_gzip_signal);
- siginterrupt (sig[i], 1);
+ signal (handled_sig[i], abort_gzip_signal);
+ siginterrupt (handled_sig[i], 1);
}
#endif
}