Revert "app-shells/bash: remove unused patches."
authorMike Frysinger <vapier@gentoo.org>
Sat, 14 Sep 2019 18:14:41 +0000 (14:14 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sun, 15 Sep 2019 07:50:58 +0000 (03:50 -0400)
This reverts commit 40314bb465f6ec08c01228ba7fb01c0c73450d44.

All of these patches are used.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
app-shells/bash/files/bash-3.0-afs.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-crash.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-histtimeformat.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-jobs.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-locale.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-manpage.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-multibyteifs.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-pwd.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-subshell.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-ulimit.patch [new file with mode: 0644]
app-shells/bash/files/bash-3.0-volatile-command.patch [new file with mode: 0644]

diff --git a/app-shells/bash/files/bash-3.0-afs.patch b/app-shells/bash/files/bash-3.0-afs.patch
new file mode 100644 (file)
index 0000000..f07371c
--- /dev/null
@@ -0,0 +1,20 @@
+Ripped from Fedora
+
+- Fixed AFS support for output redirection, so that the correct errors
+  are reported for other filesystems (bug #155373).
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=155373
+
+--- bash-3.0/redir.c.afs       2005-04-20 09:16:15.000000000 +0100
++++ bash-3.0/redir.c   2005-04-20 09:16:58.000000000 +0100
+@@ -596,7 +596,9 @@
+       fd = open (filename, flags, mode);
+ #if defined (AFS)
+       if ((fd < 0) && (errno == EACCES))
+-      fd = open (filename, flags & ~O_CREAT, mode);
++      if ((fd = open (filename, flags & ~O_CREAT, mode)) < 0)
++        /* Restore previous errno. */
++        errno = EACCES;
+ #endif /* AFS */
+     }
diff --git a/app-shells/bash/files/bash-3.0-crash.patch b/app-shells/bash/files/bash-3.0-crash.patch
new file mode 100644 (file)
index 0000000..984e85d
--- /dev/null
@@ -0,0 +1,46 @@
+> Machine Type: i686-pc-linux-gnu
+> 
+> Bash Version: 3.0
+> Patch Level: 0
+> Release Status: release
+> 
+> Description:
+>         GNU bash, version 3.00.0(1)-release (i686-pc-linux-gnu)
+>         (and
+>         GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu)
+> 
+>         dumps a core because of a null pointer "in make_bare_word 
+>         at make_cmd.c:90" (see gdb output below)
+
+Thanks for the report.  Here's a quick fix:
+
+*** arrayfunc.c~       Sat Nov  6 15:08:29 2004
+--- arrayfunc.c        Mon Jan 31 11:56:21 2005
+***************
+*** 709,713 ****
+         return ((char *)NULL);
+       }
+!       else if (var == 0)
+       return ((char *)NULL);
+        else if (array_p (var) == 0)
+--- 709,713 ----
+         return ((char *)NULL);
+       }
+!       else if (var == 0 || value_cell (var) == 0)
+       return ((char *)NULL);
+        else if (array_p (var) == 0)
+
+
+Chet
+
+-- 
+``The lyf so short, the craft so long to lerne.'' - Chaucer
+( ``Discere est Dolere'' -- chet )
+                                               Live...Laugh...Love
+Chet Ramey, ITS, CWRU    chet@po.cwru.edu    http://tiswww.tis.cwru.edu/~chet/
+
+
+_______________________________________________
+Bug-bash mailing list
+Bug-bash@gnu.org
+http://lists.gnu.org/mailman/listinfo/bug-bash
diff --git a/app-shells/bash/files/bash-3.0-histtimeformat.patch b/app-shells/bash/files/bash-3.0-histtimeformat.patch
new file mode 100644 (file)
index 0000000..b910600
--- /dev/null
@@ -0,0 +1,56 @@
+Ripped from Debian
+
+http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00008.html
+
+From: Enrique Perez-Terron <enrio@online.no>
+To: bug-bash@gnu.org
+Subject: When using HISTTIMEFORMAT, the date and the command are run
+       together.
+Date: Sun, 01 Aug 2004 18:36:45 +0200
+
+Configuration Information [Automatically generated, do not change]:
+Machine: i586
+OS: linux-gnu
+Compiler: gcc
+Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='i586'
+-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i586-pc-linux-gnu'
+-DCONF_VENDOR='pc' -DLOCALEDIR='/usr/local/share/locale'
+-DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H  -I.  -I. -I./include -I./lib  
+-g -O2
+uname output: Linux arabia.home.lan 2.6.6-1.435.2.3 #1 Thu Jul 1
+09:11:28 EDT 2004 i586 i586 i386 GNU/Linux
+Machine Type: i586-pc-linux-gnu
+
+# DP: Add space separating the time and the command in the
+# DP: output from the history builtin command.
+
+Bash Version: 3.0
+Patch Level: 0
+Release Status: release
+
+Description:
+       There is no space separating the time and the command in the 
+       output from the history builtin command.
+
+Repeat-By:
+       $ export HISTTIMEFORMAT=_A_format_string_
+       $ history 3
+         997  _A_format_string_echo $BASH_VERSION
+         998  _A_format_string_export HISTTIMEFORMAT=_A_format_string_
+         999  _A_format_string_history 3
+
+Fix:
+--- ./builtins/history.def.orig        2003-12-20 00:02:09.000000000 +0100
++++ ./builtins/history.def     2004-08-01 18:18:02.652720102 +0200
+@@ -287,9 +287,10 @@
+         QUIT;
+         timestr = (histtimefmt && *histtimefmt) ? histtime (hlist[i], histtimefmt) : (char *)NULL;
+-        printf ("%5d%c %s%s\n", i + history_base,
++        printf ("%5d%c %s%s%s\n", i + history_base,
+                 histdata(i) ? '*' : ' ',
+                 ((timestr && *timestr) ? timestr : ""),
++                ((timestr && *timestr) ? " " : ""),
+                 histline(i));
+         i++;
+       }
diff --git a/app-shells/bash/files/bash-3.0-jobs.patch b/app-shells/bash/files/bash-3.0-jobs.patch
new file mode 100644 (file)
index 0000000..72c149c
--- /dev/null
@@ -0,0 +1,56 @@
+Ripped from Fedora
+
+* Wed Sep  8 2004 Tim Waugh <twaugh@redhat.com> 3.0-13
+- Check for EINVAL from waitpid() and avoid WCONTINUED in that case.
+- Fixed jobs4 test.
+
+From:  Tim Waugh
+Subject:       [patch] bash-3.0: avoid WCONTINUED if invalid
+Date:  Wed, 8 Sep 2004 16:52:38 +0100
+User-agent:    Mutt/1.4.1i
+
+Hi,
+
+GNU libc defines WCONTINUED, but (at least on Linux 2.4.x kernels)
+waitpid() returns -1 with errno set to EINVAL if WCONTINUED is
+supplied in options.
+
+Here is a patch to retry without WCONTINUED set in that case.
+
+Tim.
+
+--- bash-3.0/tests/jobs4.sub
++++ bash-3.0/tests/jobs4.sub
+@@ -18,5 +18,5 @@
+ wait
+-cat &
++sleep 100 &
+ kill -1 %% && echo i killed it || echo could not kill it
+--- bash-3.0/jobs.c
++++ bash-3.0/jobs.c
+@@ -2475,6 +2475,7 @@
+   PROCESS *child;
+   pid_t pid;
+   int call_set_current, last_stopped_job, job, children_exited, waitpid_flags;
++  static int wcontinued_not_supported = 0;
+   call_set_current = children_exited = 0;
+   last_stopped_job = NO_JOB;
+@@ -2488,7 +2489,15 @@
+                       : 0;
+       if (sigchld || block == 0)
+       waitpid_flags |= WNOHANG;
++    retry:
++      if (wcontinued_not_supported)
++      waitpid_flags &= ~WCONTINUED;
+       pid = WAITPID (-1, &status, waitpid_flags);
++      if (pid == -1 && errno == EINVAL)
++      {
++        wcontinued_not_supported = 1;
++        goto retry;
++      }
+       /* The check for WNOHANG is to make sure we decrement sigchld only
+        if it was non-zero before we called waitpid. */
diff --git a/app-shells/bash/files/bash-3.0-locale.patch b/app-shells/bash/files/bash-3.0-locale.patch
new file mode 100644 (file)
index 0000000..ea1ef3d
--- /dev/null
@@ -0,0 +1,112 @@
+Ripped from SuSe
+
+http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00005.html
+
+From: schwab@suse.de
+To: bug-bash@gnu.org
+Subject: HISTTIMEFORMAT doesn't track locale changes
+Date: Sun,  1 Aug 2004 11:14:00 +0200 (CEST)
+
+Configuration Information [Automatically generated, do not change]:
+Machine: ia64
+OS: linux-gnu
+Compiler: gcc
+Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='ia64' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='ia64-unknown-linux-gnu' -DCONF_VENDOR='unknown' -DLOCALEDIR='/usr/local/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H  -I.  -I../bash-3.0 -I../bash-3.0/include -I../bash-3.0/lib   -O2 -g
+uname output: Linux sykes 2.6.5-22-default #1 SMP Fri Jul 2 13:43:23 UTC 2004 ia64 ia64 ia64 GNU/Linux
+Machine Type: ia64-unknown-linux-gnu
+
+Bash Version: 3.0
+Patch Level: 0
+Release Status: release
+
+Description:
+Bash doesn't use the current locale when formatting HISTTIMEFORMAT.
+
+Repeat-By:
+sykes:/tmp/bash/Build/:[0]$ locale
+LANG=de_DE.UTF-8
+LC_CTYPE="de_DE.UTF-8"
+LC_NUMERIC=POSIX
+LC_TIME=POSIX
+LC_COLLATE=POSIX
+LC_MONETARY="de_DE.UTF-8"
+LC_MESSAGES=en_US.UTF-8
+LC_PAPER="de_DE.UTF-8"
+LC_NAME="de_DE.UTF-8"
+LC_ADDRESS="de_DE.UTF-8"
+LC_TELEPHONE="de_DE.UTF-8"
+LC_MEASUREMENT="de_DE.UTF-8"
+LC_IDENTIFICATION="de_DE.UTF-8"
+LC_ALL=
+sykes:/tmp/bash/Build/:[0]$ history 1
+ 1502  history 1
+sykes:/tmp/bash/Build/:[0]$ HISTTIMEFORMAT=%c
+sykes:/tmp/bash/Build/:[0]$ history 1
+ 1504  Sun Aug  1 10:56:59 2004history 1
+sykes:/tmp/bash/Build/:[0]$ export LC_TIME=$LANG
+sykes:/tmp/bash/Build/:[0]$ history 1
+ 1506  Sun Aug  1 10:57:24 2004history 1
+
+--- bash-3.0/locale.c
++++ bash-3.0/locale.c
+@@ -71,9 +71,10 @@ set_default_locale ()
+   textdomain (PACKAGE);
+ }
+-/* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES and LC_NUMERIC
+-   if they are not specified in the environment, but LC_ALL is.  This
+-   should be called from main() after parsing the environment. */
++/* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES, LC_NUMERIC
++   and LC_TIME if they are not specified in the environment, but LC_ALL
++   is.  This should be called from main() after parsing the
++   environment. */
+ void
+ set_default_locale_vars ()
+ {
+@@ -109,6 +110,12 @@ set_default_locale_vars ()
+     setlocale (LC_NUMERIC, lc_all);
+ #  endif /* LC_NUMERIC */
++#  if defined (LC_TIME)
++  val = get_string_value ("LC_TIME");
++  if (val == 0 && lc_all && *lc_all)
++    setlocale (LC_TIME, lc_all);
++#  endif /* LC_TIME */
++
+ #endif /* HAVE_SETLOCALE */
+   val = get_string_value ("TEXTDOMAIN");
+@@ -213,6 +220,13 @@ set_locale_var (var, value)
+       return (setlocale (LC_NUMERIC, get_locale_var ("LC_NUMERIC")) != 0);
+ #  endif /* LC_NUMERIC */
+     }
++  else if (var[3] == 'T' && var[4] == 'I')    /* LC_TIME */
++    {
++#  if defined (LC_TIME)
++      if (lc_all == 0 || *lc_all == '\0')
++      return (setlocale (LC_TIME, get_locale_var ("LC_TIME")) != 0);
++#  endif /* LC_TIME */
++    }
+ #endif /* HAVE_SETLOCALE */
+   return (0);
+@@ -285,6 +299,9 @@ reset_locale_vars ()
+ #  if defined (LC_NUMERIC)
+   setlocale (LC_NUMERIC, get_locale_var ("LC_NUMERIC"));
+ #  endif
++#  if defined (LC_TIME)
++  setlocale (LC_TIME, get_locale_var ("LC_TIME"));
++#  endif
+   locale_setblanks ();  
+--- bash-3.0/variables.c
++++ bash-3.0/variables.c
+@@ -3646,6 +3646,7 @@ static struct name_and_function special_
+   { "LC_CTYPE", sv_locale },
+   { "LC_MESSAGES", sv_locale },
+   { "LC_NUMERIC", sv_locale },
++  { "LC_TIME", sv_locale },
+   { "MAIL", sv_mail },
+   { "MAILCHECK", sv_mail },
diff --git a/app-shells/bash/files/bash-3.0-manpage.patch b/app-shells/bash/files/bash-3.0-manpage.patch
new file mode 100644 (file)
index 0000000..08e3143
--- /dev/null
@@ -0,0 +1,15 @@
+Ripped from Fedora
+
+fix obvious display bug
+
+--- bash-3.0/doc/bash.1
++++ bash-3.0/doc/bash.1
+@@ -3929,7 +3929,7 @@
+ .B SIGHUP
+ to all jobs when an interactive login shell exits.
+ .PP
+-If \Bbash\fP is waiting for a command to complete and receives a signal
++If \fBbash\fP is waiting for a command to complete and receives a signal
+ for which a trap has been set, the trap will not be executed until
+ the command completes. 
+ When \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP
diff --git a/app-shells/bash/files/bash-3.0-multibyteifs.patch b/app-shells/bash/files/bash-3.0-multibyteifs.patch
new file mode 100644 (file)
index 0000000..1e74832
--- /dev/null
@@ -0,0 +1,281 @@
+From: Tim Waugh <twaugh@redhat.com>
+To: bug-bash@gnu.org
+Subject: [patch] multibyte IFS values
+Date: Tue, 24 Aug 2004 13:34:59 +0100
+
+Hi,
+
+Here is a patch to address these problems:
+
+http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00294.html
+http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00296.html
+
+It works well for me at least.
+
+Tim.
+
+--- bash-3.0/subst.c.multibyteifs      2004-08-20 15:22:48.366497771 +0100
++++ bash-3.0/subst.c   2004-08-20 18:13:30.833624616 +0100
+@@ -124,7 +124,12 @@
+ SHELL_VAR *ifs_var;
+ char *ifs_value;
+ unsigned char ifs_cmap[UCHAR_MAX + 1];
++#if defined (HANDLE_MULTIBYTE)
++unsigned char ifs_firstc[MB_LEN_MAX];
++size_t ifs_firstc_len;
++#else
+ unsigned char ifs_firstc;
++#endif
+ /* Extern functions and variables from different files. */
+ extern int last_command_exit_value, last_command_exit_signal;
+@@ -862,8 +867,14 @@
+      char *charlist;
+ {
+   register int i = *sindex;
++  size_t slen;
++#if defined (HANDLE_MULTIBYTE)
++  size_t clen;
++  wchar_t *wcharlist = NULL;
++#endif
+   int c;
+   char *temp;
++  DECLARE_MBSTATE;
+   if (charlist[0] == '\'' && charlist[1] == '\0')
+     {
+@@ -872,18 +883,65 @@
+       return temp;
+     }
+-  for (i = *sindex; c = string[i]; i++)
++  slen = strlen (string + *sindex) + *sindex;
++  i = *sindex;
++#if defined (HANDLE_MULTIBYTE)
++  clen = strlen (charlist);
++#endif
++  while ((c = string[i]))
+     {
++#if defined (HANDLE_MULTIBYTE)
++      size_t mblength;
++#endif
++
+       if (c == CTLESC)
+       {
+-        i++;
++        i += 2;
+         continue;
+       }
++#if defined (HANDLE_MULTIBYTE)
++      mblength = mblen (string + i, slen - i);
++      if (mblength > 1)
++      {
++        wchar_t wc;
++        size_t mblength = mbtowc (&wc, string + i, slen - i);
++        if (MB_INVALIDCH (mblength))
++          {
++            if (MEMBER (c, charlist))
++              break;
++          }
++        else
++          {
++            if (!wcharlist)
++              {
++                size_t len = mbstowcs (wcharlist, charlist, 0);
++                if (len == -1)
++                  len = 0;
++                wcharlist = xmalloc (sizeof (wchar_t) * (len + 1));
++                mbstowcs (wcharlist, charlist, 1 + len);
++              }
++
++            if (wcschr (wcharlist, wc))
++              {
++                break;
++              }
++          }
++      }
++      else
++#endif
++
+       if (MEMBER (c, charlist))
+       break;
++
++      ADVANCE_CHAR (string, slen, i);
+     }
++#if defined (HANDLE_MULTIBYTE)
++  if (wcharlist)
++    free (wcharlist);
++#endif
++
+   temp = substring (string, *sindex, i);
+   *sindex = i;
+@@ -1456,11 +1514,36 @@
+   d2 = 0;
+   if (delims)
+     {
+-      d2 = (char *)xmalloc (strlen (delims) + 1);
+-      for (i = ts = 0; delims[i]; i++)
++      size_t slength = strlen (delims);
++#if defined (HANDLE_MULTIBYTE)
++      size_t mblength = 1;
++      DECLARE_MBSTATE;
++#endif
++
++      d2 = (char *)xmalloc (slength + 1);
++      i = ts = 0;
++      while (delims[i])
+       {
++#if defined (HANDLE_MULTIBYTE)
++        mbstate_t state_bak = state;
++        mblength = mbrlen (delims + i, slength, &state);
++
++        if (MB_INVALIDCH (mblength))
++          state = state_bak;
++        else if (mblength != 1)
++          {
++            memcpy (d2 + ts, delims + i, mblength);
++            ts += mblength;
++            i += mblength;
++            slength -= mblength;
++            continue;
++          }
++#endif
++
+         if (whitespace(delims[i]) == 0)
+           d2[ts++] = delims[i];
++        i++;
++        slength--;
+       }
+       d2[ts] = '\0';
+     }
+@@ -1654,10 +1737,19 @@
+ string_list_dollar_star (list)
+      WORD_LIST *list;
+ {
++#if defined (HANDLE_MULTIBYTE)
++  char sep[MB_CUR_MAX + 1];
++#else
+   char sep[2];
++#endif
++#if defined (HANDLE_MULTIBYTE)
++  memcpy (sep, ifs_firstc, ifs_firstc_len);
++  sep[ifs_firstc_len] = '\0';
++#else
+   sep[0] = ifs_firstc;
+   sep[1] = '\0';
++#endif
+   return (string_list_internal (list, sep));
+ }
+@@ -1676,14 +1768,41 @@
+      WORD_LIST *list;
+      int quoted;
+ {
+-  char *ifs, sep[2];
++  char *ifs;
++#if defined (HANDLE_MULTIBYTE)
++  char sep[MB_CUR_MAX + 1];
++#else
++  char sep[2];
++#endif
+   WORD_LIST *tlist;
+   /* XXX this could just be ifs = ifs_value; */
+   ifs = ifs_var ? value_cell (ifs_var) : (char *)0;
++#if defined (HANDLE_MULTIBYTE)
++  if (ifs && *ifs)
++    {
++      size_t mblength = mblen (ifs, strnlen (ifs, MB_CUR_MAX));
++      if (MB_INVALIDCH (mblength))
++      {
++        sep[0] = *ifs;
++        sep[1] = '\0';
++      }
++      else
++      {
++        memcpy (sep, ifs, mblength);
++        sep[mblength] = '\0';
++      }
++    }
++  else
++    {
++      sep[0] = ' ';
++      sep[1] = '\0';
++    }
++#else
+   sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs;
+   sep[1] = '\0';
++#endif
+   tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0))
+               ? quote_list (list)
+@@ -1732,6 +1851,7 @@
+   WORD_DESC *t;
+   char *current_word, *s;
+   int sindex, sh_style_split, whitesep;
++  size_t slen = 0;
+   if (!string || !*string)
+     return ((WORD_LIST *)NULL);
+@@ -1805,7 +1925,12 @@
+       /* Move past the current separator character. */
+       if (string[sindex])
+-      sindex++;
++      {
++        DECLARE_MBSTATE;
++        if (!slen)
++          slen = strlen (string);
++        ADVANCE_CHAR (string, slen, sindex);
++      }
+       /* Now skip sequences of space, tab, or newline characters if they are
+        in the list of separators. */
+@@ -6796,7 +6921,27 @@
+       ifs_cmap[uc] = 1;
+     }
++#if defined (HANDLE_MULTIBYTE)
++  if (!ifs_value)
++    {
++      ifs_firstc[0] = '\0';
++      ifs_firstc_len = 1;
++    }
++  else
++    {
++      size_t ifs_len = strnlen (ifs_value, MB_CUR_MAX);
++      ifs_firstc_len = mblen (ifs_value, ifs_len);
++      if (MB_INVALIDCH (ifs_firstc_len))
++        {
++          ifs_firstc[0] = '\0';
++          ifs_firstc_len = 1;
++        }
++      else
++        memcpy (ifs_firstc, ifs_value, ifs_firstc_len);
++    }
++#else
+   ifs_firstc = ifs_value ? *ifs_value : 0;
++#endif
+ }
+ char *
+--- bash-3.0/subst.h.multibyteifs      2004-08-20 15:51:08.301074583 +0100
++++ bash-3.0/subst.h   2004-08-20 15:51:39.070206473 +0100
+@@ -231,7 +231,12 @@
+ extern SHELL_VAR *ifs_var;
+ extern char *ifs_value;
+ extern unsigned char ifs_cmap[];
++#if defined (HANDLE_MULTIBYTE)
++extern unsigned char ifs_firstc[];
++extern size_t ifs_firstc_len;
++#else
+ extern unsigned char ifs_firstc;
++#endif
+ /* Evaluates to 1 if C is a character in $IFS. */
+ #define isifs(c)      (ifs_cmap[(unsigned char)(c)] != 0)
diff --git a/app-shells/bash/files/bash-3.0-pwd.patch b/app-shells/bash/files/bash-3.0-pwd.patch
new file mode 100644 (file)
index 0000000..77f0918
--- /dev/null
@@ -0,0 +1,16 @@
+Ripped from Fedora
+
+* Tue Mar 15 2005 Tim Waugh <twaugh@redhat.com> 3.0-30
+- Fix PS1 expansion crash when PWD is unset (bg #151116).
+
+--- bash-3.0/parse.y.pwd       2005-03-15 14:22:36.000000000 +0000
++++ bash-3.0/parse.y   2005-03-15 14:22:37.000000000 +0000
+@@ -4103,7 +4103,7 @@
+ #define ROOT_PATH(x)  ((x)[0] == '/' && (x)[1] == 0)
+ #define DOUBLE_SLASH_ROOT(x)  ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
+               /* Abbreviate \W as ~ if $PWD == $HOME */
+-              if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, temp) == 0))
++              if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, t_string) == 0))
+                 {
+                   if (ROOT_PATH (t_string) == 0 && DOUBLE_SLASH_ROOT (t_string) == 0)
+                     {
diff --git a/app-shells/bash/files/bash-3.0-subshell.patch b/app-shells/bash/files/bash-3.0-subshell.patch
new file mode 100644 (file)
index 0000000..a1d7dfe
--- /dev/null
@@ -0,0 +1,39 @@
+Ripped from Fedora which took this from upstream
+
+* Tue Nov 22 2005 Tim Waugh <twaugh@redhat.com>  3.0-37
+- Applied patch from upstream to fix parsing problem (bug #146638).
+
+http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=146638
+
+--- bash-3.0/parse.y.subshell  2005-11-22 13:19:11.000000000 +0000
++++ bash-3.0/parse.y   2005-11-22 13:19:24.000000000 +0000
+@@ -2055,14 +2055,6 @@
+   if (uc)
+     shell_input_line_index++;
+-  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
+-    {
+-      if (SHOULD_PROMPT ())
+-        prompt_again ();
+-      line_number++;
+-      goto restart_read;
+-    }
+-
+ #if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+   /* If UC is NULL, we have reached the end of the current input string.  If
+      pushed_string_list is non-empty, it's time to pop to the previous string
+@@ -2078,6 +2070,14 @@
+     }
+ #endif /* ALIAS || DPAREN_ARITHMETIC */
++  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
++    {
++      if (SHOULD_PROMPT ())
++        prompt_again ();
++      line_number++;
++      goto restart_read;
++    }
++
+   if (!uc && shell_input_line_terminator == EOF)
+     return ((shell_input_line_index != 0) ? '\n' : EOF);
diff --git a/app-shells/bash/files/bash-3.0-ulimit.patch b/app-shells/bash/files/bash-3.0-ulimit.patch
new file mode 100644 (file)
index 0000000..8202b95
--- /dev/null
@@ -0,0 +1,186 @@
+Ripped from Fedora
+
+--- bash-3.0/builtins/ulimit.def
++++ bash-3.0/builtins/ulimit.def
+@@ -34,15 +34,20 @@
+     -a        all current limits are reported
+     -c        the maximum size of core files created
+     -d        the maximum size of a process's data segment
++    -e        the maximum scheduling priority (`nice')
+     -f        the maximum size of files created by the shell
++    -i        the maximum number of pending signals
+     -l        the maximum size a process may lock into memory
+     -m        the maximum resident set size
+     -n        the maximum number of open file descriptors
+     -p        the pipe buffer size
++    -q        the maximum number of bytes in POSIX message queues
++    -r        the maximum rt priority
+     -s        the maximum stack size
+     -t        the maximum amount of cpu time in seconds
+     -u        the maximum number of user processes
+     -v        the size of virtual memory 
++    -x        the maximum number of file locks
+ If LIMIT is given, it is the new value of the specified resource;
+ the special LIMIT values `soft', `hard', and `unlimited' stand for
+@@ -199,7 +204,13 @@
+ #ifdef RLIMIT_DATA
+   { 'd',      RLIMIT_DATA,  1024,     "data seg size",        "kbytes" },
+ #endif
++#ifdef RLIMIT_NICE
++  { 'e',      RLIMIT_NICE, 1,         "max nice",             (char *)NULL},
++#endif /* RLIMIT_NICE */
+   { 'f',      RLIMIT_FILESIZE, 1024,  "file size",            "blocks" },
++#ifdef RLIMIT_SIGPENDING
++  { 'i',      RLIMIT_SIGPENDING, 1,   "pending signals",      (char *)NULL},
++#endif
+ #ifdef RLIMIT_MEMLOCK
+   { 'l',      RLIMIT_MEMLOCK, 1024,   "max locked memory",    "kbytes" },
+ #endif
+@@ -208,6 +219,12 @@
+ #endif /* RLIMIT_RSS */
+   { 'n',      RLIMIT_OPENFILES, 1,    "open files",           (char *)NULL},
+   { 'p',      RLIMIT_PIPESIZE, 512,   "pipe size",            "512 bytes" },
++#ifdef RLIMIT_MSGQUEUE
++  { 'q',      RLIMIT_MSGQUEUE, 1,     "POSIX message queues", "bytes" },
++#endif
++#ifdef RLIMIT_RTPRIO
++  { 'r',      RLIMIT_RTPRIO, 1,       "max rt priority",      (char *)NULL},
++#endif /* RLIMIT_RTPRIO */
+ #ifdef RLIMIT_STACK
+   { 's',      RLIMIT_STACK, 1024,     "stack size",           "kbytes" },
+ #endif
+@@ -221,6 +238,9 @@
+ #ifdef RLIMIT_SWAP
+   { 'w',      RLIMIT_SWAP,    1024,   "swap size",            "kbytes" },
+ #endif
++#ifdef RLIMIT_LOCKS
++  { 'x',      RLIMIT_LOCKS, 1,        "file locks",           (char *)NULL},
++#endif
+   { -1, -1, -1, (char *)NULL, (char *)NULL }
+ };
+ #define NCMDS (sizeof(limits) / sizeof(limits[0]))
+@@ -647,11 +667,11 @@
+   for (i = 0; limits[i].option > 0; i++)
+     {
+-      if (get_limit (i, &softlim, &hardlim) < 0)
++      if (get_limit (i, &softlim, &hardlim) == 0)
++      printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
++      else if (errno != EINVAL)
+       builtin_error ("%s: cannot get limit: %s", limits[i].description,
+                                                  strerror (errno));
+-      else
+-      printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
+     }
+ }
+@@ -670,7 +690,7 @@
+       else
+         sprintf (unitstr, "(-%c) ", limits[limind].option);
+-      printf ("%-18s %16s", limits[limind].description, unitstr);
++      printf ("%-20s %16s", limits[limind].description, unitstr);
+     }
+   if (curlim == RLIM_INFINITY)
+     puts ("unlimited");
+--- bash-3.0/doc/bashref.texi
++++ bash-3.0/doc/bashref.texi
+@@ -3793,7 +3793,7 @@
+ @item ulimit
+ @btindex ulimit
+ @example
+-ulimit [-acdflmnpstuvSH] [@var{limit}]
++ulimit [-acdeflmnpqrstuvxSH] [@var{limit}]
+ @end example
+ @code{ulimit} provides control over the resources available to processes
+ started by the shell, on systems that allow such control.  If an
+@@ -3814,9 +3814,15 @@
+ @item -d
+ The maximum size of a process's data segment.
++@item -e
++The maximum scheduling priority.
++
+ @item -f
+ The maximum size of files created by the shell.
++@item -i
++The maximum number of pending signals.
++
+ @item -l
+ The maximum size that may be locked into memory.
+@@ -3829,6 +3835,12 @@
+ @item -p
+ The pipe buffer size.
++@item -q
++The maximum number of bytes in POSIX message queues.
++
++@item -r
++The maximum RT priority.
++
+ @item -s
+ The maximum stack size.
+@@ -3841,6 +3853,9 @@
+ @item -v
+ The maximum amount of virtual memory available to the process.
++@item -x
++The maximum amount of file locks.
++
+ @end table
+ If @var{limit} is given, it is the new value of the specified resource;
+--- bash-3.0/doc/bash.1
++++ bash-3.0/doc/bash.1
+@@ -8362,7 +8362,7 @@
+ returns true if any of the arguments are found, false if
+ none are found.
+ .TP
+-\fBulimit\fP [\fB\-SHacdflmnpstuv\fP [\fIlimit\fP]]
++\fBulimit\fP [\fB\-SHacdefilmnpqrstuvx\fP [\fIlimit\fP]]
+ Provides control over the resources available to the shell and to
+ processes started by it, on systems that allow such control.
+ The \fB\-H\fP and \fB\-S\fP options specify that the hard or soft limit is
+@@ -8398,9 +8398,15 @@
+ .B \-d
+ The maximum size of a process's data segment
+ .TP
++.B \-e
++The maximum scheduling priority (`nice')
++.TP
+ .B \-f
+ The maximum size of files created by the shell
+ .TP
++.B \-i
++The maximum number of pending signals
++.TP
+ .B \-l
+ The maximum size that may be locked into memory
+ .TP
+@@ -8414,6 +8420,12 @@
+ .B \-p
+ The pipe size in 512-byte blocks (this may not be set)
+ .TP
++.B \-q
++The maximum number of bytes in POSIX message queues
++.TP
++.B \-r
++The maximum rt priority
++.TP
+ .B \-s
+ The maximum stack size
+ .TP
+@@ -8425,6 +8437,9 @@
+ .TP
+ .B \-v
+ The maximum amount of virtual memory available to the shell
++.TP
++.B \-x
++The maximum number of file locks
+ .PD
+ .PP
+ If
diff --git a/app-shells/bash/files/bash-3.0-volatile-command.patch b/app-shells/bash/files/bash-3.0-volatile-command.patch
new file mode 100644 (file)
index 0000000..8b89b35
--- /dev/null
@@ -0,0 +1,16 @@
+Ripped from Debian
+
+# DP: current_command must be declared volatile to prevent assignments from
+#     being optimized away as dead code.  In reality, the use of setjmp/longjmp
+#     makes it not dead code at all.
+
+--- eval.old   2003-12-18 23:44:15.000000000 -0500
++++ eval.c     2005-10-03 01:59:31.000000000 -0400
+@@ -63,7 +63,7 @@
+ reader_loop ()
+ {
+   int our_indirection_level;
+-  COMMAND *current_command = (COMMAND *)NULL;
++  COMMAND * volatile current_command = (COMMAND *)NULL;
+   USE_VAR(current_command);