File bash-3.2-2.4.4.patch of Package bash

--- array.c
+++ array.c	2006-11-14 09:54:22.000000000 +0000
@@ -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)
--- hashlib.c
+++ hashlib.c	2006-11-14 09:54:36.000000000 +0000
@@ -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 16:20:31.000000000 +0000
@@ -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,
--- quit.h
+++ quit.h	2006-11-14 09:43:18.000000000 +0000
@@ -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 09:53:51.000000000 +0000
@@ -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;
--- sig.h
+++ sig.h	2006-11-14 09:49:32.000000000 +0000
@@ -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 10:31:29.000000000 +0000
@@ -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 ();