From bb57e6a7fc0e8c20adecedc1575b3293d0c9729e Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 25 Nov 2007 17:19:45 +0000 Subject: [PATCH] * 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 . --- ChangeLog | 7 +++++++ gzip.c | 63 ++++++++++++++++++++++++++++--------------------------- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index 474efe7..e220819 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-11-25 Paul Eggert + + * 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 + . + 2007-10-04 Paul Eggert * doc/gzip.texi: Adjust to new fdl.texi format, in gnulib. diff --git a/gzip.c b/gzip.c index 7de582d..b8916c1 100644 --- a/gzip.c +++ b/gzip.c @@ -232,6 +232,30 @@ unsigned insize; /* valid bytes in inbuf */ 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 } -- 2.30.2