131 lines
3.7 KiB
Diff
131 lines
3.7 KiB
Diff
|
--- array.c
|
||
|
+++ array.c 2006-11-14 10:54:22.000000000 +0100
|
||
|
@@ -724,7 +724,7 @@ char *s, *sep;
|
||
|
* To make a running version, compile -DTEST_ARRAY and link with:
|
||
|
* xmalloc.o syntax.o lib/malloc/libmalloc.a lib/sh/libsh.a
|
||
|
*/
|
||
|
-int interrupt_immediately = 0;
|
||
|
+volatile sig_atomic_t interrupt_immediately = 0;
|
||
|
|
||
|
int
|
||
|
signal_is_trapped(s)
|
||
|
--- hashlib.c
|
||
|
+++ hashlib.c 2006-11-14 10:54:36.000000000 +0100
|
||
|
@@ -381,7 +381,7 @@ hash_pstats (table, name)
|
||
|
|
||
|
HASH_TABLE *table, *ntable;
|
||
|
|
||
|
-int interrupt_immediately = 0;
|
||
|
+volatile sig_atomic_t interrupt_immediately = 0;
|
||
|
|
||
|
int
|
||
|
signal_is_trapped (s)
|
||
|
--- jobs.c
|
||
|
+++ jobs.c 2001-05-02 18:20:31.000000000 +0200
|
||
|
@@ -1701,6 +1701,15 @@ make_child (command, async_p)
|
||
|
pid_t mypid;
|
||
|
|
||
|
mypid = getpid ();
|
||
|
+
|
||
|
+ if (interrupt_state)
|
||
|
+ {
|
||
|
+ struct timeval tv;
|
||
|
+ struct rusage rx;
|
||
|
+ (void) gettimeofday(&tv, NULL);
|
||
|
+ (void) getrusage(RUSAGE_SELF, &rx);
|
||
|
+ }
|
||
|
+
|
||
|
#if defined (BUFFERED_INPUT)
|
||
|
/* Close default_buffered_input if it's > 0. We don't close it if it's
|
||
|
0 because that's the file descriptor used when redirecting input,
|
||
|
--- quit.h
|
||
|
+++ quit.h 2006-11-14 10:43:18.000000000 +0100
|
||
|
@@ -21,9 +21,13 @@
|
||
|
#if !defined (_QUIT_H_)
|
||
|
#define _QUIT_H_
|
||
|
|
||
|
+#define __need_sig_atomic_t
|
||
|
+#include <signal.h>
|
||
|
+#undef __need_sig_atomic_t
|
||
|
+
|
||
|
/* Non-zero means SIGINT has already ocurred. */
|
||
|
-extern volatile int interrupt_state;
|
||
|
-extern volatile int terminating_signal;
|
||
|
+extern volatile sig_atomic_t interrupt_state;
|
||
|
+extern volatile sig_atomic_t terminating_signal;
|
||
|
|
||
|
/* Macro to call a great deal. SIGINT just sets the interrupt_state variable.
|
||
|
When it is safe, put QUIT in the code, and the "interrupt" will take
|
||
|
--- sig.c
|
||
|
+++ sig.c 2006-11-14 10:53:51.000000000 +0100
|
||
|
@@ -59,13 +59,13 @@ extern int loop_level, continuing, break
|
||
|
extern int parse_and_execute_level, shell_initialized;
|
||
|
|
||
|
/* Non-zero after SIGINT. */
|
||
|
-volatile int interrupt_state = 0;
|
||
|
+volatile sig_atomic_t interrupt_state = 0;
|
||
|
|
||
|
/* Non-zero after SIGWINCH */
|
||
|
-volatile int sigwinch_received = 0;
|
||
|
+volatile sig_atomic_t sigwinch_received = 0;
|
||
|
|
||
|
/* Set to the value of any terminating signal received. */
|
||
|
-volatile int terminating_signal = 0;
|
||
|
+volatile sig_atomic_t terminating_signal = 0;
|
||
|
|
||
|
/* The environment at the top-level R-E loop. We use this in
|
||
|
the case of error return. */
|
||
|
@@ -77,10 +77,10 @@ sigset_t top_level_mask;
|
||
|
#endif /* JOB_CONTROL */
|
||
|
|
||
|
/* When non-zero, we throw_to_top_level (). */
|
||
|
-int interrupt_immediately = 0;
|
||
|
+volatile sig_atomic_t interrupt_immediately = 0;
|
||
|
|
||
|
/* When non-zero, we call the terminating signal handler immediately. */
|
||
|
-int terminate_immediately = 0;
|
||
|
+volatile sig_atomic_t terminate_immediately = 0;
|
||
|
|
||
|
#if defined (SIGWINCH)
|
||
|
static SigHandler *old_winch = (SigHandler *)SIG_DFL;
|
||
|
--- sig.h
|
||
|
+++ sig.h 2006-11-14 10:49:32.000000000 +0100
|
||
|
@@ -108,11 +108,15 @@ do { \
|
||
|
|
||
|
#endif /* JOB_CONTROL */
|
||
|
|
||
|
+#define __need_sig_atomic_t
|
||
|
+#include <signal.h>
|
||
|
+#undef __need_sig_atomic_t
|
||
|
+
|
||
|
/* Extern variables */
|
||
|
-extern volatile int sigwinch_received;
|
||
|
+extern volatile sig_atomic_t sigwinch_received;
|
||
|
|
||
|
-extern int interrupt_immediately;
|
||
|
-extern int terminate_immediately;
|
||
|
+extern volatile sig_atomic_t interrupt_immediately;
|
||
|
+extern volatile sig_atomic_t terminate_immediately;
|
||
|
|
||
|
/* Functions from sig.c. */
|
||
|
extern sighandler termsig_sighandler __P((int));
|
||
|
--- examples/loadables/tee.c
|
||
|
+++ examples/loadables/tee.c 2006-11-14 11:31:29.000000000 +0100
|
||
|
@@ -17,6 +17,7 @@
|
||
|
#include "bashansi.h"
|
||
|
|
||
|
#include <stdio.h>
|
||
|
+#include <signal.h>
|
||
|
#include <errno.h>
|
||
|
|
||
|
#include "builtins.h"
|
||
|
@@ -37,7 +38,7 @@ static FLIST *tee_flist;
|
||
|
|
||
|
#define TEE_BUFSIZE 8192
|
||
|
|
||
|
-extern int interrupt_immediately;
|
||
|
+extern volatile sig_atomic_t interrupt_immediately;
|
||
|
|
||
|
extern char *strerror ();
|
||
|
|