summaryrefslogtreecommitdiffstats
path: root/SOURCES/bash-3.2-2.4.4.patch
blob: 3f34241024838223bd00d6463dd9a309f42ce260 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
Index: array.c
===================================================================
--- array.c.orig
+++ array.c
@@ -877,7 +877,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)
Index: hashlib.c
===================================================================
--- hashlib.c.orig
+++ hashlib.c
@@ -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)
Index: jobs.c
===================================================================
--- jobs.c.orig
+++ jobs.c
@@ -1735,6 +1735,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,
Index: quit.h
===================================================================
--- quit.h.orig
+++ quit.h
@@ -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
Index: sig.c
===================================================================
--- sig.c.orig
+++ sig.c
@@ -61,13 +61,13 @@ extern int comsub_ignore_return;
 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. */
@@ -79,10 +79,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;
Index: sig.h
===================================================================
--- sig.h.orig
+++ sig.h
@@ -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));
Index: examples/loadables/tee.c
===================================================================
--- examples/loadables/tee.c.orig
+++ examples/loadables/tee.c
@@ -35,6 +35,7 @@
 #include "bashansi.h"
 
 #include <stdio.h>
+#include <signal.h>
 #include <errno.h>
 
 #include "builtins.h"
@@ -56,7 +57,7 @@ static FLIST *tee_flist;
 
 #define TEE_BUFSIZE	8192
 
-extern int interrupt_immediately;
+extern volatile sig_atomic_t interrupt_immediately;
 
 extern char *strerror ();