]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20080207 snapshot
authorChet Ramey <chet.ramey@case.edu>
Wed, 7 Dec 2011 14:18:38 +0000 (09:18 -0500)
committerChet Ramey <chet.ramey@case.edu>
Wed, 7 Dec 2011 14:18:38 +0000 (09:18 -0500)
94 files changed:
CWRU/CWRU.chlog
CWRU/CWRU.chlog~
MANIFEST
MANIFEST~
Makefile.in
Makefile.in~
builtins/alias.def
builtins/alias.def~ [new file with mode: 0644]
builtins/bind.def
builtins/bind.def~
builtins/break.def
builtins/break.def~
builtins/builtin.def
builtins/builtin.def~
builtins/caller.def
builtins/caller.def~
builtins/cd.def
builtins/cd.def~
builtins/colon.def
builtins/colon.def~ [new file with mode: 0644]
builtins/command.def
builtins/command.def~ [new file with mode: 0644]
builtins/complete.def
builtins/complete.def~
builtins/declare.def
builtins/declare.def~
builtins/echo.def
builtins/echo.def~ [new file with mode: 0644]
builtins/enable.def
builtins/enable.def~
builtins/eval.def
builtins/eval.def~ [new file with mode: 0644]
builtins/exec.def
builtins/exec.def~
builtins/exit.def
builtins/exit.def~
builtins/fc.def
builtins/fc.def~
builtins/fg_bg.def
builtins/fg_bg.def~
builtins/hash.def
builtins/hash.def~
builtins/help.def
builtins/help.def~
builtins/history.def
builtins/history.def~
builtins/jobs.def
builtins/jobs.def~
builtins/kill.def
builtins/kill.def~ [new file with mode: 0644]
builtins/let.def
builtins/let.def~ [new file with mode: 0644]
builtins/printf.def
builtins/printf.def~
builtins/pushd.def
builtins/pushd.def~
builtins/read.def
builtins/read.def~
builtins/reserved.def
builtins/reserved.def~
builtins/return.def
builtins/return.def~ [new file with mode: 0644]
builtins/set.def
builtins/set.def~
builtins/setattr.def
builtins/setattr.def~
builtins/shift.def
builtins/shift.def~ [new file with mode: 0644]
builtins/shopt.def
builtins/shopt.def~
builtins/source.def
builtins/source.def~ [new file with mode: 0644]
builtins/suspend.def
builtins/suspend.def~ [new file with mode: 0644]
builtins/test.def
builtins/test.def~
builtins/times.def
builtins/times.def~
builtins/trap.def
builtins/trap.def~
builtins/type.def
builtins/type.def~
builtins/ulimit.def
builtins/ulimit.def~
builtins/umask.def
builtins/umask.def~ [new file with mode: 0644]
builtins/wait.def
builtins/wait.def~
doc/bash.pdf
doc/bashref.texi
doc/bashref.texi~
lib/sh/Makefile.in
lib/sh/Makefile.in~
lib/sh/zgetline.c [new file with mode: 0644]

index a60b5cf07279fddfbfbd0f843904896204b4451b..48970448055bc10513b3f35f2115b16c0008a5a5 100644 (file)
@@ -12977,7 +12977,7 @@ builtins/declare.def
        - when not in posix mode, and operating on shell functions, typeset
          and declare do not require their variable operands to be valid
          shell identifiers.  The other `attribute' builtins work this way.
-         Fixes inconsistency reported by Mike Frysinger
+         Fixes inconsistency reported by Mike Frysinger <vapier@gentoo.org>
 
 {configure,config.h}.in
        - add test for setregid, define HAVE_SETREGID and HAVE_DECL_SETREGID
@@ -15265,3 +15265,9 @@ general.c
        - change posix_initialize to turn off source/. searching $PWD when
          the file sourced is not found in $PATH.  Fixes bug reported by
          Paolo Bonzini <bonzini@gnu.org> and Eric Blake <ebb9@byu.net>
+
+                                   2/9
+                                   ---
+builtins/*.def
+       - changes to text and formatting suggested by Jan Schampera
+         <jan.schampera@web.de>
index 41aab0a14b676825735eef8ea4346513096ab35e..b19b8a569b987c123ee986bbe98b401199ceb4d9 100644 (file)
@@ -12977,7 +12977,7 @@ builtins/declare.def
        - when not in posix mode, and operating on shell functions, typeset
          and declare do not require their variable operands to be valid
          shell identifiers.  The other `attribute' builtins work this way.
-         Fixes inconsistency reported by Mike Frysinger
+         Fixes inconsistency reported by Mike Frysinger <vapier@gentoo.org>
 
 {configure,config.h}.in
        - add test for setregid, define HAVE_SETREGID and HAVE_DECL_SETREGID
@@ -15258,3 +15258,15 @@ builtins/fc.def
 lib/readline/complete.c
        - fix fnwidth to use string[pos] instead of *string when testing the
          current character for a control character or rubout
+
+                                   2/2
+                                   ---
+general.c
+       - change posix_initialize to turn off source/. searching $PWD when
+         the file sourced is not found in $PATH.  Fixes bug reported by
+         Paolo Bonzini <bonzini@gnu.org> and Eric Blake <ebb9@byu.net>
+
+                                   2/9
+                                   ---
+builtins/*.def
+       - changes to text and formatting suggested by Jan Schampera
index 1e37178dfe7017436a05d9985a590342a214fb98..5702b74cc587fa3f349c6b3ea26f19f930c7500c 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -426,6 +426,7 @@ lib/sh/wcsdup.c             f
 lib/sh/winsize.c       f
 lib/sh/xstrchr.c       f
 lib/sh/zcatfd.c                f
+lib/sh/zgetline.c      f
 lib/sh/zmapfd.c                f
 lib/sh/zread.c         f
 lib/sh/zwrite.c                f
index ce98d7e4fff53d879bd87ca510411c96e41a127a..1e37178dfe7017436a05d9985a590342a214fb98 100644 (file)
--- a/MANIFEST~
+++ b/MANIFEST~
@@ -10,7 +10,6 @@ builtins      d
 cross-build    d
 doc    d
 examples       d
-examples/bashdb        d
 examples/obashdb       d
 examples/complete      d
 examples/functions d
@@ -381,6 +380,7 @@ lib/sh/eaccess.c    f
 lib/sh/fmtullong.c     f
 lib/sh/fmtulong.c      f
 lib/sh/fmtumax.c       f
+lib/sh/fpurge.c                f
 lib/sh/getcwd.c                f
 lib/sh/getenv.c                f
 lib/sh/inet_aton.c     f
@@ -469,8 +469,12 @@ po/en@quot.po              f
 po/en@boldquot.po      f
 po/en@quot.gmo         f
 po/en@boldquot.gmo     f
+po/bg.po               f
+po/bg.gmo              f
 po/ru.po               f
 po/ru.gmo              f
+po/sk.po               f
+po/sk.gmo              f
 po/sv.po               f
 po/sv.gmo              f
 po/insert-header.sin   f
@@ -535,15 +539,10 @@ support/shobj-conf        f       755
 support/rlvers.sh      f       755
 examples/INDEX.txt     f
 examples/INDEX.html    f
-examples/bashdb/PERMISSION     f
-examples/bashdb/README f
-examples/bashdb/bashdb         f
-examples/bashdb/bashdb.el      f
 examples/obashdb/PERMISSION    f
 examples/obashdb/README        f
-examples/obashdb/bashdb        f
-examples/obashdb/bashdb.fns    f
-examples/obashdb/bashdb.pre    f
+examples/obashdb/bashdb                f
+examples/obashdb/bashdb.el     f
 examples/complete/complete-examples    f
 examples/complete/complete.ianmac      f
 examples/complete/complete2.ianmac     f
@@ -751,6 +750,7 @@ tests/exec4.sub             f
 tests/exec5.sub                f
 tests/exec6.sub                f
 tests/exec7.sub                f
+tests/exec8.sub                f
 tests/exp.tests                f
 tests/exp.right                f
 tests/exp1.sub         f
@@ -796,6 +796,7 @@ tests/input-line.sh f
 tests/input-line.sub   f
 tests/input.right      f
 tests/intl.tests       f
+tests/intl1.sub                f
 tests/intl.right       f
 tests/iquote.tests     f
 tests/iquote.right     f
index 6a230470cd612612a3877e144bec89e32bc1070e..8779b122bac8c091d8b40603f7a611b7d2931ba7 100644 (file)
@@ -210,7 +210,8 @@ SHLIB_SOURCE =      ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \
                ${SH_LIBSRC}/zcatfd.c ${SH_LIBSRC}/shmatch.c \
                ${SH_LIBSRC}/strnlen.c ${SH_LIBSRC}/winsize.c \
                ${SH_LIBSRC}/eaccess.c ${SH_LIBSRC}/wcsdup.c \
-               ${SH_LIBSRC}/zmapfd.c ${SH_LIBSRC}/fpurge.c
+               ${SH_LIBSRC}/zmapfd.c ${SH_LIBSRC}/fpurge.c \
+               ${SH_LIBSRC}/zgetline.c
 
 SHLIB_LIB = -lsh
 SHLIB_LIBNAME = libsh.a
index a90fb00f0a8d2fec1745010552bf18f2e703c4f8..6a230470cd612612a3877e144bec89e32bc1070e 100644 (file)
@@ -210,7 +210,7 @@ SHLIB_SOURCE =      ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \
                ${SH_LIBSRC}/zcatfd.c ${SH_LIBSRC}/shmatch.c \
                ${SH_LIBSRC}/strnlen.c ${SH_LIBSRC}/winsize.c \
                ${SH_LIBSRC}/eaccess.c ${SH_LIBSRC}/wcsdup.c \
-               ${SH_LIBSRC}/zmapfd.c
+               ${SH_LIBSRC}/zmapfd.c ${SH_LIBSRC}/fpurge.c
 
 SHLIB_LIB = -lsh
 SHLIB_LIBNAME = libsh.a
@@ -1055,6 +1055,7 @@ jobs.o: ${BASHINCDIR}/posixtime.h
 nojobs.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h bashjmp.h ${BASHINCDIR}/posixjmp.h
 nojobs.o: command.h ${BASHINCDIR}/stdc.h general.h xmalloc.h jobs.h quit.h siglist.h externs.h
 nojobs.o: sig.h error.h ${BASHINCDIR}/shtty.h input.h
+nojobs.o: $(DEFDIR)/builtext.h
 
 # shell features that may be compiled in
 
index db13869e8715be99a638bd8357039c17b04f0bf2..7ed416d0cb140845aff6ced241a78bc2f6b800a2 100644 (file)
@@ -1,7 +1,7 @@
 This file is alias.def, from which is created alias.c
 It implements the builtins "alias" and "unalias" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,12 +24,18 @@ $FUNCTION alias_builtin
 $DEPENDS_ON ALIAS
 $PRODUCES alias.c
 $SHORT_DOC alias [-p] [name[=value] ... ]
-`alias' with no arguments or with the -p option prints the list
-of aliases in the form alias NAME=VALUE on standard output.
+Without arguments, `alias' prints the list of aliases in the reusable
+form `alias NAME=VALUE' on standard output.
+
 Otherwise, an alias is defined for each NAME whose VALUE is given.
 A trailing space in VALUE causes the next word to be checked for
-alias substitution when the alias is expanded.  Alias returns
-true unless a NAME is given for which no alias has been defined.
+alias substitution when the alias is expanded.
+
+Options:
+  -p   Print all defined aliases in a reusable format
+
+Alias returns true unless a NAME is supplied for which no alias has been
+defined.
 $END
 
 #include <config.h>
@@ -149,8 +155,12 @@ $BUILTIN unalias
 $FUNCTION unalias_builtin
 $DEPENDS_ON ALIAS
 $SHORT_DOC unalias [-a] name [name ...]
-Remove NAMEs from the list of defined aliases.  If the -a option is given,
-then remove all alias definitions.
+Remove each NAME from the list of defined aliases.
+
+Options:
+  -a   remove all alias definitions.
+
+Return success unless a NAME is not an existing alias.
 $END
 
 #if defined (ALIAS)
diff --git a/builtins/alias.def~ b/builtins/alias.def~
new file mode 100644 (file)
index 0000000..0399160
--- /dev/null
@@ -0,0 +1,240 @@
+This file is alias.def, from which is created alias.c
+It implements the builtins "alias" and "unalias" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$BUILTIN alias
+$FUNCTION alias_builtin
+$DEPENDS_ON ALIAS
+$PRODUCES alias.c
+$SHORT_DOC alias [-p] [name[=value] ... ]
+Without arguments, `alias' prints the list of aliases in the reusable
+form `alias NAME=VALUE' on standard output.
+
+Otherwise, an alias is defined for each NAME whose VALUE is given.
+A trailing space in VALUE causes the next word to be checked for
+alias substitution when the alias is expanded.
+
+Options:
+  -p   Print all defined aliases in a reusable format
+
+Alias returns true unless a NAME is supplied for which no alias has been
+defined.
+$END
+
+#include <config.h>
+
+#if defined (ALIAS)
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#  include "../bashansi.h"
+#  include "../bashintl.h"
+
+#  include <stdio.h>
+#  include "../shell.h"
+#  include "../alias.h"
+#  include "common.h"
+#  include "bashgetopt.h"
+
+/* Flags for print_alias */
+#define AL_REUSABLE    0x01
+
+static void print_alias __P((alias_t *, int));
+
+extern int posixly_correct;
+
+/* Hack the alias command in a Korn shell way. */
+int
+alias_builtin (list)
+     WORD_LIST *list;
+{
+  int any_failed, offset, pflag, dflags;
+  alias_t **alias_list, *t;
+  char *name, *value;
+
+  dflags = posixly_correct ? 0 : AL_REUSABLE;
+  pflag = 0;
+  reset_internal_getopt ();
+  while ((offset = internal_getopt (list, "p")) != -1)
+    {
+      switch (offset)
+       {
+       case 'p':
+         pflag = 1;
+         dflags |= AL_REUSABLE;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+
+  list = loptend;
+
+  if (list == 0 || pflag)
+    {
+      if (aliases == 0)
+       return (EXECUTION_SUCCESS);
+
+      alias_list = all_aliases ();
+
+      if (alias_list == 0)
+       return (EXECUTION_SUCCESS);
+
+      for (offset = 0; alias_list[offset]; offset++)
+       print_alias (alias_list[offset], dflags);
+
+      free (alias_list);       /* XXX - Do not free the strings. */
+
+      if (list == 0)
+       return (sh_chkwrite (EXECUTION_SUCCESS));
+    }
+
+  any_failed = 0;
+  while (list)
+    {
+      name = list->word->word;
+
+      for (offset = 0; name[offset] && name[offset] != '='; offset++)
+       ;
+
+      if (offset && name[offset] == '=')
+       {
+         name[offset] = '\0';
+         value = name + offset + 1;
+
+         if (legal_alias_name (name, 0) == 0)
+           {
+             builtin_error (_("`%s': invalid alias name"), name);
+             any_failed++;
+           }
+         else
+           add_alias (name, value);
+       }
+      else
+       {
+         t = find_alias (name);
+         if (t)
+           print_alias (t, dflags);
+         else
+           {
+             sh_notfound (name);
+             any_failed++;
+           }
+       }
+      list = list->next;
+    }
+
+  return (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+#endif /* ALIAS */
+
+$BUILTIN unalias
+$FUNCTION unalias_builtin
+$DEPENDS_ON ALIAS
+$SHORT_DOC unalias [-a] name [name ...]
+Remove each NAME from the list of defined aliases.
+
+Options:
+
+  -a   remove all alias definitions.
+
+Return success unless a NAME is not an existing alias.
+$END
+
+#if defined (ALIAS)
+/* Remove aliases named in LIST from the aliases database. */
+int
+unalias_builtin (list)
+     register WORD_LIST *list;
+{
+  register alias_t *alias;
+  int opt, aflag;
+
+  aflag = 0;
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "a")) != -1)
+    {
+      switch (opt)
+       {
+       case 'a':
+         aflag = 1;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+
+  list = loptend;
+
+  if (aflag)
+    {
+      delete_all_aliases ();
+      return (EXECUTION_SUCCESS);
+    }
+
+  if (list == 0)
+    {
+      builtin_usage ();
+      return (EX_USAGE);
+    }
+
+  aflag = 0;
+  while (list)
+    {
+      alias = find_alias (list->word->word);
+
+      if (alias)
+       remove_alias (alias->name);
+      else
+       {
+         sh_notfound (list->word->word);
+         aflag++;
+       }
+
+      list = list->next;
+    }
+
+  return (aflag ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+
+/* Output ALIAS in such a way as to allow it to be read back in. */
+static void
+print_alias (alias, flags)
+     alias_t *alias;
+     int flags;
+{
+  char *value;
+
+  value = sh_single_quote (alias->value);
+  if (flags & AL_REUSABLE)
+    printf ("alias ");
+  printf ("%s=%s\n", alias->name, value);
+  free (value);
+
+  fflush (stdout);
+}
+#endif /* ALIAS */
index 0cbab504cd6caa5dfe78063b5a4f922fc7db23fa..7a4baa8e832aefd0c7faf019f961cf8fedf10bda 100644 (file)
@@ -1,7 +1,7 @@
 This file is bind.def, from which is created bind.c.
 It implements the builtin "bind" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -27,11 +27,12 @@ $BUILTIN bind
 $DEPENDS_ON READLINE
 $FUNCTION bind_builtin
 $SHORT_DOC bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]
-Bind a key sequence to a Readline function or a macro, or set
-a Readline variable.  The non-option argument syntax is equivalent
-to that found in ~/.inputrc, but must be passed as a single argument:  e.g.,
+Bind a key sequence to a Readline function or a macro, or set a Readline
+variable.  The non-option argument syntax is equivalent to that found in
+~/.inputrc, but must be passed as a single argument:  e.g.,
 bind '"\C-x\C-r": re-read-init-file'.
-bind accepts the following options:
+
+Options:
   -m  keymap         Use KEYMAP as the keymap for the duration of this
                      command.  Acceptable keymap names are emacs,
                      emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,
index c66ef47d0ab6d2d7ceb4a53539f649a3b03e449a..0cbab504cd6caa5dfe78063b5a4f922fc7db23fa 100644 (file)
@@ -29,7 +29,7 @@ $FUNCTION bind_builtin
 $SHORT_DOC bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]
 Bind a key sequence to a Readline function or a macro, or set
 a Readline variable.  The non-option argument syntax is equivalent
-to that found in ~/.inputrc, but must be passed as a single argument:
+to that found in ~/.inputrc, but must be passed as a single argument:  e.g.,
 bind '"\C-x\C-r": re-read-init-file'.
 bind accepts the following options:
   -m  keymap         Use KEYMAP as the keymap for the duration of this
@@ -266,7 +266,7 @@ bind_builtin (list)
 
   run_unwind_frame ("bind_builtin");
 
-  return (return_code);
+  return (sh_chkwrite (return_code));
 }
 
 static int
index 7d7ebe95b1e1522e05907822fad5b1f58e3d552e..1df6cd3dfaa6f6834fc9788759ff526e52a56638 100644 (file)
@@ -1,7 +1,7 @@
 This file is break.def, from which is created break.c.
 It implements the builtins "break" and "continue" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,8 +24,8 @@ $PRODUCES break.c
 $BUILTIN break
 $FUNCTION break_builtin
 $SHORT_DOC break [n]
-Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,
-break N levels.
+Exit a FOR, WHILE or UNTIL loop.  If N is specified, break N enclosing
+loops.
 $END
 #include <config.h>
 
@@ -86,8 +86,8 @@ break_builtin (list)
 $BUILTIN continue
 $FUNCTION continue_builtin
 $SHORT_DOC continue [n]
-Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.
-If N is specified, resume at the N-th enclosing loop.
+Resumes the next iteration of the enclosing FOR, WHILE or UNTIL loop.
+If N is specified, resumes the Nth enclosing loop.
 $END
 
 /* Set up to continue x levels, where x defaults to 1, but can be specified
index 7d7ebe95b1e1522e05907822fad5b1f58e3d552e..37a7827ccf1f79319a37091e58f89ae9dce0da69 100644 (file)
@@ -1,7 +1,7 @@
 This file is break.def, from which is created break.c.
 It implements the builtins "break" and "continue" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,8 +24,7 @@ $PRODUCES break.c
 $BUILTIN break
 $FUNCTION break_builtin
 $SHORT_DOC break [n]
-Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,
-break N levels.
+Exit a FOR, WHILE or UNTIL loop.  If N is specified, break N enclosing loops.
 $END
 #include <config.h>
 
@@ -86,8 +85,8 @@ break_builtin (list)
 $BUILTIN continue
 $FUNCTION continue_builtin
 $SHORT_DOC continue [n]
-Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.
-If N is specified, resume at the N-th enclosing loop.
+Resumes the next iteration of the enclosing FOR, WHILE or UNTIL loop.
+If N is specified, resumes the Nth enclosing loop.
 $END
 
 /* Set up to continue x levels, where x defaults to 1, but can be specified
index 4e38fb4e7f91d3a0f8226fcea297ddafdc69ab8c..e8ae9264b83bf54984247ff31a77b1aac8176a85 100644 (file)
@@ -1,7 +1,7 @@
 This file is builtin.def, from which is created builtin.c.
 It implements the builtin "builtin" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,10 +24,9 @@ $PRODUCES builtin.c
 $BUILTIN builtin
 $FUNCTION builtin_builtin
 $SHORT_DOC builtin [shell-builtin [arg ...]]
-Execute SHELL-BUILTIN with arguments ARGs without performing shell function
-lookup.  This is useful when you wish to reimplement a shell builtin as a
-shell function, but need the functionality of the builtin within the function
-itself.
+Execute SHELL-BUILTIN with arguments ARGs without performing command
+lookup.  This is useful when you wish to reimplement a shell builtin
+as a shell function, but need to execute the builtin within the function.
 $END
 #include <config.h>
 
index dfa58bc97110f3010e7b27734f9d471dd5629373..2d2b3259db426aa64bbb54357a98abacbc909894 100644 (file)
@@ -1,7 +1,7 @@
 This file is builtin.def, from which is created builtin.c.
 It implements the builtin "builtin" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,9 +24,9 @@ $PRODUCES builtin.c
 $BUILTIN builtin
 $FUNCTION builtin_builtin
 $SHORT_DOC builtin [shell-builtin [arg ...]]
-Run a shell builtin.  This is useful when you wish to rename a
-shell builtin to be a function, but need the functionality of the
-builtin within the function itself.
+Execute SHELL-BUILTIN with arguments ARGs without performing command lookup.
+This is useful when you wish to reimplement a shell builtin as a shell
+function, but need to execute the builtin within the function.
 $END
 #include <config.h>
 
index 63a25f3dd88357488025bfa748c76853a39997a2..99a5f15cfcb181647c5981334eae492a8a250a20 100644 (file)
@@ -1,7 +1,7 @@
 This file is caller.def, from which is created caller.c.  It implements the
 builtin "caller" in Bash.
 
-Copyright (C) 2002-2003 Rocky Bernstein for Free Software Foundation, Inc.
+Copyright (C) 2002-2008 Rocky Bernstein for Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,12 +25,11 @@ $BUILTIN caller
 $FUNCTION caller_builtin
 $DEPENDS_ON DEBUGGER
 $SHORT_DOC caller [expr]
-
 Returns the context of the current subroutine call.  
 
-Without EXPR, returns "$line $filename".  With EXPR,
-returns "$line $subroutine $filename"; this extra information
-can be used to provide a stack trace.
+Without EXPR, returns "$line $filename".  With EXPR, returns
+"$line $subroutine $filename"; this extra information can be used to
+provide a stack trace.
 
 The value of EXPR indicates how many call frames to go back before the
 current one; the top frame is frame 0.
index 1209f9ed55e2bac5e5b3f94ed00a937f66942575..63a25f3dd88357488025bfa748c76853a39997a2 100644 (file)
@@ -24,7 +24,7 @@ $PRODUCES caller.c
 $BUILTIN caller
 $FUNCTION caller_builtin
 $DEPENDS_ON DEBUGGER
-$SHORT_DOC caller [EXPR]
+$SHORT_DOC caller [expr]
 
 Returns the context of the current subroutine call.  
 
index ce3c88186a9800525314a431ff1108a59f970ff2..8b28ee49e9d3042e63c696028d224661c501f0d4 100644 (file)
@@ -1,7 +1,7 @@
 This file is cd.def, from which is created cd.c.  It implements the
 builtins "cd" and "pwd" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -73,17 +73,24 @@ int cdable_vars;
 $BUILTIN cd
 $FUNCTION cd_builtin
 $SHORT_DOC cd [-L|-P] [dir]
-Change the current directory to DIR.  The default for DIR is the value
-of the HOME shell variable.  The variable CDPATH defines the search
-path for the directory containing DIR.  Alternative directory names in
-CDPATH are separated by a colon (:).  A null directory name is the same
-as the current directory, i.e., `.'.  If DIR begins with a slash (/),
-then CDPATH is not used.  If the directory is not found, and the
-shell option `cdable_vars' is set, then try the word as a variable
-name.  If that variable has a value, then cd to the value of that
-variable.  The -P option says to use the physical directory structure
-instead of following symbolic links; the -L option forces symbolic links
-to be followed.
+Change the current directory to DIR.  The default DIR is the value of the
+HOME shell variable.
+
+The variable CDPATH defines the search path for the directory containing
+DIR.  Alternative directory names in CDPATH are separated by a colon (:).
+A null directory name is the same as the current directory.  If DIR begins
+with a slash (/), then CDPATH is not used.
+
+If the directory is not found, and the shell option `cdable_vars' is set,
+the word is assumed to be  a variable name.  If that variable has a value,
+its value is used for DIR.
+
+Options:
+    -L force symbolic links to be followed
+    -P use the physical directory structure without following symbolic
+       links
+
+The default is to follow symbolic links, as if `-L' were specified.
 $END
 
 /* Just set $PWD, don't change OLDPWD.  Used by `pwd -P' in posix mode. */
@@ -319,9 +326,14 @@ cd_builtin (list)
 $BUILTIN pwd
 $FUNCTION pwd_builtin
 $SHORT_DOC pwd [-LP]
-Print the current working directory.  With the -P option, pwd prints
-the physical directory, without any symbolic links; the -L option
-makes pwd follow symbolic links.
+Print the name of the current working directory.
+
+Options:
+  -L   print the value of $PWD if it names the current working
+       directory
+  -P   print the physical directory, without any symbolic links
+
+By default, `pwd' behaves as if `-L' were specified.
 $END
 
 /* Non-zero means that pwd always prints the physical directory, without
index f6258eb91c6698afabbcb64351a18e1aa0529978..5dd7a8de4572629ead2a108f0112ce7784acb58c 100644 (file)
@@ -1,7 +1,7 @@
 This file is cd.def, from which is created cd.c.  It implements the
 builtins "cd" and "pwd" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -73,17 +73,25 @@ int cdable_vars;
 $BUILTIN cd
 $FUNCTION cd_builtin
 $SHORT_DOC cd [-L|-P] [dir]
-Change the current directory to DIR.  The default for DIR is the value
-of the HOME shell variable.  The variable CDPATH defines the search
-path for the directory containing DIR.  Alternative directory names in
-CDPATH are separated by a colon (:).  A null directory name is the same
-as the current directory, i.e., `.'.  If DIR begins with a slash (/),
-then CDPATH is not used.  If the directory is not found, and the
-shell option `cdable_vars' is set, then try the word as a variable
-name.  If that variable has a value, then cd to the value of that
-variable.  The -P option says to use the physical directory structure
-instead of following symbolic links; the -L option forces symbolic links
-to be followed.
+Change the current directory to DIR.  The default DIR is the value of the
+HOME shell variable.
+
+The variable CDPATH defines the search path for the directory containing
+DIR.  Alternative directory names in CDPATH are separated by a colon (:).
+A null directory name is the same as the current directory.  If DIR begins
+with a slash (/), then CDPATH is not used.
+
+If the directory is not found, and the shell option `cdable_vars' is set,
+the word is assumed to be  a variable name.  If that variable has a value,
+its value is used for DIR.
+
+Options, if specified, are interpreted as follows:
+
+    -L force symbolic links to be followed
+    -P use the physical directory structure without following symbolic
+       links
+
+The default is to follow symbolic links, as if `-L' were specified.
 $END
 
 /* Just set $PWD, don't change OLDPWD.  Used by `pwd -P' in posix mode. */
@@ -319,9 +327,14 @@ cd_builtin (list)
 $BUILTIN pwd
 $FUNCTION pwd_builtin
 $SHORT_DOC pwd [-LP]
-Print the current working directory.  With the -P option, pwd prints
-the physical directory, without any symbolic links; the -L option
-makes pwd follow symbolic links.
+Print the name of the current working directory.
+
+Options:
+  -L   print the value of $PWD if it names the current working
+       directory
+  -P   print the physical directory, without any symbolic links
+
+By default, `pwd' behaves as if `-L' were specified.
 $END
 
 /* Non-zero means that pwd always prints the physical directory, without
index a7cdc12506c971de55d7aae2b27d645fb00b6656..2bab89dbad00087dcf537495a0ee13d4cf54f9db 100644 (file)
@@ -1,7 +1,7 @@
 This file is colon.def, from which is created colon.c.
 It implements the builtin ":" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,19 +25,19 @@ $BUILTIN :
 $DOCNAME colon
 $FUNCTION colon_builtin
 $SHORT_DOC :
-No effect; the command does nothing.  A zero exit code is returned.
+No effect; the command does nothing.  A successful exit code is returned.
 $END
 
 $BUILTIN true
 $FUNCTION colon_builtin
 $SHORT_DOC true
-Return a successful result.
+Returns a successful result.
 $END
 
 $BUILTIN false
 $FUNCTION false_builtin
 $SHORT_DOC false
-Return an unsuccessful result.
+Returns an unsuccessful result.
 $END
 
 /* Return a successful result. */
diff --git a/builtins/colon.def~ b/builtins/colon.def~
new file mode 100644 (file)
index 0000000..1f64e94
--- /dev/null
@@ -0,0 +1,57 @@
+This file is colon.def, from which is created colon.c.
+It implements the builtin ":" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES colon.c
+
+$BUILTIN :
+$DOCNAME colon
+$FUNCTION colon_builtin
+$SHORT_DOC :
+No effect; the command does nothing.  A successful exit code is returned.
+$END
+
+$BUILTIN true
+$FUNCTION colon_builtin
+$SHORT_DOC true
+Return a successful result.
+$END
+
+$BUILTIN false
+$FUNCTION false_builtin
+$SHORT_DOC false
+Return an unsuccessful result.
+$END
+
+/* Return a successful result. */
+int
+colon_builtin (ignore)
+     char *ignore;
+{
+  return (0);
+}
+
+/* Return an unsuccessful result. */
+int
+false_builtin (ignore)
+     char *ignore;
+{
+  return (1);
+}
index dbc1e9a14a1e44b3f066a89583ed4af07fcabf85..060bbc839944ae7030539c6f947f1d63e60e05dd 100644 (file)
@@ -1,7 +1,7 @@
 This file is command.def, from which is created command.c.
 It implements the builtin "command" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,12 +24,15 @@ $PRODUCES command.c
 $BUILTIN command
 $FUNCTION command_builtin
 $SHORT_DOC command [-pVv] command [arg ...]
-Runs COMMAND with ARGS ignoring shell functions.  If you have a shell
-function called `ls', and you wish to call the command `ls', you can
-say "command ls".  If the -p option is given, a default value is used
-for PATH that is guaranteed to find all of the standard utilities.  If
-the -V or -v option is given, a string is printed describing COMMAND.
-The -V option produces a more verbose description.
+Runs COMMAND with ARGS suppressing  shell function lookup, or display
+information about the specified COMMANDs.  Can be used to invoke commands
+on disk when a function with the same name exists.
+
+Options:
+  -p   use a default value for PATH that is guaranteed to find all of
+       the standard utilities
+  -v   print a description of COMMAND similar to the `type' builtin
+  -V   print a more verbose description of each COMMAND
 $END
 
 #include <config.h>
diff --git a/builtins/command.def~ b/builtins/command.def~
new file mode 100644 (file)
index 0000000..6cc4269
--- /dev/null
@@ -0,0 +1,210 @@
+This file is command.def, from which is created command.c.
+It implements the builtin "command" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES command.c
+
+$BUILTIN command
+$FUNCTION command_builtin
+$SHORT_DOC command [-pVv] command [arg ...]
+Runs COMMAND with ARGS suppressing  shell function lookup, or display
+information about the specified COMMANDs.  Can be used to invoke commands
+on disk when a function with the same name exists.
+
+Options:
+  -p   use a default value for PATH that is guaranteed to find all of
+       the standard utilities.
+  -v   print a description of COMMAND similar to the `type' builtin
+  -V   print a more verbose description of each COMMAND
+$END
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashansi.h"
+
+#include "../shell.h"
+#include "../execute_cmd.h"
+#include "../flags.h"
+#include "bashgetopt.h"
+#include "common.h"
+
+#if defined (_CS_PATH) && defined (HAVE_CONFSTR) && !HAVE_DECL_CONFSTR
+extern size_t confstr __P((int, char *, size_t));
+#endif
+
+extern int subshell_environment;
+
+static void restore_path __P((char *));
+static char *get_standard_path __P((void));
+
+/* Run the commands mentioned in LIST without paying attention to shell
+   functions. */
+int
+command_builtin (list)
+     WORD_LIST *list;
+{
+  int result, verbose, use_standard_path, opt;
+  char *old_path, *standard_path;
+  COMMAND *command;
+
+  verbose = use_standard_path = 0;
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "pvV")) != -1)
+    {
+      switch (opt)
+       {
+       case 'p':
+         use_standard_path = 1;
+         break;
+       case 'V':
+         verbose = CDESC_SHORTDESC|CDESC_ABSPATH;      /* look in common.h for constants */
+         break;
+       case 'v':
+         verbose = CDESC_REUSABLE;     /* ditto */
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+  list = loptend;
+
+  if (list == 0)
+    return (EXECUTION_SUCCESS);
+
+  if (verbose)
+    {
+      int found, any_found;
+
+      for (any_found = 0; list; list = list->next)
+       {
+         found = describe_command (list->word->word, verbose);
+
+         if (found == 0 && verbose != CDESC_REUSABLE)
+           sh_notfound (list->word->word);
+
+         any_found += found;
+       }
+      return (any_found ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+    }
+
+#if defined (RESTRICTED_SHELL)
+  if (use_standard_path && restricted)
+    {
+      sh_restricted ("-p");
+      return (EXECUTION_FAILURE);
+    }
+#endif
+
+  begin_unwind_frame ("command_builtin");
+
+  /* We don't want this to be reparsed (consider command echo 'foo &'), so
+     just make a simple_command structure and call execute_command with it. */
+  if (use_standard_path)
+    {      
+      old_path = get_string_value ("PATH");
+      /* If old_path is NULL, $PATH is unset.  If so, we want to make sure
+        it's unset after this command completes. */
+      if (old_path)
+       old_path = savestring (old_path);
+      add_unwind_protect ((Function *)restore_path, old_path);
+
+      standard_path = get_standard_path ();
+      bind_variable ("PATH", standard_path ? standard_path : "", 0);
+      FREE (standard_path);
+    }
+
+#define COMMAND_BUILTIN_FLAGS (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION | CMD_COMMAND_BUILTIN)
+
+  command = make_bare_simple_command ();
+  command->value.Simple->words = (WORD_LIST *)copy_word_list (list);
+  command->value.Simple->redirects = (REDIRECT *)NULL;
+  command->flags |= COMMAND_BUILTIN_FLAGS;
+  command->value.Simple->flags |= COMMAND_BUILTIN_FLAGS;
+#if 0
+  /* This breaks for things like ( cd /tmp ; command z ababa ; echo next )
+     or $(command echo a ; command echo b;) or even
+     { command echo a; command echo b; } & */
+  /* If we're in a subshell, see if we can get away without forking
+     again, since we've already forked to run this builtin. */
+  if (subshell_environment)
+    {
+      command->flags |= CMD_NO_FORK;
+      command->value.Simple->flags |= CMD_NO_FORK;
+    }
+#endif
+  add_unwind_protect ((char *)dispose_command, command);
+  result = execute_command (command);
+
+  run_unwind_frame ("command_builtin");
+
+  return (result);
+}
+
+/* Restore the value of the $PATH variable after replacing it when
+   executing `command -p'. */
+static void
+restore_path (var)
+     char *var;
+{
+  if (var)
+    {
+      bind_variable ("PATH", var, 0);
+      free (var);
+    }
+  else
+    unbind_variable ("PATH");
+}
+
+/* Return a value for PATH that is guaranteed to find all of the standard
+   utilities.  This uses Posix.2 configuration variables, if present.  It
+   uses a value defined in config.h as a last resort. */
+static char *
+get_standard_path ()
+{
+#if defined (_CS_PATH) && defined (HAVE_CONFSTR)
+  char *p;
+  size_t len;
+
+  len = (size_t)confstr (_CS_PATH, (char *)NULL, (size_t)0);
+  if (len > 0)
+    {
+      p = (char *)xmalloc (len + 2);
+      *p = '\0';
+      confstr (_CS_PATH, p, len);
+      return (p);
+    }
+  else
+    return (savestring (STANDARD_UTILS_PATH));
+#else /* !_CS_PATH || !HAVE_CONFSTR  */
+#  if defined (CS_PATH)
+  return (savestring (CS_PATH));
+#  else
+  return (savestring (STANDARD_UTILS_PATH));
+#  endif /* !CS_PATH */
+#endif /* !_CS_PATH || !HAVE_CONFSTR */
+}
index 24707a744b7db87373922da05bbae04dc03be39a..6c77a6ed523b098c55ba86f5c3f292cadadca7f2 100644 (file)
@@ -1,7 +1,7 @@
 This file is complete.def, from which is created complete.c.
 It implements the builtins "complete" and "compgen" in Bash.
 
-Copyright (C) 1999-2006 Free Software Foundation, Inc.
+Copyright (C) 1999-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,11 +25,15 @@ $BUILTIN complete
 $DEPENDS_ON PROGRAMMABLE_COMPLETION
 $FUNCTION complete_builtin
 $SHORT_DOC complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
-For each NAME, specify how arguments are to be completed.
-If the -p option is supplied, or if no options are supplied, existing
-completion specifications are printed in a way that allows them to be
-reused as input.  The -r option removes a completion specification for
-each NAME, or, if no NAMEs are supplied, all completion specifications.
+For each NAME, specify how arguments are to be completed by Readline.
+If no options are supplied, existing completion specifications are printed
+in a way that allows them to be reused as input.
+
+Options:
+  -p   print existing completion specifications in a reusable format
+  -r   remove a completion specification for each NAME, or, if no
+       NAMEs are supplied, all completion specifications
+
 When completion is attempted, the actions are applied in the order the
 uppercase-letter options are listed above.
 $END
index cb501c9092206301684ce1ea17bbb99ddfaf149b..b05aac94d5a9cc605970c87a1a5359e4f02a05d5 100644 (file)
@@ -1,7 +1,7 @@
 This file is complete.def, from which is created complete.c.
 It implements the builtins "complete" and "compgen" in Bash.
 
-Copyright (C) 1999-2006 Free Software Foundation, Inc.
+Copyright (C) 1999-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,11 +25,15 @@ $BUILTIN complete
 $DEPENDS_ON PROGRAMMABLE_COMPLETION
 $FUNCTION complete_builtin
 $SHORT_DOC complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
-For each NAME, specify how arguments are to be completed.
-If the -p option is supplied, or if no options are supplied, existing
-completion specifications are printed in a way that allows them to be
-reused as input.  The -r option removes a completion specification for
-each NAME, or, if no NAMEs are supplied, all completion specifications.
+For each NAME, specify how arguments are to be completed by Readline.
+If no options are supplied, existing completion specifications are printed
+in a way that allows them to be reused as input.
+
+Options:
+  -p   print existing completion specifications in a reusable format
+  -r   remove a completion specification for each NAME, or, if no NAMEs
+       are supplied, all completion specifications
+
 When completion is attempted, the actions are applied in the order the
 uppercase-letter options are listed above.
 $END
@@ -480,13 +484,12 @@ print_one_completion (cmd, cs)
   SQPRINTARG (cs->suffix, "-S");
   SQPRINTARG (cs->filterpat, "-X");
 
+  SQPRINTARG (cs->command, "-C");
+
   /* simple arguments that don't require quoting */
   PRINTARG (cs->funcname, "-F");
-  PRINTARG (cs->command, "-C");
 
-  x = sh_single_quote (cmd);
   printf ("%s\n", x);
-  free (x);
 
   return (0);
 }
@@ -529,7 +532,8 @@ print_cmd_completions (list)
          ret = EXECUTION_FAILURE;
        }
     }
-  return (ret);
+
+  return (sh_chkwrite (ret));
 }
 
 $BUILTIN compgen
index f8fe32bfc422908d6d8954f48f188d8137c123bd..09c21a35e34713a7d72a191edd0f4853674c2afd 100644 (file)
@@ -1,7 +1,7 @@
 This file is declare.def, from which is created declare.c.
 It implements the builtins "declare" and "local" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,16 +24,16 @@ $PRODUCES declare.c
 $BUILTIN declare
 $FUNCTION declare_builtin
 $SHORT_DOC declare [-afFirtx] [-p] [name[=value] ...]
-Declare variables and give them attributes.  If no NAMEs are
-given, then display the values of variables instead.  When
-displaying variable values, the -f option restricts the display
-to function names and definitions; the -F option restricts the
-display to function names only (plus line number and source file
-when debugging).  The -p option will display the attributes and
-values of each NAME. 
+Declare variables and give them attributes.  If no NAMEs are given,
+display the attributes and values of all variables.
 
-The options which set attributes are:
+Options:
+  -f   restrict action or display to function names and definitions
+  -F   restrict display to function names only (plus line number and
+       source file when debugging)
+  -p   display the attributes and value of each NAME
 
+Options which set attributes:
   -a   to make NAMEs arrays (if supported)
   -i   to make NAMEs have the `integer' attribute
   -r   to make NAMEs readonly
@@ -43,7 +43,7 @@ The options which set attributes are:
 Using `+' instead of `-' turns off the given attribute.
 
 Variables with the integer attribute have arithmetic evaluation (see
-the `let' command) done when the variable is assigned a value.
+the `let' command) performed when the variable is assigned a value.
 
 When used in a function, `declare' makes NAMEs local, as with the `local'
 command.
@@ -52,7 +52,7 @@ $END
 $BUILTIN typeset
 $FUNCTION declare_builtin
 $SHORT_DOC typeset [-afFirtx] [-p] name[=value] ...
-Obsolete.  See `declare'.
+Obsolete.  See `help declare'.
 $END
 
 #include <config.h>
@@ -90,10 +90,11 @@ declare_builtin (list)
 $BUILTIN local
 $FUNCTION local_builtin
 $SHORT_DOC local [option] name[=value] ...
-Create a local variable called NAME, and give it VALUE.  LOCAL
-can only be used within a function; it makes the variable NAME
-have a visible scope restricted to that function and its children.
-OPTION can be any of the options accepted by `declare'.
+Create a local variable called NAME, and give it VALUE.  OPTION can
+be any option accepted by `declare'.
+
+Local variables can only be used within a function; they are visible
+only to the function where they are defined and its children.
 $END
 int
 local_builtin (list)
index 31c09012c25e521d185517a359b397bff549ec6f..2c7352c2f933594580ff5784ca31e048a8a92ee2 100644 (file)
@@ -1,7 +1,7 @@
 This file is declare.def, from which is created declare.c.
 It implements the builtins "declare" and "local" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,15 +24,17 @@ $PRODUCES declare.c
 $BUILTIN declare
 $FUNCTION declare_builtin
 $SHORT_DOC declare [-afFirtx] [-p] [name[=value] ...]
-Declare variables and give them attributes.  If no NAMEs are
-given, then display the values of variables instead.  When
-displaying variable values, the -f option restricts the display
-to function names and definitions; the -F option restricts the
-display to function names only (plus line number and source file
-when debugging).  The -p option will display the attributes and
-values of each NAME. 
+Declare variables and give them attributes.  If no NAMEs are given,
+display the attributes and values of all variables.
 
-The options which set attributes are:
+Options:
+
+  -f   restrict action or display to function names and definitions
+  -F   restrict display to function names only (plus line number and
+       source file when debugging)
+  -p   display the attributes and value of each NAME
+
+Options which set attributes:
 
   -a   to make NAMEs arrays (if supported)
   -i   to make NAMEs have the `integer' attribute
@@ -43,7 +45,7 @@ The options which set attributes are:
 Using `+' instead of `-' turns off the given attribute.
 
 Variables with the integer attribute have arithmetic evaluation (see
-the `let' command) done when the variable is assigned a value.
+the `let' command) performed when the variable is assigned a value.
 
 When used in a function, `declare' makes NAMEs local, as with the `local'
 command.
@@ -52,7 +54,7 @@ $END
 $BUILTIN typeset
 $FUNCTION declare_builtin
 $SHORT_DOC typeset [-afFirtx] [-p] name[=value] ...
-Obsolete.  See `declare'.
+Obsolete.  See `help declare'.
 $END
 
 #include <config.h>
@@ -90,10 +92,11 @@ declare_builtin (list)
 $BUILTIN local
 $FUNCTION local_builtin
 $SHORT_DOC local [option] name[=value] ...
-Create a local variable called NAME, and give it VALUE.  LOCAL
-can only be used within a function; it makes the variable NAME
-have a visible scope restricted to that function and its children.
-OPTION can be any of the options accepted by `declare'.
+Create a local variable called NAME, and give it VALUE.  OPTION can
+be any option accepted by `declare'.
+
+Local variables can only be used within a function; they are visible
+only to the function where they are defined and its children.
 $END
 int
 local_builtin (list)
index 483f93bc95a9dccde49a7f330ebf1a4f39c64fb0..1d2b33bad403562abd8baf8ce39ea603a5bb6e76 100644 (file)
@@ -1,7 +1,7 @@
 This file is echo.def, from which is created echo.c.
 It implements the builtin "echo" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -37,33 +37,38 @@ $BUILTIN echo
 $FUNCTION echo_builtin
 $DEPENDS_ON V9_ECHO
 $SHORT_DOC echo [-neE] [arg ...]
-Output the ARGs.  If -n is specified, the trailing newline is
-suppressed.  If the -e option is given, interpretation of the
-following backslash-escaped characters is turned on:
-       \a      alert (bell)
-       \b      backspace
-       \c      suppress trailing newline
-       \e      escape character
-       \f      form feed
-       \n      new line
-       \r      carriage return
-       \t      horizontal tab
-       \v      vertical tab
-       \\      backslash
-       \0nnn   the character whose ASCII code is NNN (octal).  NNN can be
-               0 to 3 octal digits
-       \xHH    the eight-bit character whose value is HH (hexadecimal).  HH
-               can be one or two hex digits
-
-You can explicitly turn off the interpretation of the above characters
-with the -E option.
+Display the ARGs on the standard output followed by a newline.
+
+Options:
+  -n   do not append a newline
+  -e   enable interpretation of the following backslash escapes
+  -E   explicitly suppress interpretation of backslash escapes
+
+`echo' interprets the following backslash-escaped characters:
+  \a   alert (bell)
+  \b   backspace
+  \c   suppress trailing newline
+  \e   escape character
+  \f   form feed
+  \n   new line
+  \r   carriage return
+  \t   horizontal tab
+  \v   vertical tab
+  \\   backslash
+  \0nnn        the character whose ASCII code is NNN (octal).  NNN can be
+       0 to 3 octal digits
+  \xHH the eight-bit character whose value is HH (hexadecimal).  HH
+       can be one or two hex digits
 $END
 
 $BUILTIN echo
 $FUNCTION echo_builtin
 $DEPENDS_ON !V9_ECHO
 $SHORT_DOC echo [-n] [arg ...]
-Output the ARGs.  If -n is specified, the trailing newline is suppressed.
+Display the ARGs on the standard output followed by a newline.
+
+Options:
+  -n   do not append a newline
 $END
 
 #if defined (V9_ECHO)
diff --git a/builtins/echo.def~ b/builtins/echo.def~
new file mode 100644 (file)
index 0000000..74b872b
--- /dev/null
@@ -0,0 +1,187 @@
+This file is echo.def, from which is created echo.c.
+It implements the builtin "echo" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES echo.c
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "../bashansi.h"
+
+#include <stdio.h>
+#include "../shell.h"
+
+#include "common.h"
+
+$BUILTIN echo
+$FUNCTION echo_builtin
+$DEPENDS_ON V9_ECHO
+$SHORT_DOC echo [-neE] [arg ...]
+Display each ARG on the standard output.
+
+Options:
+  -n   do not append a trailing newline
+  -e   enable interpretation of the following backslash escapes
+  -E   explicitly suppress interpretation of backslash escapes
+
+`echo' interprets the following backslash-escaped characters:
+  \a   alert (bell)
+  \b   backspace
+  \c   suppress trailing newline
+  \e   escape character
+  \f   form feed
+  \n   new line
+  \r   carriage return
+  \t   horizontal tab
+  \v   vertical tab
+  \\   backslash
+  \0nnn        the character whose ASCII code is NNN (octal).  NNN can be
+       0 to 3 octal digits
+  \xHH the eight-bit character whose value is HH (hexadecimal).  HH
+       can be one or two hex digits
+
+$END
+
+$BUILTIN echo
+$FUNCTION echo_builtin
+$DEPENDS_ON !V9_ECHO
+$SHORT_DOC echo [-n] [arg ...]
+Display each ARG on the standard output.
+
+Options:
+  -n   do not append a trailing newline
+$END
+
+#if defined (V9_ECHO)
+#  define VALID_ECHO_OPTIONS "neE"
+#else /* !V9_ECHO */
+#  define VALID_ECHO_OPTIONS "n"
+#endif /* !V9_ECHO */
+
+/* System V machines already have a /bin/sh with a v9 behaviour.  We
+   give Bash the identical behaviour for these machines so that the
+   existing system shells won't barf.  Regrettably, the SUS v2 has
+   standardized the Sys V echo behavior.  This variable is external
+   so that we can have a `shopt' variable to control it at runtime. */
+#if defined (DEFAULT_ECHO_TO_XPG) || defined (STRICT_POSIX)
+int xpg_echo = 1;
+#else
+int xpg_echo = 0;
+#endif /* DEFAULT_ECHO_TO_XPG */
+
+extern int posixly_correct;
+
+/* Print the words in LIST to standard output.  If the first word is
+   `-n', then don't print a trailing newline.  We also support the
+   echo syntax from Version 9 Unix systems. */
+int
+echo_builtin (list)
+     WORD_LIST *list;
+{
+  int display_return, do_v9, i, len;
+  char *temp, *s;
+
+  do_v9 = xpg_echo;
+  display_return = 1;
+
+  if (posixly_correct && xpg_echo)
+    goto just_echo;
+
+  for (; list && (temp = list->word->word) && *temp == '-'; list = list->next)
+    {
+      /* If it appears that we are handling options, then make sure that
+        all of the options specified are actually valid.  Otherwise, the
+        string should just be echoed. */
+      temp++;
+
+      for (i = 0; temp[i]; i++)
+       {
+         if (strchr (VALID_ECHO_OPTIONS, temp[i]) == 0)
+           break;
+       }
+
+      /* echo - and echo -<nonopt> both mean to just echo the arguments. */
+      if (*temp == 0 || temp[i])
+       break;
+
+      /* All of the options in TEMP are valid options to ECHO.
+        Handle them. */
+      while (i = *temp++)
+       {
+         switch (i)
+           {
+           case 'n':
+             display_return = 0;
+             break;
+#if defined (V9_ECHO)
+           case 'e':
+             do_v9 = 1;
+             break;
+           case 'E':
+             do_v9 = 0;
+             break;
+#endif /* V9_ECHO */
+           default:
+             goto just_echo;   /* XXX */
+           }
+       }
+    }
+
+just_echo:
+
+  clearerr (stdout);   /* clear error before writing and testing success */
+
+  while (list)
+    {
+      i = len = 0;
+      temp = do_v9 ? ansicstr (list->word->word, STRLEN (list->word->word), 1, &i, &len)
+                  : list->word->word;
+      if (temp)
+       {
+         if (do_v9)
+           {
+             for (s = temp; len > 0; len--)
+               putchar (*s++);
+           }
+         else      
+           printf ("%s", temp);
+#if defined (SunOS5)
+         fflush (stdout);      /* Fix for bug in SunOS 5.5 printf(3) */
+#endif
+       }
+      if (do_v9 && temp)
+       free (temp);
+      list = list->next;
+      if (i)
+       {
+         display_return = 0;
+         break;
+       }
+      if (list)
+       putchar(' ');
+    }
+
+  if (display_return)
+    putchar ('\n');
+  return (sh_chkwrite (EXECUTION_SUCCESS));
+}
index 3570be5ef96f103e5e5ab076aa6245fe1e6c5e9e..d53650ccbba7f31b58dce8fa0fc25a8bff0ab0a5 100644 (file)
@@ -1,7 +1,7 @@
 This file is enable.def, from which is created enable.c.
 It implements the builtin "enable" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,19 +24,24 @@ $PRODUCES enable.c
 $BUILTIN enable
 $FUNCTION enable_builtin
 $SHORT_DOC enable [-a] [-dnps] [-f filename] [name ...]
-Enable and disable builtin shell commands.  This allows
-you to use a disk command which has the same name as a shell
-builtin without specifying a full pathname.  If -n is used, the
-NAMEs become disabled; otherwise NAMEs are enabled.  For example,
-to use the `test' found in $PATH instead of the shell builtin
-version, type `enable -n test'.  On systems supporting dynamic
-loading, the -f option may be used to load new builtins from the
-shared object FILENAME.  The -d option will delete a builtin
-previously loaded with -f.  If no non-option NAMEs are given, or
-the -p option is supplied, a list of builtins is printed.  The
--a option means to print every builtin with an indication of whether
-or not it is enabled.  The -s option restricts the output to the POSIX.2
-`special' builtins.  The -n option displays a list of all disabled builtins.
+Enables and disables builtin shell commands.  Disabling allows you to
+execute a disk command which has the same name as a shell builtin
+without using a full pathname.
+
+Options:
+  -a   print a list of builtins showing whether or not each is enabled
+  -n   disable each NAME or display a list of disabled builtins
+  -p   print the list of builtins in a reusable format
+  -s   print only the names of Posix `special' builtins
+
+Options controlling dynamic loading:
+  -f   Load builtin NAME from shared object FILENAME
+  -d   Remove a builtin loaded with -f
+
+Without options, each NAME is enabled.
+
+To use the `test' found in $PATH instead of the shell builtin
+version, type `enable -n test'.
 $END
 
 #include <config.h>
index 5307e394675a578a0335f2b0949b612a13e59fee..527cce27fbb51162f0d881de6bdc6155594d1369 100644 (file)
@@ -1,7 +1,7 @@
 This file is enable.def, from which is created enable.c.
 It implements the builtin "enable" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,20 +23,27 @@ $PRODUCES enable.c
 
 $BUILTIN enable
 $FUNCTION enable_builtin
-$SHORT_DOC enable [-pnds] [-a] [-f filename] [name ...]
-Enable and disable builtin shell commands.  This allows
-you to use a disk command which has the same name as a shell
-builtin without specifying a full pathname.  If -n is used, the
-NAMEs become disabled; otherwise NAMEs are enabled.  For example,
-to use the `test' found in $PATH instead of the shell builtin
-version, type `enable -n test'.  On systems supporting dynamic
-loading, the -f option may be used to load new builtins from the
-shared object FILENAME.  The -d option will delete a builtin
-previously loaded with -f.  If no non-option NAMEs are given, or
-the -p option is supplied, a list of builtins is printed.  The
--a option means to print every builtin with an indication of whether
-or not it is enabled.  The -s option restricts the output to the POSIX.2
-`special' builtins.  The -n option displays a list of all disabled builtins.
+$SHORT_DOC enable [-a] [-dnps] [-f filename] [name ...]
+Enables and disables builtin shell commands.  Disabling allows you to
+execute a disk command which has the same name as a shell builtin
+without using a full pathname.
+
+Options:
+
+  -a   print a list of builtins showing whether or not each is enabled
+  -n   disable each NAME or display a list of disabled builtins
+  -p   print the list of builtins in a reusable format
+  -s   print only the names of Posix `special' builtins
+
+Options controlling dynamic loading:
+
+  -f   Load builtin NAME from shared object FILENAME
+  -d   Remove a builtin loaded with -f
+
+Without options, each NAME is enabled.
+
+To use the `test' found in $PATH instead of the shell builtin
+version, type `enable -n test'.
 $END
 
 #include <config.h>
index 500e8c7304875fff022d6976440ba24c44d262dc..fb91447f79dd1fd8f6bd9ae4e357ca252d5a1842 100644 (file)
@@ -1,7 +1,7 @@
 This file is eval.def, from which is created eval.c.
 It implements the builtin "eval" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,7 +24,8 @@ $PRODUCES eval.c
 $BUILTIN eval
 $FUNCTION eval_builtin
 $SHORT_DOC eval [arg ...]
-Read ARGs as input to the shell and execute the resulting command(s).
+Combine ARGs into a single string, use the result as input to the shell,
+and execute the resulting commands.
 $END
 
 #include <config.h>
diff --git a/builtins/eval.def~ b/builtins/eval.def~
new file mode 100644 (file)
index 0000000..500e8c7
--- /dev/null
@@ -0,0 +1,53 @@
+This file is eval.def, from which is created eval.c.
+It implements the builtin "eval" in Bash.
+
+Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES eval.c
+
+$BUILTIN eval
+$FUNCTION eval_builtin
+$SHORT_DOC eval [arg ...]
+Read ARGs as input to the shell and execute the resulting command(s).
+$END
+
+#include <config.h>
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../shell.h"
+#include "bashgetopt.h"
+#include "common.h"
+
+/* Parse the string that these words make, and execute the command found. */
+int
+eval_builtin (list)
+     WORD_LIST *list;
+{
+  if (no_options (list))
+    return (EX_USAGE);
+  list = loptend;      /* skip over possible `--' */
+
+  /* Note that parse_and_execute () frees the string it is passed. */
+  return (list ? parse_and_execute (string_list (list), "eval", SEVAL_NOHIST) : EXECUTION_SUCCESS);
+}
index fd92d7edd5d23e75c7df3fbde7b6388ab7733754..ffa427617a994ae35777eb008604bafce4236357 100644 (file)
@@ -1,7 +1,7 @@
 This file is exec.def, from which is created exec.c.
 It implements the builtin "exec" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -26,14 +26,15 @@ $FUNCTION exec_builtin
 $SHORT_DOC exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
 Execute COMMAND, replacing this shell with the specified program.
 ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,
-any redirections take effect in the current shell.  If the `-l' option
-is supplied, the shell places a dash in the zeroth argument to the
-COMMAND, as login does.  If the `-c' option is supplied, COMMAND is
-executed with an empty environment.  The `-a' option causes the shell
-to pass NAME as the zeroth argument to COMMAND.  If the command cannot be
-executed, a non-interactive shell exits, unless the shell option `execfail'
-is set.  If COMMAND is absent, any redirections specified take effect in the
-calling shell.
+any redirections take effect in the current shell.
+
+Options:
+  -a name      pass NAME as the zeroth argument to COMMAND
+  -c           execute COMMAND with an empty environment
+  -l           place a dash in the zeroth argument to COMMAND
+
+If the command cannot be executed, a non-interactive shell exits, unless
+the shell option `execfail' is set.
 $END
 
 #include <config.h>
index 4a89ed6f776dad534cc3679379603a2cfb3fa7f3..ce4aeb5e8e1a4cb5c6510a82eeb20e429a271109 100644 (file)
@@ -1,7 +1,7 @@
 This file is exec.def, from which is created exec.c.
 It implements the builtin "exec" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -26,14 +26,16 @@ $FUNCTION exec_builtin
 $SHORT_DOC exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
 Execute COMMAND, replacing this shell with the specified program.
 ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,
-any redirections take effect in the current shell.  If the `-l' option
-is supplied, the shell places a dash in the zeroth argument to the
-COMMAND, as login does.  If the `-c' option is supplied, COMMAND is
-executed with an empty environment.  The `-a' option causes the shell
-to pass NAME as the zeroth argument to COMMAND.  If the command cannot be
-executed, a non-interactive shell exits, unless the shell option `execfail'
-is set.  If COMMAND is absent, any redirections take effect in the
-calling shell.
+any redirections take effect in the current shell.
+
+Options:
+
+  -a name      pass NAME as the zeroth argument to COMMAND
+  -c           execute COMMAND with an empty environment
+  -l           place a dash in the zeroth argument to COMMAND
+
+If the command cannot be executed, a non-interactive shell exits, unless
+the shell option `execfail' is set.
 $END
 
 #include <config.h>
index 3c0bfdf7f51c96d27bbdefa49f973d3c4b339e94..800aab0f4bfac336c8fad04b76177f5995557161 100644 (file)
@@ -1,7 +1,7 @@
 This file is exit.def, from which is created exit.c.
 It implements the builtins "exit", and "logout" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,7 +24,7 @@ $PRODUCES exit.c
 $BUILTIN exit
 $FUNCTION exit_builtin
 $SHORT_DOC exit [n]
-Exit the shell with a status of N.  If N is omitted, the exit status
+Exits the shell with a status of N.  If N is omitted, the exit status
 is that of the last command executed.
 $END
 
@@ -71,7 +71,7 @@ exit_builtin (list)
 $BUILTIN logout
 $FUNCTION logout_builtin
 $SHORT_DOC logout
-Logout of a login shell.
+Exits a login shell.  Returns an error if not executed in a login shell.
 $END
 
 /* How to logout. */
index 2993610e1fb8f4ddb096afa57e94d39a1ea0278a..3c0bfdf7f51c96d27bbdefa49f973d3c4b339e94 100644 (file)
@@ -45,6 +45,7 @@ $END
 #include "common.h"
 #include "builtext.h"  /* for jobs_builtin */
 
+extern int check_jobs_at_exit;
 extern int last_command_exit_value;
 extern int running_trap, trap_saved_exit_value;
 extern int subshell_environment;
@@ -94,7 +95,7 @@ exit_or_logout (list)
   int exit_value;
 
 #if defined (JOB_CONTROL)
-  int exit_immediate_okay;
+  int exit_immediate_okay, stopmsg;
 
   exit_immediate_okay = (interactive  == 0 ||
                         last_shell_builtin == exit_builtin ||
@@ -105,18 +106,29 @@ exit_or_logout (list)
   if (exit_immediate_okay == 0)
     {
       register int i;
-      for (i = 0; i < js.j_jobslots; i++)
+      for (i = stopmsg = 0; i < js.j_jobslots; i++)
        if (jobs[i] && STOPPED (i))
-         {
-           fprintf (stderr, _("There are stopped jobs.\n"));
-
-           /* This is NOT superfluous because EOF can get here without
-              going through the command parser.  Set both last and this
-              so that either `exit', `logout', or ^D will work to exit
-              immediately if nothing intervenes. */
-           this_shell_builtin = last_shell_builtin = exit_builtin;
-           return (EXECUTION_FAILURE);
-         }
+         stopmsg = JSTOPPED;
+       else if (check_jobs_at_exit && stopmsg == 0 && RUNNING (i))
+         stopmsg = JRUNNING;
+
+      if (stopmsg == JSTOPPED)
+       fprintf (stderr, _("There are stopped jobs.\n"));
+      else if (stopmsg == JRUNNING)
+       fprintf (stderr, _("There are running jobs.\n"));
+
+      if (stopmsg && check_jobs_at_exit)
+        list_all_jobs (JLIST_STANDARD);
+
+      if (stopmsg)
+       {
+         /* This is NOT superfluous because EOF can get here without
+            going through the command parser.  Set both last and this
+            so that either `exit', `logout', or ^D will work to exit
+            immediately if nothing intervenes. */
+         this_shell_builtin = last_shell_builtin = exit_builtin;
+         return (EXECUTION_FAILURE);
+       }
     }
 #endif /* JOB_CONTROL */
 
index d729a748501aea3942650155f15cc7ad7e7676dc..0b52baf4325014118f785880c27eda72a99350fb 100644 (file)
@@ -1,7 +1,7 @@
 This file is fc.def, from which is created fc.c.
 It implements the builtin "fc" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -30,12 +30,12 @@ FIRST and LAST can be numbers specifying the range, or FIRST can be a
 string, which means the most recent command beginning with that
 string.
 
-   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,
-      then vi.
-
-   -l means list lines instead of editing.
-   -n means no line numbers listed.
-   -r means reverse the order of the lines (making it newest listed first).
+Options:
+  -e ENAME     select which editor to use.  Default is FCEDIT, then EDITOR,
+               then vi
+  -l   list lines instead of editing
+  -n   omit line numbers when listing
+  -r   reverse the order of the lines (newest listed first)
 
 With the `fc -s [pat=rep ...] [command]' format, COMMAND is
 re-executed after the substitution OLD=NEW is performed.
index 70421124fc56faec7fcee49c7e23f1159f22720d..825367fa47dc82a127352a5dfe9af116a946da73 100644 (file)
@@ -1,7 +1,7 @@
 This file is fc.def, from which is created fc.c.
 It implements the builtin "fc" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -30,12 +30,13 @@ FIRST and LAST can be numbers specifying the range, or FIRST can be a
 string, which means the most recent command beginning with that
 string.
 
-   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,
-      then vi.
+Options:
 
-   -l means list lines instead of editing.
-   -n means no line numbers listed.
-   -r means reverse the order of the lines (making it newest listed first).
+  -e ENAME     select which editor to use.  Default is FCEDIT, then EDITOR,
+               then vi
+  -l   list lines instead of editing
+  -n   omit line numbers when listing
+  -r   reverse the order of the lines (newest listed first)
 
 With the `fc -s [pat=rep ...] [command]' format, COMMAND is
 re-executed after the substitution OLD=NEW is performed.
@@ -296,7 +297,6 @@ fc_builtin (list)
     delete_last_history ();
 
   last_hist = i - remember_on_history - hist_last_line_added;
-itrace("fc: i = %d last_hist = %d remember_on_history = %d hist_last_line_added = %d", i, last_hist, remember_on_history, hist_last_line_added);
 
   if (list)
     {
@@ -307,7 +307,6 @@ itrace("fc: i = %d last_hist = %d remember_on_history = %d hist_last_line_added
        histend = fc_gethnum (list->word->word, hlist);
       else
        histend = listing ? last_hist : histbeg;
-itrace("fc: histbeg = %d histend = %d", histbeg, histend);
     }
   else
     {
index 2f86c8bd7bf1388c43c529af2e75f7333c8ecabb..fecd6a3a3f40c034b069cfb864b0c85481e1ce52 100644 (file)
@@ -1,7 +1,7 @@
 This file is fg_bg.def, from which is created fg_bg.c.
 It implements the builtins "bg" and "fg" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,9 +25,9 @@ $BUILTIN fg
 $FUNCTION fg_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC fg [job_spec]
-Place JOB_SPEC in the foreground, and make it the current job.  If
-JOB_SPEC is not present, the shell's notion of the current job is
-used.
+Place the job identified by JOB_SPEC in the foreground, making it the
+current job.  If JOB_SPEC is not present, the shell's notion of the
+current job is used.
 $END
 
 #include <config.h>
@@ -83,9 +83,9 @@ $BUILTIN bg
 $FUNCTION bg_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC bg [job_spec ...]
-Place each JOB_SPEC in the background, as if it had been started with
-`&'.  If JOB_SPEC is not present, the shell's notion of the current
-job is used.
+Place the jobs identified by each JOB_SPEC in the background, as if they
+had been started with `&'.  If JOB_SPEC is not present, the shell's notion
+of the current job is used.
 $END
 
 #if defined (JOB_CONTROL)
index c14381b6d3d6ae7fa926872629616d56aee4a818..655436d53972a11bedd6d87b0f1ad159c0b67930 100644 (file)
@@ -1,7 +1,7 @@
 This file is fg_bg.def, from which is created fg_bg.c.
 It implements the builtins "bg" and "fg" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,9 +25,9 @@ $BUILTIN fg
 $FUNCTION fg_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC fg [job_spec]
-Place JOB_SPEC in the foreground, and make it the current job.  If
-JOB_SPEC is not present, the shell's notion of the current job is
-used.
+Place the job identified by JOB_SPEC in the foreground, making it the
+current job.  If JOB_SPEC is not present, the shell's notion of the current
+job is used.
 $END
 
 #include <config.h>
@@ -83,9 +83,9 @@ $BUILTIN bg
 $FUNCTION bg_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC bg [job_spec ...]
-Place each JOB_SPEC in the background, as if it had been started with
-`&'.  If JOB_SPEC is not present, the shell's notion of the current
-job is used.
+Place the jobs identified by each JOB_SPEC in the background, as if they
+had been started with `&'.  If JOB_SPEC is not present, the shell's notion
+of the current job is used.
 $END
 
 #if defined (JOB_CONTROL)
@@ -137,7 +137,7 @@ fg_bg (list, foreground)
   if (INVALID_JOB (job))
     {
       if (job != DUP_JOB)
-       sh_badjob (list ? list->word->word : "current");
+       sh_badjob (list ? list->word->word : _("current"));
 
       goto failure;
     }
index 8c827e1705de64c09ab5c5c09aaac2f964b478c2..95c8d8e088830958298dc8e9c1bd2f672febef79 100644 (file)
@@ -1,7 +1,7 @@
 This file is hash.def, from which is created hash.c.
 It implements the builtin "hash" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,16 +24,17 @@ $PRODUCES hash.c
 $BUILTIN hash
 $FUNCTION hash_builtin
 $SHORT_DOC hash [-lr] [-p pathname] [-dt] [name ...]
-For each NAME, the full pathname of the command is determined and
-remembered.  If the -p option is supplied, PATHNAME is used as the
-full pathname of NAME, and no path search is performed.  The -r
-option causes the shell to forget all remembered locations.  The -d
-option causes the shell to forget the remembered location of each NAME.
-If the -t option is supplied the full pathname to which each NAME
-corresponds is printed.  If multiple NAME arguments are supplied with
--t, the NAME is printed before the hashed full pathname.  The -l option
-causes output to be displayed in a format that may be reused as input.
-If no arguments are given, information about remembered commands is displayed.
+Determine and remember the full pathname of each command NAME.  If
+no arguments are given, information about remembered commands is displayed.
+
+Options:
+  -d           forget the remembered location of each NAME
+  -l           display in a format that may be reused as input
+  -p pathname  use PATHNAME is the full pathname of NAME
+  -r           forget all remembered locations
+  -t           print the remembered location of each NAME, preceding
+               each location with the corresponding NAME if multiple
+               NAMEs are given
 $END
 
 #include <config.h>
index dccd97e02d8b759bcc66cbbaadc1a55a66e354bd..8c827e1705de64c09ab5c5c09aaac2f964b478c2 100644 (file)
@@ -233,7 +233,7 @@ print_hashed_commands (fmt)
     return (0);
 
   if (fmt == 0)
-    printf ("hits\tcommand\n");
+    printf (_("hits\tcommand\n"));
   hash_walk (hashed_filenames, fmt ? print_portable_hash_info : print_hash_info);
   return (1);
 }
index 743685b111f4349c29d7927edf5a82548008bf4d..8619f7545fc2654e6a23a2af09037b24fbe2ce64 100644 (file)
@@ -1,7 +1,7 @@
 This file is help.def, from which is created help.c.
 It implements the builtin "help" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,11 +25,13 @@ $BUILTIN help
 $FUNCTION help_builtin
 $DEPENDS_ON HELP_BUILTIN
 $SHORT_DOC help [-s] [pattern ...]
-Display helpful information about builtin commands.  If PATTERN is
+Displays brief information about builtin commands.  If PATTERN is
 specified, gives detailed help on all commands matching PATTERN,
-otherwise a list of the builtins is printed.  The -s option
-restricts the output for each builtin command matching PATTERN to
-a short usage synopsis.
+otherwise the list of help topics is printed.
+
+Options:
+  -s   output only a short usage synopsis for each topic matching
+       PATTERN
 $END
 
 #include <config.h>
index 067b83cfe660f3b18e1fc640ad2356a03bef121c..729f61f3885894a52feb8f3c863a0200cbf518f0 100644 (file)
@@ -1,7 +1,7 @@
 This file is help.def, from which is created help.c.
 It implements the builtin "help" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,11 +25,12 @@ $BUILTIN help
 $FUNCTION help_builtin
 $DEPENDS_ON HELP_BUILTIN
 $SHORT_DOC help [-s] [pattern ...]
-Display helpful information about builtin commands.  If PATTERN is
+Displays brief information about builtin commands.  If PATTERN is
 specified, gives detailed help on all commands matching PATTERN,
-otherwise a list of the builtins is printed.  The -s option
-restricts the output for each builtin command matching PATTERN to
-a short usage synopsis.
+otherwise the list of help topics is printed.
+
+Options:
+  -s   output only a short usage synopsis for each topic matching PATTERN
 $END
 
 #include <config.h>
@@ -208,7 +209,7 @@ A star (*) next to a name means that the command is disabled.\n\
       blurb[width - 2] = '>';          /* indicate truncation */
       blurb[width - 1] = '\0';
       printf ("%s", blurb);
-      if (((i << 1) >= num_shell_builtins)) /* || (i+height >= num_shell_builtins)) */
+      if (((i << 1) >= num_shell_builtins) || (i+height >= num_shell_builtins))
        {
          printf ("\n");
          break;
index 434fe271c97cca1a1650d8c4eea13b25cd150848..319523998ca1d603adbeaa2e0b263bfa18100787 100644 (file)
@@ -1,7 +1,7 @@
 This file is history.def, from which is created history.c.
 It implements the builtin "history" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,23 +25,26 @@ $BUILTIN history
 $FUNCTION history_builtin
 $DEPENDS_ON HISTORY
 $SHORT_DOC history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
-Display the history list with line numbers.  Lines listed with
-with a `*' have been modified.  Argument of N says to list only
-the last N lines.  The `-c' option causes the history list to be
-cleared by deleting all of the entries.  The `-d' option deletes
-the history entry at offset OFFSET.  The `-w' option writes out the
-current history to the history file;  `-r' means to read the file and
-append the contents to the history list instead.  `-a' means
-to append history lines from this session to the history file.
-Argument `-n' means to read all history lines not already read
-from the history file and append them to the history list.
-
-If FILENAME is given, then that is used as the history file.  Otherwise,
+Display the history list with line numbers, prefixing each modified
+entry with a `*'.  An argument of N lists only the last N entries.
+
+Options:
+  -c   clear the history list by deleting all of the entries
+  -d offset    delete the history entry at offset OFFSET.
+
+  -a   append history lines from this session to the history file
+  -n   read all history lines not already read from the history file
+  -r   read the history file and append the contents to the history
+       list
+  -w   write the current history to the history file
+       and append them to the history list
+
+  -p   perform history expansion on each ARG and display the result
+       without storing it in the history list
+  -s   append the ARGs to the history list as a single entry
+
+If FILENAME is given, it is used as the history file.  Otherwise,
 if $HISTFILE has a value, that is used, else ~/.bash_history.
-If the -s option is supplied, the non-option ARGs are appended to
-the history list as a single entry.  The -p option means to perform
-history expansion on each ARG and display the result, without storing
-anything in the history list.
 
 If the $HISTTIMEFORMAT variable is set and not null, its value is used
 as a format string for strftime(3) to print the time stamp associated
index 1a127e2e9f1d3ead50836293a287cae1987fa451..965b71c7007b2d2a9a61e84a53b400ec6c698b37 100644 (file)
@@ -1,7 +1,7 @@
 This file is history.def, from which is created history.c.
 It implements the builtin "history" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,24 +24,27 @@ $PRODUCES history.c
 $BUILTIN history
 $FUNCTION history_builtin
 $DEPENDS_ON HISTORY
-$SHORT_DOC history [-c] [-d offset] [n] or history -awrn [filename] or history -ps arg [arg...]
-Display the history list with line numbers.  Lines listed with
-with a `*' have been modified.  Argument of N says to list only
-the last N lines.  The `-c' option causes the history list to be
-cleared by deleting all of the entries.  The `-d' option deletes
-the history entry at offset OFFSET.  The `-w' option writes out the
-current history to the history file;  `-r' means to read the file and
-append the contents to the history list instead.  `-a' means
-to append history lines from this session to the history file.
-Argument `-n' means to read all history lines not already read
-from the history file and append them to the history list.
-
-If FILENAME is given, then that is used as the history file.  Otherwise,
+$SHORT_DOC history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
+Display the history list with line numbers, prefixing each modified entry
+with a `*'.  An argument of N lists only the last N entries.
+
+Options:
+  -c   clear the history list by deleting all of the entries
+  -d offset    delete the history entry at offset OFFSET.
+
+  -a   append history lines from this session to the history file
+  -n   read all history lines not already read from the history file
+  -r   read the history file and append the contents to the history
+       list
+  -w   write the current history to the history file
+       and append them to the history list
+
+  -p   perform history expansion on each ARG and display the result
+       without storing it in the history list
+  -s   append the ARGs to the history list as a single entry
+
+If FILENAME is given, it is used as the history file.  Otherwise,
 if $HISTFILE has a value, that is used, else ~/.bash_history.
-If the -s option is supplied, the non-option ARGs are appended to
-the history list as a single entry.  The -p option means to perform
-history expansion on each ARG and display the result, without storing
-anything in the history list.
 
 If the $HISTTIMEFORMAT variable is set and not null, its value is used
 as a format string for strftime(3) to print the time stamp associated
@@ -170,7 +173,7 @@ history_builtin (list)
     {
       if (list)
        return (expand_and_print_history (list));
-      return (EXECUTION_SUCCESS);
+      return (sh_chkwrite (EXECUTION_SUCCESS));
     }
 #endif
   else if (flags & DFLAG)
@@ -193,7 +196,7 @@ history_builtin (list)
   else if ((flags & (AFLAG|RFLAG|NFLAG|WFLAG|CFLAG)) == 0)
     {
       display_history (list);
-      return (EXECUTION_SUCCESS);
+      return (sh_chkwrite (EXECUTION_SUCCESS));
     }
 
   filename = list ? list->word->word : get_string_value ("HISTFILE");
index ff1f3a80b3506799ec9d00b6a50857adc69911ae..adc4a7a8b9337c84cab33e6dc327097eb5616830 100644 (file)
@@ -1,7 +1,7 @@
 This file is jobs.def, from which is created jobs.c.
 It implements the builtins "jobs" and "disown" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,14 +25,19 @@ $BUILTIN jobs
 $FUNCTION jobs_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC jobs [-lnprs] [jobspec ...] or jobs -x command [args]
-Lists the active jobs.  The -l option lists process id's in addition
-to the normal information; the -p option lists process id's only.
-If -n is given, only processes that have changed status since the last
-notification are printed.  JOBSPEC restricts output to that job.  The
--r and -s options restrict output to running and stopped jobs only,
-respectively.  Without options, the status of all active jobs is
-printed.  If -x is given, COMMAND is run after all job specifications
-that appear in ARGS have been replaced with the process ID of that job's
+Lists the active jobs.  JOBSPEC restricts output to that job.
+Without options, the status of all active jobs is displayed.
+
+Options:
+  -l   lists process IDs in addition to the normal information
+  -n   list only processes that have changed status since the last
+       notification
+  -p   lists process IDs only
+  -r   restrict output to running jobs
+  -s   restrict output to stopped jobs
+
+If -x is supplied, COMMAND is run after all job specifications that
+appear in ARGS have been replaced with the process ID of that job's
 process group leader.
 $END
 
@@ -203,11 +208,14 @@ $BUILTIN disown
 $FUNCTION disown_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC disown [-h] [-ar] [jobspec ...]
-By default, removes each JOBSPEC argument from the table of active jobs.
-If the -h option is given, the job is not removed from the table, but is
-marked so that SIGHUP is not sent to the job if the shell receives a
-SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all
-jobs from the job table; the -r option means to remove only running jobs.
+Removes each JOBSPEC argument from the table of active jobs.  Without
+any JOBSPECs, the shell uses its notion of the current job.
+
+Options:
+  -a   remove all jobs if JOBSPEC is not supplied
+  -h   mark each JOBSPEC so that SIGHUP is not sent to the job if the
+       shell receives a SIGHUP
+  -r   remove only running jobs
 $END
 
 #if defined (JOB_CONTROL)
index 4c3ba6a73144c9bcf266d5d5184128fc5a8ed97e..2757c0a6b5b7548197501c26773edcceb1a01ab5 100644 (file)
@@ -1,7 +1,7 @@
 This file is jobs.def, from which is created jobs.c.
 It implements the builtins "jobs" and "disown" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,14 +25,19 @@ $BUILTIN jobs
 $FUNCTION jobs_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC jobs [-lnprs] [jobspec ...] or jobs -x command [args]
-Lists the active jobs.  The -l option lists process id's in addition
-to the normal information; the -p option lists process id's only.
-If -n is given, only processes that have changed status since the last
-notification are printed.  JOBSPEC restricts output to that job.  The
--r and -s options restrict output to running and stopped jobs only,
-respectively.  Without options, the status of all active jobs is
-printed.  If -x is given, COMMAND is run after all job specifications
-that appear in ARGS have been replaced with the process ID of that job's
+Lists the active jobs.  JOBSPEC restricts output to that job.
+Without options, the status of all active jobs is displayed.
+
+Options:
+  -l   lists process IDs in addition to the normal information
+  -n   list only processes that have changed status since the last
+       notification
+  -p   lists process IDs only
+  -r   restrict output to running jobs
+  -s   restrict output to stopped jobs
+
+If -x is supplied, COMMAND is run after all job specifications that
+appear in ARGS have been replaced with the process ID of that job's
 process group leader.
 $END
 
@@ -203,11 +208,14 @@ $BUILTIN disown
 $FUNCTION disown_builtin
 $DEPENDS_ON JOB_CONTROL
 $SHORT_DOC disown [-h] [-ar] [jobspec ...]
-By default, removes each JOBSPEC argument from the table of active jobs.
-If the -h option is given, the job is not removed from the table, but is
-marked so that SIGHUP is not sent to the job if the shell receives a
-SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all
-jobs from the job table; the -r option means to remove only running jobs.
+Removes each JOBSPEC argument from the table of active jobs.  Without
+any JOBSPECs, the shell uses its notion of the current job.
+
+Options:
+  -a   remove all jobs if JOBSPEC is not supplied
+  -h   mark each JOBSPEC so that SIGHUP is not sent to the job if the
+       shell receives a SIGHUP
+  -r   remove only running jobs
 $END
 
 #if defined (JOB_CONTROL)
@@ -261,7 +269,7 @@ disown_builtin (list)
 
       if (job == NO_JOB || jobs == 0 || INVALID_JOB (job))
        {
-         sh_badjob (list ? list->word->word : "current");
+         sh_badjob (list ? list->word->word : _("current"));
          retval = EXECUTION_FAILURE;
        }
       else if (nohup_only)
index bedbb1a6d5149c16af808eb252818be1ce52cde6..fab90ad413d03836e5e8fdac9cb16fd382ad77a8 100644 (file)
@@ -1,7 +1,7 @@
 This file is kill.def, from which is created kill.c.
 It implements the builtin "kill" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,13 +24,19 @@ $PRODUCES kill.c
 $BUILTIN kill
 $FUNCTION kill_builtin
 $SHORT_DOC kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
-Send the processes named by PID (or JOBSPEC) the signal SIGSPEC.  If
-SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'
-lists the signal names; if arguments follow `-l' they are assumed to
-be signal numbers for which names should be listed.  Kill is a shell
-builtin for two reasons: it allows job IDs to be used instead of
-process IDs, and, if you have reached the limit on processes that
-you can create, you don't have to start a process to kill another one.
+Send the processes identified by PID or JOBSPEC the signal named by
+SIGSPEC or SIGNUM.  If neither SIGSPEC nor SIGNUM is present, then
+SIGTERM is assumed.
+
+Options:
+  -s sig       SIG is a signal name
+  -n sig       SIG is a signal number
+  -l   list the signal names; if arguments follow `-l' they are
+       assumed to be signal numbers for which names should be listed
+
+Kill is a shell builtin for two reasons: it allows job IDs to be used
+instead of process IDs, and allows processes to be killed if the limit
+on processes that you can create is reached.
 $END
 
 #include <config.h>
diff --git a/builtins/kill.def~ b/builtins/kill.def~
new file mode 100644 (file)
index 0000000..3310875
--- /dev/null
@@ -0,0 +1,258 @@
+This file is kill.def, from which is created kill.c.
+It implements the builtin "kill" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES kill.c
+
+$BUILTIN kill
+$FUNCTION kill_builtin
+$SHORT_DOC kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
+Send the processes identified by PID or JOBSPEC the signal named by
+SIGSPEC or SIGNUM.  If neither SIGSPEC nor SIGNUM is present, then
+SIGTERM is assumed.
+
+Options:
+  -s sig       SIG is a signal name
+  -n sig       SIG is a signal number
+  -l   list the signal names; if arguments follow `-l' they are assumed
+       to be signal numbers for which names should be listed
+
+Kill is a shell builtin for two reasons: it allows job IDs to be used
+instead of process IDs, and allows processes to be killed if the limit
+on processes that you can create is reached.
+$END
+
+#include <config.h>
+
+#include <stdio.h>
+#include <errno.h>
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../trap.h"
+#include "../jobs.h"
+#include "common.h"
+
+/* Not all systems declare ERRNO in errno.h... and some systems #define it! */
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+extern int posixly_correct;
+
+static void kill_error __P((pid_t, int));
+
+#if !defined (CONTINUE_AFTER_KILL_ERROR)
+#  define CONTINUE_OR_FAIL return (EXECUTION_FAILURE)
+#else
+#  define CONTINUE_OR_FAIL goto continue_killing
+#endif /* CONTINUE_AFTER_KILL_ERROR */
+
+/* Here is the kill builtin.  We only have it so that people can type
+   kill -KILL %1?  No, if you fill up the process table this way you
+   can still kill some. */
+int
+kill_builtin (list)
+     WORD_LIST *list;
+{
+  int sig, any_succeeded, listing, saw_signal, dflags;
+  char *sigspec, *word;
+  pid_t pid;
+  intmax_t pid_value;
+
+  if (list == 0)
+    {
+      builtin_usage ();
+      return (EXECUTION_FAILURE);
+    }
+
+  any_succeeded = listing = saw_signal = 0;
+  sig = SIGTERM;
+  sigspec = "TERM";
+
+  dflags = DSIG_NOCASE | ((posixly_correct == 0) ? DSIG_SIGPREFIX : 0);
+  /* Process options. */
+  while (list)
+    {
+      word = list->word->word;
+
+      if (ISOPTION (word, 'l'))
+       {
+         listing++;
+         list = list->next;
+       }
+      else if (ISOPTION (word, 's') || ISOPTION (word, 'n'))
+       {
+         list = list->next;
+         if (list)
+           {
+             sigspec = list->word->word;
+             if (sigspec[0] == '0' && sigspec[1] == '\0')
+               sig = 0;
+             else
+               sig = decode_signal (sigspec, dflags);
+             list = list->next;
+           }
+         else
+           {
+             sh_needarg (word);
+             return (EXECUTION_FAILURE);
+           }
+       }
+      else if (ISOPTION (word, '-'))
+       {
+         list = list->next;
+         break;
+       }
+      else if (ISOPTION (word, '?'))
+       {
+         builtin_usage ();
+         return (EXECUTION_SUCCESS);
+       }
+      /* If this is a signal specification then process it.  We only process
+        the first one seen; other arguments may signify process groups (e.g,
+        -num == process group num). */
+      else if ((*word == '-') && !saw_signal)
+       {
+         sigspec = word + 1;
+         sig = decode_signal (sigspec, dflags);
+         saw_signal++;
+         list = list->next;
+       }
+      else
+       break;
+    }
+
+  if (listing)
+    return (display_signal_list (list, 0));
+
+  /* OK, we are killing processes. */
+  if (sig == NO_SIG)
+    {
+      sh_invalidsig (sigspec);
+      return (EXECUTION_FAILURE);
+    }
+
+  if (list == 0)
+    {
+      builtin_usage ();
+      return (EXECUTION_FAILURE);
+    }
+
+  while (list)
+    {
+      word = list->word->word;
+
+      if (*word == '-')
+       word++;
+
+      /* Use the entire argument in case of minus sign presence. */
+      if (*word && legal_number (list->word->word, &pid_value) && (pid_value == (pid_t)pid_value))
+       {
+         pid = (pid_t) pid_value;
+
+         if (kill_pid (pid, sig, pid < -1) < 0)
+           {
+             if (errno == EINVAL)
+               sh_invalidsig (sigspec);
+             else
+               kill_error (pid, errno);
+             CONTINUE_OR_FAIL;
+           }
+         else
+           any_succeeded++;
+       }
+#if defined (JOB_CONTROL)
+      else if (*list->word->word && *list->word->word != '%')
+       {
+         builtin_error (_("%s: arguments must be process or job IDs"), list->word->word);
+         CONTINUE_OR_FAIL;
+       }
+      else if (*word)
+       /* Posix.2 says you can kill without job control active (4.32.4) */
+       {                       /* Must be a job spec.  Check it out. */
+         int job;
+         sigset_t set, oset;
+         JOB *j;
+
+         BLOCK_CHILD (set, oset);
+         job = get_job_spec (list);
+
+         if (INVALID_JOB (job))
+           {
+             if (job != DUP_JOB)
+               sh_badjob (list->word->word);
+             UNBLOCK_CHILD (oset);
+             CONTINUE_OR_FAIL;
+           }
+
+         j = get_job_by_jid (job);
+         /* Job spec used.  Kill the process group. If the job was started
+            without job control, then its pgrp == shell_pgrp, so we have
+            to be careful.  We take the pid of the first job in the pipeline
+            in that case. */
+         pid = IS_JOBCONTROL (job) ? j->pgrp : j->pipe->pid;
+
+         UNBLOCK_CHILD (oset);
+
+         if (kill_pid (pid, sig, 1) < 0)
+           {
+             if (errno == EINVAL)
+               sh_invalidsig (sigspec);
+             else
+               kill_error (pid, errno);
+             CONTINUE_OR_FAIL;
+           }
+         else
+           any_succeeded++;
+       }
+#endif /* !JOB_CONTROL */
+      else
+       {
+         sh_badpid (list->word->word);
+         CONTINUE_OR_FAIL;
+       }
+    continue_killing:
+      list = list->next;
+    }
+
+  return (any_succeeded ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+}
+
+static void
+kill_error (pid, e)
+     pid_t pid;
+     int e;
+{
+  char *x;
+
+  x = strerror (e);
+  if (x == 0)
+    x = _("Unknown error");
+  builtin_error ("(%ld) - %s", (long)pid, x);
+}
index ab43a45421c26ca702a42179fba2f776828fdbf4..f354b5a6cc59c77e70d83df1764d8ae49481c10b 100644 (file)
@@ -1,7 +1,7 @@
 This file is let.def, from which is created let.c.
 It implements the builtin "let" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,11 +23,11 @@ $BUILTIN let
 $FUNCTION let_builtin
 $PRODUCES let.c
 $SHORT_DOC let arg [arg ...]
-Each ARG is an arithmetic expression to be evaluated.  Evaluation
-is done in fixed-width integers with no check for overflow, though
-division by 0 is trapped and flagged as an error.  The following
-list of operators is grouped into levels of equal-precedence operators.
-The levels are listed in order of decreasing precedence.
+Evaluates ach ARG as an arithmetic expression.  Evaluation is done in
+fixed-width integers with no check for overflow, though division by 0
+is trapped and flagged as an error.  The following list of operators is
+grouped into levels of equal-precedence operators.  The levels are listed
+in order of decreasing precedence.
 
        id++, id--      variable post-increment, post-decrement
        ++id, --id      variable pre-increment, pre-decrement
diff --git a/builtins/let.def~ b/builtins/let.def~
new file mode 100644 (file)
index 0000000..ab43a45
--- /dev/null
@@ -0,0 +1,128 @@
+This file is let.def, from which is created let.c.
+It implements the builtin "let" in Bash.
+
+Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$BUILTIN let
+$FUNCTION let_builtin
+$PRODUCES let.c
+$SHORT_DOC let arg [arg ...]
+Each ARG is an arithmetic expression to be evaluated.  Evaluation
+is done in fixed-width integers with no check for overflow, though
+division by 0 is trapped and flagged as an error.  The following
+list of operators is grouped into levels of equal-precedence operators.
+The levels are listed in order of decreasing precedence.
+
+       id++, id--      variable post-increment, post-decrement
+       ++id, --id      variable pre-increment, pre-decrement
+       -, +            unary minus, plus
+       !, ~            logical and bitwise negation
+       **              exponentiation
+       *, /, %         multiplication, division, remainder
+       +, -            addition, subtraction
+       <<, >>          left and right bitwise shifts
+       <=, >=, <, >    comparison
+       ==, !=          equality, inequality
+       &               bitwise AND
+       ^               bitwise XOR
+       |               bitwise OR
+       &&              logical AND
+       ||              logical OR
+       expr ? expr : expr
+                       conditional operator
+       =, *=, /=, %=,
+       +=, -=, <<=, >>=,
+       &=, ^=, |=      assignment
+
+Shell variables are allowed as operands.  The name of the variable
+is replaced by its value (coerced to a fixed-width integer) within
+an expression.  The variable need not have its integer attribute
+turned on to be used in an expression.
+
+Operators are evaluated in order of precedence.  Sub-expressions in
+parentheses are evaluated first and may override the precedence
+rules above.
+
+If the last ARG evaluates to 0, let returns 1; 0 is returned
+otherwise.
+$END
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "common.h"
+
+/* Arithmetic LET function. */
+int
+let_builtin (list)
+     WORD_LIST *list;
+{
+  intmax_t ret;
+  int expok;
+
+  /* Skip over leading `--' argument. */
+  if (list && list->word && ISOPTION (list->word->word, '-'))
+    list = list->next;
+
+  if (list == 0)
+    {
+      builtin_error (_("expression expected"));
+      return (EXECUTION_FAILURE);
+    }
+
+  for (; list; list = list->next)
+    {
+      ret = evalexp (list->word->word, &expok);
+      if (expok == 0)
+       return (EXECUTION_FAILURE);
+    }
+
+  return ((ret == 0) ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+
+#ifdef INCLUDE_UNUSED
+int
+exp_builtin (list)
+     WORD_LIST *list;
+{
+  char *exp;
+  intmax_t ret;
+  int expok;
+
+  if (list == 0)
+    {
+      builtin_error (_("expression expected"));
+      return (EXECUTION_FAILURE);
+    }
+
+  exp = string_list (list);
+  ret = evalexp (exp, &expok);
+  (void)free (exp);
+  return (((ret == 0) || (expok == 0)) ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+#endif
index 352f232b2ad23e2521826d6f1f329d4706ac7667..0a42ba61fbe627740cff25061715fed933a37fc4 100644 (file)
@@ -1,7 +1,7 @@
 This file is printf.def, from which is created printf.c.
 It implements the builtin "printf" in Bash.
 
-Copyright (C) 1997-2007 Free Software Foundation, Inc.
+Copyright (C) 1997-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,16 +24,23 @@ $PRODUCES printf.c
 $BUILTIN printf
 $FUNCTION printf_builtin
 $SHORT_DOC printf [-v var] format [arguments]
-printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT
-is a character string which contains three types of objects: plain
+Formats and prints ARGUMENTS under control of the FORMAT.
+
+Options:
+  -v var       assign the output to shell variable VAR rather than
+               display it on the standard output
+
+FORMAT is a character string which contains three types of objects: plain
 characters, which are simply copied to standard output; character escape
 sequences, which are converted and copied to the standard output; and
 format specifications, each of which causes printing of the next successive
-argument.  In addition to the standard printf(1) formats, %b means to
-expand backslash escape sequences in the corresponding argument, and %q
-means to quote the argument in a way that can be reused as shell input.
-If the -v option is supplied, the output is placed into the value of the
-shell variable VAR rather than being sent to the standard output.
+argument.
+
+In addition to the standard format specifications described in printf(1)
+and printf(3), printf interprets:
+
+  %b   expand backslash escape sequences in the corresponding argument
+  %q   quote the argument in a way that can be reused as shell input
 $END
 
 #include <config.h>
index 18c22beb53986ef1fec260019dbafcd492701b9e..e26e9796098c6515af51686ba52fa25fafe0ed70 100644 (file)
@@ -1,7 +1,7 @@
 This file is printf.def, from which is created printf.c.
 It implements the builtin "printf" in Bash.
 
-Copyright (C) 1997-2007 Free Software Foundation, Inc.
+Copyright (C) 1997-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,16 +24,23 @@ $PRODUCES printf.c
 $BUILTIN printf
 $FUNCTION printf_builtin
 $SHORT_DOC printf [-v var] format [arguments]
-printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT
-is a character string which contains three types of objects: plain
+Formats and prints ARGUMENTS under control of the FORMAT.
+
+Options:
+  -v var       assign the output to shell variable VAR rather than
+               display it on the standard output
+
+FORMAT is a character string which contains three types of objects: plain
 characters, which are simply copied to standard output; character escape
 sequences, which are converted and copied to the standard output; and
 format specifications, each of which causes printing of the next successive
-argument.  In addition to the standard printf(1) formats, %b means to
-expand backslash escape sequences in the corresponding argument, and %q
-means to quote the argument in a way that can be reused as shell input.
-If the -v option is supplied, the output is placed into the value of the
-shell variable VAR rather than being sent to the standard output.
+argument.
+
+In addition to the standard format specifications described in printf(1)
+and printf(3), print interprets:
+
+  %b   expand backslash escape sequences in the corresponding argument
+  %q   quote the argument in a way that can be reused as shell input
 $END
 
 #include <config.h>
@@ -1031,18 +1038,15 @@ asciicode ()
 
 #if defined (HANDLE_MULTIBYTE)
   slen = strlen (garglist->word->word+1);
-  mblength = mbrlen (garglist->word->word+1, slen, NULL);
-#if 0
+  mblength = MBLEN (garglist->word->word+1, slen);
   if (mblength > 1)
-#else
-  if (1)
     {
-      mblength = mbrtowc (&wc, garglist->word->word+1, slen, NULL);
+      mblength = mbtowc (&wc, garglist->word->word+1, slen);
       ch = wc;         /* XXX */
     }
   else
 #endif
-    ch = garglist->word->word[1];
+    ch = (unsigned char)garglist->word->word[1];
 
   garglist = garglist->next;
   return (ch);
index c69e11b2a8243f186eed479ef4c9af686fe1cae1..dd527afbbcb96702165edb35cc8d930f72b4131b 100644 (file)
@@ -1,7 +1,7 @@
 This file is pushd.def, from which is created pushd.c.  It implements the
 builtins "pushd", "popd", and "dirs" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -29,43 +29,46 @@ Adds a directory to the top of the directory stack, or rotates
 the stack, making the new top of the stack the current working
 directory.  With no arguments, exchanges the top two directories.
 
--n     Suppresses the normal change of directory when adding directories
-       to the stack, so only the stack is manipulated.
+Options:
+  -n   Suppresses the normal change of directory when adding
+       directorie to the stack, so only the stack is manipulated.
 
-+N     Rotates the stack so that the Nth directory (counting
+Arguments:
+  +N   Rotates the stack so that the Nth directory (counting
        from the left of the list shown by `dirs', starting with
        zero) is at the top.
 
--N     Rotates the stack so that the Nth directory (counting
+  -N   Rotates the stack so that the Nth directory (counting
        from the right of the list shown by `dirs', starting with
        zero) is at the top.
 
-dir    Adds DIR to the directory stack at the top, making it the
+  dir  Adds DIR to the directory stack at the top, making it the
        new current working directory.
 
-You can see the directory stack with the `dirs' command.
+The `dirs' builtin displays the directory stack.
 $END
 
 $BUILTIN popd
 $FUNCTION popd_builtin
 $DEPENDS_ON PUSHD_AND_POPD
 $SHORT_DOC popd [-n] [+N | -N]
-Removes entries from the directory stack.  With no arguments,
-removes the top directory from the stack, and cd's to the new
-top directory.
+Removes entries from the directory stack.  With no arguments, removes
+the top directory from the stack, and changes to the new top directory.
 
--n     Suppresses the normal change of directory when removing directories
-       from the stack, so only the stack is manipulated.
+Options:
+  -n   Suppresses the normal change of directory when removing
+       directories from the stack, so only the stack is manipulated.
 
-+N     Removes the Nth entry counting from the left of the list
+Arguments:
+  +N   Removes the Nth entry counting from the left of the list
        shown by `dirs', starting with zero.  For example: `popd +0'
        removes the first directory, `popd +1' the second.
 
--N     Removes the Nth entry counting from the right of the list
+  -N   Removes the Nth entry counting from the right of the list
        shown by `dirs', starting with zero.  For example: `popd -0'
        removes the last directory, `popd -1' the next to last.
 
-You can see the directory stack with the `dirs' command.
+The `dirs' builtin displays the directory stack.
 $END
 
 $BUILTIN dirs
@@ -76,18 +79,19 @@ Display the list of currently remembered directories.  Directories
 find their way onto the list with the `pushd' command; you can get
 back up through the list with the `popd' command.
 
-The -c flag clears the directory stack by deleting all of the elements.
-The -l flag specifies that `dirs' should not print shorthand versions
-of directories which are relative to your home directory.  This means
-that `~/bin' might be displayed as `/homes/bfox/bin'.  The -p flag
-causes `dirs' to print the directory stack with one entry per line.
-The -v flag does the same thing, prefixing each directory name with its
-position in the stack.
+Options:
+  -c   clear the directory stack by deleting all of the elements
+  -l   do not print tilde-prefixed versions of directories relative
+       to your home directory
+  -p   print the directory stack with one entry per line
+  -v   print the directory stack with one entry per line prefixed
+       with its position in the stack
 
-+N     Displays the Nth entry counting from the left of the list shown by
+Arguments:
+  +N   Displays the Nth entry counting from the left of the list shown by
        dirs when invoked without options, starting with zero.
 
--N     Displays the Nth entry counting from the right of the list shown by
+  -N   Displays the Nth entry counting from the right of the list shown by
        dirs when invoked without options, starting with zero.
 $END
 
index 4a7c284b11d8b85bafe688a8d7a586c71a60dfc1..f8599c05c618c6df18f71d370f352b34b91fb021 100644 (file)
@@ -1,7 +1,7 @@
 This file is pushd.def, from which is created pushd.c.  It implements the
 builtins "pushd", "popd", and "dirs" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -29,43 +29,50 @@ Adds a directory to the top of the directory stack, or rotates
 the stack, making the new top of the stack the current working
 directory.  With no arguments, exchanges the top two directories.
 
--n     Suppresses the normal change of directory when adding directories
-       to the stack, so only the stack is manipulated.
+Options:
 
-+N     Rotates the stack so that the Nth directory (counting
+  -n   Suppresses the normal change of directory when adding
+       directorie to the stack, so only the stack is manipulated.
+
+Arguments:
+
+  +N   Rotates the stack so that the Nth directory (counting
        from the left of the list shown by `dirs', starting with
        zero) is at the top.
 
--N     Rotates the stack so that the Nth directory (counting
+  -N   Rotates the stack so that the Nth directory (counting
        from the right of the list shown by `dirs', starting with
        zero) is at the top.
 
-dir    Adds DIR to the directory stack at the top, making it the
+  dir  Adds DIR to the directory stack at the top, making it the
        new current working directory.
 
-You can see the directory stack with the `dirs' command.
+The `dirs' builtin displays the directory stack.
 $END
 
 $BUILTIN popd
 $FUNCTION popd_builtin
 $DEPENDS_ON PUSHD_AND_POPD
 $SHORT_DOC popd [-n] [+N | -N]
-Removes entries from the directory stack.  With no arguments,
-removes the top directory from the stack, and cd's to the new
-top directory.
+Removes entries from the directory stack.  With no arguments, removes
+the top directory from the stack, and changes to the new top directory.
+
+Options:
 
--n     Suppresses the normal change of directory when removing directories
-       from the stack, so only the stack is manipulated.
+  -n   Suppresses the normal change of directory when removing
+       directories from the stack, so only the stack is manipulated.
 
-+N     Removes the Nth entry counting from the left of the list
+Arguments:
+
+  +N   Removes the Nth entry counting from the left of the list
        shown by `dirs', starting with zero.  For example: `popd +0'
        removes the first directory, `popd +1' the second.
 
--N     Removes the Nth entry counting from the right of the list
+  -N   Removes the Nth entry counting from the right of the list
        shown by `dirs', starting with zero.  For example: `popd -0'
        removes the last directory, `popd -1' the next to last.
 
-You can see the directory stack with the `dirs' command.
+The `dirs' builtin displays the directory stack.
 $END
 
 $BUILTIN dirs
@@ -76,18 +83,21 @@ Display the list of currently remembered directories.  Directories
 find their way onto the list with the `pushd' command; you can get
 back up through the list with the `popd' command.
 
-The -c flag clears the directory stack by deleting all of the elements.
-The -l flag specifies that `dirs' should not print shorthand versions
-of directories which are relative to your home directory.  This means
-that `~/bin' might be displayed as `/homes/bfox/bin'.  The -p flag
-causes `dirs' to print the directory stack with one entry per line.
-The -v flag does the same thing, prefixing each directory name with its
-position in the stack.
+Options:
+
+  -c   clear the directory stack by deleting all of the elements
+  -l   do not print tilde-prefixed versions of directories relative
+       to your home directory
+  -p   print the directory stack with one entry per line
+  -v   print the directory stack with one entry per line prefixed
+       with its position in the stack
 
-+N     Displays the Nth entry counting from the left of the list shown by
+Arguments:
+
+  +N   Displays the Nth entry counting from the left of the list shown by
        dirs when invoked without options, starting with zero.
 
--N     Displays the Nth entry counting from the right of the list shown by
+  -N   Displays the Nth entry counting from the right of the list shown by
        dirs when invoked without options, starting with zero.
 $END
 
@@ -448,7 +458,7 @@ dirs_builtin (list)
       if (index_flag)
        {
          putchar ('\n');
-         return EXECUTION_SUCCESS;
+         return (sh_chkwrite (EXECUTION_SUCCESS));
        }
     }
 
@@ -473,8 +483,8 @@ dirs_builtin (list)
        printf ("%s%s", (vflag & 1) ? "\n" : " ", DIRSTACK_ENTRY (i));
 
   putchar ('\n');
-  fflush (stdout);
-  return (EXECUTION_SUCCESS);
+
+  return (sh_chkwrite (EXECUTION_SUCCESS));
 }
 
 static void
@@ -664,18 +674,18 @@ N_("Display the list of currently remembered directories.  Directories\n\
     find their way onto the list with the `pushd' command; you can get\n\
     back up through the list with the `popd' command.\n\
     \n\
+    The -c flag clears the directory stack by deleting all of the elements.\n\
     The -l flag specifies that `dirs' should not print shorthand versions\n\
     of directories which are relative to your home directory.  This means\n\
-    that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag\n\
-    causes `dirs' to print the directory stack with one entry per line,\n\
-    prepending the directory name with its position in the stack.  The -p\n\
-    flag does the same thing, but the stack position is not prepended.\n\
-    The -c flag clears the directory stack by deleting all of the elements.\n\
+    that `~/bin' might be displayed as `/homes/bfox/bin'.  The -p flag\n\
+    causes `dirs' to print the directory stack with one entry per line.\n\
+    The -v flag does the same thing, prefixing each directory name with its\n\
+    position in the stack.\n\
     \n\
-    +N  displays the Nth entry counting from the left of the list shown by\n\
+    +N  Displays the Nth entry counting from the left of the list shown by\n\
         dirs when invoked without options, starting with zero.\n\
     \n\
-    -N  displays the Nth entry counting from the right of the list shown by\n\
+    -N  Displays the Nth entry counting from the right of the list shown by\n\
         dirs when invoked without options, starting with zero."),
   (char *)NULL
 };
@@ -685,6 +695,9 @@ N_("Adds a directory to the top of the directory stack, or rotates\n\
     the stack, making the new top of the stack the current working\n\
     directory.  With no arguments, exchanges the top two directories.\n\
     \n\
+    -n  Suppresses the normal change of directory when adding directories\n\
+        to the stack, so only the stack is manipulated.\n\
+    \n\
     +N  Rotates the stack so that the Nth directory (counting\n\
         from the left of the list shown by `dirs', starting with\n\
         zero) is at the top.\n\
@@ -693,10 +706,7 @@ N_("Adds a directory to the top of the directory stack, or rotates\n\
         from the right of the list shown by `dirs', starting with\n\
         zero) is at the top.\n\
     \n\
-    -n  suppress the normal change of directory when adding directories\n\
-        to the stack, so only the stack is manipulated.\n\
-    \n\
-    dir adds DIR to the directory stack at the top, making it the\n\
+    dir Adds DIR to the directory stack at the top, making it the\n\
         new current working directory.\n\
     \n\
     You can see the directory stack with the `dirs' command."),
@@ -708,17 +718,17 @@ N_("Removes entries from the directory stack.  With no arguments,\n\
     removes the top directory from the stack, and cd's to the new\n\
     top directory.\n\
     \n\
-    +N  removes the Nth entry counting from the left of the list\n\
+    -n  Suppresses the normal change of directory when removing directories\n\
+        from the stack, so only the stack is manipulated.\n\
+    \n\
+    +N  Removes the Nth entry counting from the left of the list\n\
         shown by `dirs', starting with zero.  For example: `popd +0'\n\
         removes the first directory, `popd +1' the second.\n\
     \n\
-    -N  removes the Nth entry counting from the right of the list\n\
+    -N  Removes the Nth entry counting from the right of the list\n\
         shown by `dirs', starting with zero.  For example: `popd -0'\n\
         removes the last directory, `popd -1' the next to last.\n\
     \n\
-    -n  suppress the normal change of directory when removing directories\n\
-        from the stack, so only the stack is manipulated.\n\
-    \n\
     You can see the directory stack with the `dirs' command."),
   (char *)NULL
 };
index bdd290b9c865244702d179578fb83ad3927d22bf..a84533ce4a65617963fe9416dbb8b59f8371e6eb 100644 (file)
@@ -1,7 +1,7 @@
 This file is read.def, from which is created read.c.
 It implements the builtin "read" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,27 +24,34 @@ $PRODUCES read.c
 $BUILTIN read
 $FUNCTION read_builtin
 $SHORT_DOC read [-ers] [-a array] [-d delim] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
-One line is read from the standard input, or from file descriptor FD if the
--u option is supplied, and the first word is assigned to the first NAME,
-the second word to the second NAME, and so on, with leftover words assigned
-to the last NAME.  Only the characters found in $IFS are recognized as word
-delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY
-variable.  If the -r option is given, this signifies `raw' input, and
-backslash escaping is disabled.  The -d option causes read to continue
-until the first character of DELIM is read, rather than newline.  If the -p
-option is supplied, the string PROMPT is output without a trailing newline
-before attempting to read.  If -a is supplied, the words read are assigned
-to sequential indices of ARRAY, starting at zero.  If -e is supplied and
-the shell is interactive, readline is used to obtain the line.  If -n is
-supplied with a non-zero NCHARS argument, read returns after NCHARS
-characters have been read.  The -s option causes input coming from a
-terminal to not be echoed.
-
-The -t option causes read to time out and return failure if a complete line
-of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,
-its value is the default timeout.  The return code is zero, unless end-of-file
-is encountered, read times out, or an invalid file descriptor is supplied as
-the argument to -u.
+Reads a single line from the standard input, or from file descriptor FD
+if the -u option is supplied.  The line is split into fields as with word
+splitting, and the first word is assigned to the first NAME, the second
+word to the second NAME, and so on, with any leftover words assigned to
+the last NAME.  Only the characters found in $IFS are recognized as word
+delimiters.
+
+If no NAMEs are supplied, the line read is stored in the REPLY variable.
+
+Options:
+  -a array     assign the words read to sequential indices of the array
+               variable ARRAY, starting at zero
+  -d delim     continue until the first character of DELIM is read, rather
+               than newline
+  -e           use Readline to obtain the line in an interactive shell
+  -n nchars    return after reading NCHARS characters rather than waiting
+               for a newline
+  -p prompt    output the string PROMPT without a trailing newline before
+               attempting to read
+  -r           do not allow backslashes to escape any characters
+  -s           do not echo input coming from a terminal
+  -t timeout   time out and return failure if a complete line of input is
+               not read withint TIMEOUT seconds.  The value of the TMOUT
+               variable is the default timeout.
+  -u fd                read from file descriptor FD instead of the standard input
+
+The return code is zero, unless end-of-file is encountered, read times out,
+or an invalid file descriptor is supplied as the argument to -u.
 $END
 
 #include <config.h>
index f6582d369b9bf2b04b9eeeac2e2d96a204829885..1c2d89dab53eca9d039d8597b6d4552bf768e158 100644 (file)
@@ -1,7 +1,7 @@
 This file is read.def, from which is created read.c.
 It implements the builtin "read" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,27 +24,34 @@ $PRODUCES read.c
 $BUILTIN read
 $FUNCTION read_builtin
 $SHORT_DOC read [-ers] [-a array] [-d delim] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
-One line is read from the standard input, or from file descriptor FD if the
--u option is supplied, and the first word is assigned to the first NAME,
-the second word to the second NAME, and so on, with leftover words assigned
-to the last NAME.  Only the characters found in $IFS are recognized as word
-delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY
-variable.  If the -r option is given, this signifies `raw' input, and
-backslash escaping is disabled.  The -d option causes read to continue
-until the first character of DELIM is read, rather than newline.  If the -p
-option is supplied, the string PROMPT is output without a trailing newline
-before attempting to read.  If -a is supplied, the words read are assigned
-to sequential indices of ARRAY, starting at zero.  If -e is supplied and
-the shell is interactive, readline is used to obtain the line.  If -n is
-supplied with a non-zero NCHARS argument, read returns after NCHARS
-characters have been read.  The -s option causes input coming from a
-terminal to not be echoed.
-
-The -t option causes read to time out and return failure if a complete line
-of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,
-its value is the default timeout.  The return code is zero, unless end-of-file
-is encountered, read times out, or an invalid file descriptor is supplied as
-the argument to -u.
+Reads a single line from the standard input, or from file descriptor FD
+if the -u option is supplied.  The line is split into fields as with word
+splitting, and the first word is assigned to the first NAME, the second
+word to the second NAME, and so on, with any leftover words assigned to
+the last NAME.  Only the characters found in $IFS are recognized as word
+delimiters.
+
+If no NAMEs are supplied, the line read is stored in the REPLY variable.
+
+Options:
+  -a array     assign the words read to sequential indices of the array
+       variable ARRAY, starting at zero
+  -d delim     continue until the first character of DELIM is read, rather
+       than newline
+  -e   use Readline to obtain the line in an interactive shell
+  -n nchars    return after reading NCHARS characters rather than waiting
+       for a newline
+  -p prompt    output the string PROMPT without a trailing newline before
+       attempting to read
+  -r   do not allow backslashes to escape any characters
+  -s   do not echo input coming from a terminal
+  -t timeout   time out and return failure if a complete line of input is
+       not read withint TIMEOUT seconds.  The value of the TMOUT
+       variable is the default timeout.
+  -u fd        read from file descriptor FD instead of the standard input
+
+The return code is zero, unless end-of-file is encountered, read times out,
+or an invalid file descriptor is supplied as the argument to -u.
 $END
 
 #include <config.h>
@@ -340,7 +347,6 @@ read_builtin (list)
       code = setjmp (alrmbuf);
       if (code)
        {
-itrace("sigalrm: input_string = %s input_is_tty = %d", input_string, input_is_tty);
 #if 0
          run_unwind_frame ("read_builtin");
          return (EXECUTION_FAILURE);
index a7200dce0462359aa1b0df58d90c6812c1222b87..82be20c3ec7c37c178d0afe77910da7e126ef332 100644 (file)
@@ -60,9 +60,12 @@ $BUILTIN time
 $SHORT_DOC time [-p] pipeline
 Execute PIPELINE and print a summary of the real time, user CPU time,
 and system CPU time spent executing PIPELINE when it terminates.
-The return status is the return status of PIPELINE.  The `-p' option
-prints the timing summary in the portable Posix format; otherwise, the
-the value of the TIMEFORMAT variable is used as the output format.
+
+Options:
+  -p   print the timing summary in the portable Posix format
+
+The value of the TIMEFORMAT variable is used as the output format.  The
+return status is the return status of PIPELINE.
 $END
 
 $BUILTIN case
@@ -95,10 +98,11 @@ Expand and execute COMMANDS as long as the final command in the
 $END
 
 $BUILTIN function
-$SHORT_DOC function NAME { COMMANDS ; } or NAME () { COMMANDS ; }
-Create a simple command invoked by NAME which runs COMMANDS.
-Arguments on the command line along with NAME are passed to the
-function as $0 .. $n.
+$SHORT_DOC function name { COMMANDS ; } or name () { COMMANDS ; }
+Create a shell function named NAME.  When invoked as a simple command,
+NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,
+the arguments are passed to the function as $1...$n, and the function's
+name is in $FUNCNAME.
 $END
 
 $BUILTIN { ... }
@@ -130,16 +134,19 @@ $DOCNAME conditional
 $SHORT_DOC [[ expression ]]
 Returns a status of 0 or 1 depending on the evaluation of the conditional
 expression EXPRESSION.  Expressions are composed of the same primaries used
-by the `test' builtin, and may be combined using the following operators
+by the `test' builtin, and may be combined using the following operators:
+
+  ( EXPRESSION )       Returns the value of EXPRESSION
+  ! EXPRESSION         True if EXPRESSION is false; else false
+  EXPR1 && EXPR2       True if both EXPR1 and EXPR2 are true; else false
+  EXPR1 || EXPR2       True if either EXPR1 or EXPR2 is true; else false
 
-       ( EXPRESSION )  Returns the value of EXPRESSION
-       ! EXPRESSION    True if EXPRESSION is false; else false
-       EXPR1 && EXPR2  True if both EXPR1 and EXPR2 are true; else false
-       EXPR1 || EXPR2  True if either EXPR1 or EXPR2 is true; else false
+When the `==' and `!=' operators are used, the string to the right of
+the operator is used as a pattern and pattern matching is performed.
+When the `=~' operator is used, the string to the right of the operator
+is matched as a regular expression.
 
-When the `==' and `!=' operators are used, the string to the right of the
-operator is used as a pattern and pattern matching is performed.  The
-&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
+The && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
 determine the expression's value.
 $END
 
index 2ef303b3c19a599fc6f8a9cdbe935a9e0f252770..e03b98d446fad9950b075741773f1d919a25aa80 100644 (file)
@@ -2,7 +2,7 @@ This file is reserved.def, in which the shell reserved words are defined.
 It has no direct C file production, but defines builtins for the Bash
 builtin help command.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2007 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -21,7 +21,7 @@ with Bash; see the file COPYING.  If not, write to the Free Software
 Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
 
 $BUILTIN for
-$SHORT_DOC for NAME [in WORDS ... ;] do COMMANDS; done
+$SHORT_DOC for NAME [in WORDS ... ] ; do COMMANDS; done
 The `for' loop executes a sequence of commands for each member in a
 list of items.  If `in WORDS ...;' is not present, then `in "$@"' is
 assumed.  For each element in WORDS, NAME is set to that element, and
@@ -60,9 +60,12 @@ $BUILTIN time
 $SHORT_DOC time [-p] pipeline
 Execute PIPELINE and print a summary of the real time, user CPU time,
 and system CPU time spent executing PIPELINE when it terminates.
-The return status is the return status of PIPELINE.  The `-p' option
-prints the timing summary in the standard Posix format; otherwise, the
-the value of the TIMEFORMAT variable is used as the output format.
+
+Options:
+  -p   print the timing summary in the portable Posix format
+
+The value of the TIMEFORMAT variable is used as the output format.  The
+return status is the return status of PIPELINE.
 $END
 
 $BUILTIN case
@@ -95,10 +98,11 @@ Expand and execute COMMANDS as long as the final command in the
 $END
 
 $BUILTIN function
-$SHORT_DOC function NAME { COMMANDS ; } or NAME () { COMMANDS ; }
-Create a simple command invoked by NAME which runs COMMANDS.
-Arguments on the command line along with NAME are passed to the
-function as $0 .. $n.
+$SHORT_DOC function name { COMMANDS ; } or name () { COMMANDS ; }
+Create a shell function named NAME.  When invoked as a simple command,
+NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,
+the arguments are passed to the function as $1...$n, and the function's
+name is in $FUNCNAME.
 $END
 
 $BUILTIN { ... }
@@ -130,25 +134,28 @@ $DOCNAME conditional
 $SHORT_DOC [[ expression ]]
 Returns a status of 0 or 1 depending on the evaluation of the conditional
 expression EXPRESSION.  Expressions are composed of the same primaries used
-by the `test' builtin, and may be combined using the following operators
+by the `test' builtin, and may be combined using the following operators:
 
-       ( EXPRESSION )  Returns the value of EXPRESSION
-       ! EXPRESSION    True if EXPRESSION is false; else false
-       EXPR1 && EXPR2  True if both EXPR1 and EXPR2 are true; else false
-       EXPR1 || EXPR2  True if either EXPR1 or EXPR2 is true; else false
+  ( EXPRESSION )       Returns the value of EXPRESSION
+  ! EXPRESSION         True if EXPRESSION is false; else false
+  EXPR1 && EXPR2       True if both EXPR1 and EXPR2 are true; else false
+  EXPR1 || EXPR2       True if either EXPR1 or EXPR2 is true; else false
 
 When the `==' and `!=' operators are used, the string to the right of the
-operator is used as a pattern and pattern matching is performed.  The
-&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
+operator is used as a pattern and pattern matching is performed.  When
+the `=~' operator is used, the string to the right of the operator is
+matched as a regular expression.
+
+The && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
 determine the expression's value.
 $END
 
 $BUILTIN variables
 $DOCNAME variable_help
-$SHORT_DOC variables - Some variable names and meanings
+$SHORT_DOC variables - Names and meanings of some shell variables
 BASH_VERSION   Version information for this Bash.
 CDPATH A colon-separated list of directories to search
-               for directries given as arguments to `cd'.
+               for directories given as arguments to `cd'.
 GLOBIGNORE     A colon-separated list of patterns describing filenames to
                be ignored by pathname expansion.
 #if defined (HISTORY)
index 23389c07077d8b59bc874a718f298a999e06b45a..d945354df374b34c3e21727339a69aa208b763c4 100644 (file)
@@ -25,8 +25,9 @@ $BUILTIN return
 
 $FUNCTION return_builtin
 $SHORT_DOC return [n]
-Causes a function to exit with the return value specified by N.  If N
-is omitted, the return status is that of the last command.
+Causes a function or sourced script to exit with the return value
+specified by N.  If N is omitted, the return status is that of the
+last command executed within the function or script.
 $END
 
 #include <config.h>
diff --git a/builtins/return.def~ b/builtins/return.def~
new file mode 100644 (file)
index 0000000..23389c0
--- /dev/null
@@ -0,0 +1,66 @@
+This file is return.def, from which is created return.c.
+It implements the builtin "return" in Bash.
+
+Copyright (C) 1987-2003 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES return.c
+
+$BUILTIN return
+
+$FUNCTION return_builtin
+$SHORT_DOC return [n]
+Causes a function to exit with the return value specified by N.  If N
+is omitted, the return status is that of the last command.
+$END
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "common.h"
+
+extern int last_command_exit_value;
+extern int subshell_environment;
+extern int return_catch_flag, return_catch_value;
+
+/* If we are executing a user-defined function then exit with the value
+   specified as an argument.  if no argument is given, then the last
+   exit status is used. */
+int
+return_builtin (list)
+     WORD_LIST *list;
+{
+  return_catch_value = get_exitstat (list);
+
+  if (return_catch_flag)
+    longjmp (return_catch, 1);
+  else
+    {
+      builtin_error (_("can only `return' from a function or sourced script"));
+      return (EXECUTION_FAILURE);
+    }
+}
index 5c2d0e1d472257293e92f1ae6469a4d9d89ab88c..397598ef954b0bb3252d17883e745e1b3e8200ad 100644 (file)
@@ -1,7 +1,7 @@
 This file is set.def, from which is created set.c.
 It implements the "set" and "unset" builtins in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -61,83 +61,84 @@ extern int no_line_editing;
 $BUILTIN set
 $FUNCTION set_builtin
 $SHORT_DOC set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
-Change the value of shell attributes and positional parameters, or display
-the names and values of shell variables.  Available
-shell options are:
-    -a  Mark variables which are modified or created for export.
-    -b  Notify of job termination immediately.
-    -e  Exit immediately if a command exits with a non-zero status.
-    -f  Disable file name generation (globbing).
-    -h  Remember the location of commands as they are looked up.
-    -k  All assignment arguments are placed in the environment for a
-        command, not just those that precede the command name.
-    -m  Job control is enabled.
-    -n  Read commands but do not execute them.
-    -o option-name
-        Set the variable corresponding to option-name:
-            allexport    same as -a
-            braceexpand  same as -B
+Changes the value of shell attributes and positional parameters, or
+displays the names and values of shell variables.
+
+Options:
+  -a  Mark variables which are modified or created for export.
+  -b  Notify of job termination immediately.
+  -e  Exit immediately if a command exits with a non-zero status.
+  -f  Disable file name generation (globbing).
+  -h  Remember the location of commands as they are looked up.
+  -k  All assignment arguments are placed in the environment for a
+      command, not just those that precede the command name.
+  -m  Job control is enabled.
+  -n  Read commands but do not execute them.
+  -o option-name
+      Set the variable corresponding to option-name:
+          allexport    same as -a
+          braceexpand  same as -B
 #if defined (READLINE)
-            emacs        use an emacs-style line editing interface
+          emacs        use an emacs-style line editing interface
 #endif /* READLINE */
-            errexit      same as -e
-            errtrace     same as -E
-            functrace    same as -T
-            hashall      same as -h
+          errexit      same as -e
+          errtrace     same as -E
+          functrace    same as -T
+          hashall      same as -h
 #if defined (BANG_HISTORY)
-            histexpand   same as -H
+          histexpand   same as -H
 #endif /* BANG_HISTORY */
 #if defined (HISTORY)
-            history      enable command history
+          history      enable command history
 #endif
-            ignoreeof    the shell will not exit upon reading EOF
-            interactive-comments
-                         allow comments to appear in interactive commands
-            keyword      same as -k
-            monitor      same as -m
-            noclobber    same as -C
-            noexec       same as -n
-            noglob       same as -f
-            nolog        currently accepted but ignored
-            notify       same as -b
-            nounset      same as -u
-            onecmd       same as -t
-            physical     same as -P
-            pipefail     the return value of a pipeline is the status of
-                         the last command to exit with a non-zero status,
-                         or zero if no command exited with a non-zero status
-            posix        change the behavior of bash where the default
-                         operation differs from the 1003.2 standard to
-                         match the standard
-            privileged   same as -p
-            verbose      same as -v
+          ignoreeof    the shell will not exit upon reading EOF
+          interactive-comments
+                       allow comments to appear in interactive commands
+          keyword      same as -k
+          monitor      same as -m
+          noclobber    same as -C
+          noexec       same as -n
+          noglob       same as -f
+          nolog        currently accepted but ignored
+          notify       same as -b
+          nounset      same as -u
+          onecmd       same as -t
+          physical     same as -P
+          pipefail     the return value of a pipeline is the status of
+                       the last command to exit with a non-zero status,
+                       or zero if no command exited with a non-zero status
+          posix        change the behavior of bash where the default
+                       operation differs from the Posix standard to
+                       match the standard
+          privileged   same as -p
+          verbose      same as -v
 #if defined (READLINE)
-            vi           use a vi-style line editing interface
+          vi           use a vi-style line editing interface
 #endif /* READLINE */
-            xtrace       same as -x
-    -p  Turned on whenever the real and effective user ids do not match.
-        Disables processing of the $ENV file and importing of shell
-        functions.  Turning this option off causes the effective uid and
-        gid to be set to the real uid and gid.
-    -t  Exit after reading and executing one command.
-    -u  Treat unset variables as an error when substituting.
-    -v  Print shell input lines as they are read.
-    -x  Print commands and their arguments as they are executed.
+          xtrace       same as -x
+  -p  Turned on whenever the real and effective user ids do not match.
+      Disables processing of the $ENV file and importing of shell
+      functions.  Turning this option off causes the effective uid and
+      gid to be set to the real uid and gid.
+  -t  Exit after reading and executing one command.
+  -u  Treat unset variables as an error when substituting.
+  -v  Print shell input lines as they are read.
+  -x  Print commands and their arguments as they are executed.
 #if defined (BRACE_EXPANSION)
-    -B  the shell will perform brace expansion
+  -B  the shell will perform brace expansion
 #endif /* BRACE_EXPANSION */
-    -C  If set, disallow existing regular files to be overwritten
-        by redirection of output.
-    -E  If set, the ERR trap is inherited by shell functions.
+  -C  If set, disallow existing regular files to be overwritten
+      by redirection of output.
+  -E  If set, the ERR trap is inherited by shell functions.
 #if defined (BANG_HISTORY)
-    -H  Enable ! style history substitution.  This flag is on
-        by default when the shell is interactive.
+  -H  Enable ! style history substitution.  This flag is on
+      by default when the shell is interactive.
 #endif /* BANG_HISTORY */
-    -P  If set, do not follow symbolic links when executing commands
-        such as cd which change the current directory.
-    -T  If set, the DEBUG trap is inherited by shell functions.
-    -   Assign any remaining arguments to the positional parameters.
-        The -x and -v options are turned off.
+  -P  If set, do not follow symbolic links when executing commands
+      such as cd which change the current directory.
+  -T  If set, the DEBUG trap is inherited by shell functions.
+  -   Assign any remaining arguments to the positional parameters.
+      The -x and -v options are turned off.
 
 Using + rather than - causes these flags to be turned off.  The
 flags can also be used upon invocation of the shell.  The current
@@ -707,11 +708,16 @@ set_builtin (list)
 $BUILTIN unset
 $FUNCTION unset_builtin
 $SHORT_DOC unset [-f] [-v] [name ...]
-For each NAME, remove the corresponding variable or function.  Given
-the `-v', unset will only act on variables.  Given the `-f' flag,
-unset will only act on functions.  With neither flag, unset first
-tries to unset a variable, and if that fails, then tries to unset a
-function.  Some variables cannot be unset; also see readonly.
+For each NAME, remove the corresponding variable or function.
+
+Options:
+  -f   treat each NAME as a shell function
+  -v   treat each NAME as a shell variable
+
+Without options, unset first tries to unset a variable, and if that fails,
+tries to unset a function.
+
+Some variables cannot be unset; also see `readonly'.
 $END
 
 #define NEXT_VARIABLE()        any_failed++; list = list->next; continue;
index 45c0f7074f42b25c9f822435e461c10a8bf9c1a6..4ced73d9daa6d3e280e0043f731fe71e41ba7f96 100644 (file)
@@ -1,7 +1,7 @@
 This file is set.def, from which is created set.c.
 It implements the "set" and "unset" builtins in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -61,83 +61,84 @@ extern int no_line_editing;
 $BUILTIN set
 $FUNCTION set_builtin
 $SHORT_DOC set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
-Change the value of shell attributes and positional parameters, or display
-the names and values of shell variables.  Available
-shell options are:
-    -a  Mark variables which are modified or created for export.
-    -b  Notify of job termination immediately.
-    -e  Exit immediately if a command exits with a non-zero status.
-    -f  Disable file name generation (globbing).
-    -h  Remember the location of commands as they are looked up.
-    -k  All assignment arguments are placed in the environment for a
-        command, not just those that precede the command name.
-    -m  Job control is enabled.
-    -n  Read commands but do not execute them.
-    -o option-name
-        Set the variable corresponding to option-name:
-            allexport    same as -a
-            braceexpand  same as -B
+Changes the value of shell attributes and positional parameters, or
+displays the names and values of shell variables.
+
+Options:
+  -a  Mark variables which are modified or created for export.
+  -b  Notify of job termination immediately.
+  -e  Exit immediately if a command exits with a non-zero status.
+  -f  Disable file name generation (globbing).
+  -h  Remember the location of commands as they are looked up.
+  -k  All assignment arguments are placed in the environment for a
+      command, not just those that precede the command name.
+  -m  Job control is enabled.
+  -n  Read commands but do not execute them.
+  -o option-name
+      Set the variable corresponding to option-name:
+          allexport    same as -a
+          braceexpand  same as -B
 #if defined (READLINE)
-            emacs        use an emacs-style line editing interface
+          emacs        use an emacs-style line editing interface
 #endif /* READLINE */
-            errexit      same as -e
-            errtrace     same as -E
-            functrace    same as -T
-            hashall      same as -h
+          errexit      same as -e
+          errtrace     same as -E
+          functrace    same as -T
+          hashall      same as -h
 #if defined (BANG_HISTORY)
-            histexpand   same as -H
+          histexpand   same as -H
 #endif /* BANG_HISTORY */
 #if defined (HISTORY)
-            history      enable command history
+          history      enable command history
 #endif
-            ignoreeof    the shell will not exit upon reading EOF
-            interactive-comments
-                         allow comments to appear in interactive commands
-            keyword      same as -k
-            monitor      same as -m
-            noclobber    same as -C
-            noexec       same as -n
-            noglob       same as -f
-            nolog        currently accepted but ignored
-            notify       same as -b
-            nounset      same as -u
-            onecmd       same as -t
-            physical     same as -P
-            pipefail     the return value of a pipeline is the status of
-                         the last command to exit with a non-zero status,
-                         or zero if no command exited with a non-zero status
-            posix        change the behavior of bash where the default
-                         operation differs from the 1003.2 standard to
-                         match the standard
-            privileged   same as -p
-            verbose      same as -v
+          ignoreeof    the shell will not exit upon reading EOF
+          interactive-comments
+                       allow comments to appear in interactive commands
+          keyword      same as -k
+          monitor      same as -m
+          noclobber    same as -C
+          noexec       same as -n
+          noglob       same as -f
+          nolog        currently accepted but ignored
+          notify       same as -b
+          nounset      same as -u
+          onecmd       same as -t
+          physical     same as -P
+          pipefail     the return value of a pipeline is the status of
+                       the last command to exit with a non-zero status,
+                       or zero if no command exited with a non-zero status
+          posix        change the behavior of bash where the default
+                       operation differs from the 1003.2 standard to
+                       match the standard
+          privileged   same as -p
+          verbose      same as -v
 #if defined (READLINE)
-            vi           use a vi-style line editing interface
+          vi           use a vi-style line editing interface
 #endif /* READLINE */
-            xtrace       same as -x
-    -p  Turned on whenever the real and effective user ids do not match.
-        Disables processing of the $ENV file and importing of shell
-        functions.  Turning this option off causes the effective uid and
-        gid to be set to the real uid and gid.
-    -t  Exit after reading and executing one command.
-    -u  Treat unset variables as an error when substituting.
-    -v  Print shell input lines as they are read.
-    -x  Print commands and their arguments as they are executed.
+          xtrace       same as -x
+  -p  Turned on whenever the real and effective user ids do not match.
+      Disables processing of the $ENV file and importing of shell
+      functions.  Turning this option off causes the effective uid and
+      gid to be set to the real uid and gid.
+  -t  Exit after reading and executing one command.
+  -u  Treat unset variables as an error when substituting.
+  -v  Print shell input lines as they are read.
+  -x  Print commands and their arguments as they are executed.
 #if defined (BRACE_EXPANSION)
-    -B  the shell will perform brace expansion
+  -B  the shell will perform brace expansion
 #endif /* BRACE_EXPANSION */
-    -C  If set, disallow existing regular files to be overwritten
-        by redirection of output.
-    -E  If set, the ERR trap is inherited by shell functions.
+  -C  If set, disallow existing regular files to be overwritten
+      by redirection of output.
+  -E  If set, the ERR trap is inherited by shell functions.
 #if defined (BANG_HISTORY)
-    -H  Enable ! style history substitution.  This flag is on
-        by default when the shell is interactive.
+  -H  Enable ! style history substitution.  This flag is on
+      by default when the shell is interactive.
 #endif /* BANG_HISTORY */
-    -P  If set, do not follow symbolic links when executing commands
-        such as cd which change the current directory.
-    -T  If set, the DEBUG trap is inherited by shell functions.
-    -   Assign any remaining arguments to the positional parameters.
-        The -x and -v options are turned off.
+  -P  If set, do not follow symbolic links when executing commands
+      such as cd which change the current directory.
+  -T  If set, the DEBUG trap is inherited by shell functions.
+  -   Assign any remaining arguments to the positional parameters.
+      The -x and -v options are turned off.
 
 Using + rather than - causes these flags to be turned off.  The
 flags can also be used upon invocation of the shell.  The current
@@ -170,7 +171,7 @@ static const char * const off = "off";
 /* A struct used to match long options for set -o to the corresponding
    option letter or internal variable.  The functions can be called to
    dynamically generate values. */
-struct {
+const struct {
   char *name;
   int letter;
   int *variable;
@@ -425,7 +426,7 @@ set_minus_o_option (on_or_off, option_name)
     }
 
   sh_invalidoptname (option_name);
-  return (EXECUTION_FAILURE);
+  return (EX_USAGE);
 }
 
 static void
@@ -580,17 +581,18 @@ int
 set_builtin (list)
      WORD_LIST *list;
 {
-  int on_or_off, flag_name, force_assignment, opts_changed;
+  int on_or_off, flag_name, force_assignment, opts_changed, rv, r;
   register char *arg;
   char s[3];
 
   if (list == 0)
     {
       print_all_shell_variables ();
-      return (EXECUTION_SUCCESS);
+      return (sh_chkwrite (EXECUTION_SUCCESS));
     }
 
   /* Check validity of flag arguments. */
+  rv = EXECUTION_SUCCESS;
   reset_internal_getopt ();
   while ((flag_name = internal_getopt (list, optflags)) != -1)
     {
@@ -653,6 +655,7 @@ set_builtin (list)
                  if (opt == 0)
                    {
                      list_minus_o_opts (-1, (on_or_off == '+'));
+                     rv = sh_chkwrite (rv);
                      continue;
                    }
 
@@ -667,10 +670,10 @@ set_builtin (list)
                  list = list->next; /* Skip over option name. */
 
                  opts_changed = 1;
-                 if (set_minus_o_option (on_or_off, option_name) != EXECUTION_SUCCESS)
+                 if ((r = set_minus_o_option (on_or_off, option_name)) != EXECUTION_SUCCESS)
                    {
                      set_shellopts ();
-                     return (EXECUTION_FAILURE);
+                     return (r);
                    }
                }
              else if (change_flag (flag_name, on_or_off) == FLAG_ERROR)
@@ -699,17 +702,22 @@ set_builtin (list)
   /* Set up new value of $SHELLOPTS */
   if (opts_changed)
     set_shellopts ();
-  return (EXECUTION_SUCCESS);
+  return (rv);
 }
 
 $BUILTIN unset
 $FUNCTION unset_builtin
 $SHORT_DOC unset [-f] [-v] [name ...]
-For each NAME, remove the corresponding variable or function.  Given
-the `-v', unset will only act on variables.  Given the `-f' flag,
-unset will only act on functions.  With neither flag, unset first
-tries to unset a variable, and if that fails, then tries to unset a
-function.  Some variables cannot be unset; also see readonly.
+For each NAME, remove the corresponding variable or function.
+
+Options:
+  -f   treat each NAME as a shell function
+  -v   treat each NAME as a shell variable
+
+Without options, unset first tries to unset a variable, and if that fails,
+tries to unset a function.
+
+Some variables cannot be unset; also see `readonly'.
 $END
 
 #define NEXT_VARIABLE()        any_failed++; list = list->next; continue;
index a44bfde84a6167393b18128d3f63e722c0969539..be3d104322f3b82bfbcf02601afdb254e5f17d02 100644 (file)
@@ -1,7 +1,7 @@
 This file is setattr.def, from which is created setattr.c.
 It implements the builtins "export" and "readonly", in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -53,13 +53,15 @@ extern int declare_builtin __P((WORD_LIST *));
 $BUILTIN export
 $FUNCTION export_builtin
 $SHORT_DOC export [-fn] [name[=value] ...] or export -p
-NAMEs are marked for automatic export to the environment of
-subsequently executed commands.  If the -f option is given,
-the NAMEs refer to functions.  If no NAMEs are given, or if `-p'
-is given, a list of all names that are exported in this shell is
-printed.  An argument of `-n' says to remove the export property
-from subsequent NAMEs.  An argument of `--' disables further option
-processing.
+Marks each NAME for automatic export to the environment of subsequently
+executed commands.  If VALUE is supplied, assign VALUE before exporting.
+
+Options:
+  -f   refer to shell functions
+  -n   remove the export property from each NAME
+  -p   display a list of all exported variables and functions
+
+An argument of `--' disables further option processing.
 $END
 
 /* For each variable name in LIST, make that variable appear in the
@@ -77,13 +79,16 @@ export_builtin (list)
 $BUILTIN readonly
 $FUNCTION readonly_builtin
 $SHORT_DOC readonly [-af] [name[=value] ...] or readonly -p
-The given NAMEs are marked readonly and the values of these NAMEs may
-not be changed by subsequent assignment.  If the -f option is given,
-then functions corresponding to the NAMEs are so marked.  If no
-arguments are given, or if `-p' is given, a list of all readonly names
-is printed.  The `-a' option means to treat each NAME as
-an array variable.  An argument of `--' disables further option
-processing.
+Mark each NAME as read-only; the values of these NAMEs may not be
+changed by subsequent assignment.  If VALUE is supplied, assign VALUE
+before marking as read-only.
+
+Options:
+  -a   refer to array variables
+  -f   refer to shell functions
+  -p   display a list of all readonly variables and functions
+
+An argument of `--' disables further option processing.
 $END
 
 /* For each variable name in LIST, make that variable readonly.  Given an
index 72bde0d1de1d376621f59d3e4ad96d9c4e8fe1b8..b577a5b36d3f0c141940ff74a7ea25a36d831bd0 100644 (file)
@@ -1,7 +1,7 @@
 This file is setattr.def, from which is created setattr.c.
 It implements the builtins "export" and "readonly", in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -53,13 +53,16 @@ extern int declare_builtin __P((WORD_LIST *));
 $BUILTIN export
 $FUNCTION export_builtin
 $SHORT_DOC export [-fn] [name[=value] ...] or export -p
-NAMEs are marked for automatic export to the environment of
-subsequently executed commands.  If the -f option is given,
-the NAMEs refer to functions.  If no NAMEs are given, or if `-p'
-is given, a list of all names that are exported in this shell is
-printed.  An argument of `-n' says to remove the export property
-from subsequent NAMEs.  An argument of `--' disables further option
-processing.
+Marks each NAME for automatic export to the environment of subsequently
+executed commands.  If VALUE is supplied, assign VALUE before exporting.
+
+Options:
+
+  -f   refer to shell functions
+  -n   remove the export property from each NAME
+  -p   display a list of all exported variables and functions
+
+An argument of `--' disables further option processing.
 $END
 
 /* For each variable name in LIST, make that variable appear in the
@@ -77,13 +80,17 @@ export_builtin (list)
 $BUILTIN readonly
 $FUNCTION readonly_builtin
 $SHORT_DOC readonly [-af] [name[=value] ...] or readonly -p
-The given NAMEs are marked readonly and the values of these NAMEs may
-not be changed by subsequent assignment.  If the -f option is given,
-then functions corresponding to the NAMEs are so marked.  If no
-arguments are given, or if `-p' is given, a list of all readonly names
-is printed.  The `-a' option means to treat each NAME as
-an array variable.  An argument of `--' disables further option
-processing.
+Mark each NAME as read-only; the values of these NAMEs may not be
+changed by subsequent assignment.  If VALUE is supplied, assign VALUE
+before marking as read-only.
+
+Options:
+
+  -a   refer to array variables
+  -f   refer to shell functions
+  -p   display a list of all readonly variables and functions
+
+An argument of `--' disables further option processing.
 $END
 
 /* For each variable name in LIST, make that variable readonly.  Given an
@@ -340,7 +347,7 @@ show_var_attributes (var, pattr, nodefs)
      reused as input to recreate the current state. */
   if (function_p (var) && nodefs == 0 && (pattr == 0 || posixly_correct == 0))
     {
-      printf ("%s\n", named_function_string (var->name, function_cell (var), FUNC_MULTILINE));
+      printf ("%s\n", named_function_string (var->name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL));
       nodefs++;
       if (pattr == 0 && i == 1 && flags[0] == 'f')
        return 0;               /* don't print `declare -f name' */
@@ -363,7 +370,7 @@ show_var_attributes (var, pattr, nodefs)
   if (nodefs || (function_p (var) && pattr != 0 && posixly_correct))
     printf ("%s\n", var->name);
   else if (function_p (var))
-    printf ("%s\n", named_function_string (var->name, function_cell (var), FUNC_MULTILINE));
+    printf ("%s\n", named_function_string (var->name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL));
   else if (invisible_p (var))
     printf ("%s\n", var->name);
   else
index e20b4d54202e7eee4ab6ed4e1d7f171a4235520a..5f600dd56e83fb75ba261d7c5e48c321e60f9b85 100644 (file)
@@ -1,7 +1,7 @@
 This file is shift.def, from which is created shift.c.
 It implements the builtin "shift" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -39,7 +39,7 @@ $PRODUCES shift.c
 $BUILTIN shift
 $FUNCTION shift_builtin
 $SHORT_DOC shift [n]
-The positional parameters from $N+1 ... are renamed to $1 ...  If N is
+Rename the positional parameters $N+1,$N+2 ... to $1,$2 ...  If N is
 not given, it is assumed to be 1.
 $END
 
diff --git a/builtins/shift.def~ b/builtins/shift.def~
new file mode 100644 (file)
index 0000000..158e060
--- /dev/null
@@ -0,0 +1,96 @@
+This file is shift.def, from which is created shift.c.
+It implements the builtin "shift" in Bash.
+
+Copyright (C) 1987-2003 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES shift.c
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "common.h"
+
+$BUILTIN shift
+$FUNCTION shift_builtin
+$SHORT_DOC shift [n]
+Rename the positional parameters $N+1 ... to $1 ...  If N is not
+given, it is assumed to be 1.
+$END
+
+int print_shift_error;
+
+/* Shift the arguments ``left''.  Shift DOLLAR_VARS down then take one
+   off of REST_OF_ARGS and place it into DOLLAR_VARS[9].  If LIST has
+   anything in it, it is a number which says where to start the
+   shifting.  Return > 0 if `times' > $#, otherwise 0. */
+int
+shift_builtin (list)
+     WORD_LIST *list;
+{
+  intmax_t times;
+  register int count;
+  WORD_LIST *temp;
+
+  times = get_numeric_arg (list, 0);
+
+  if (times == 0)
+    return (EXECUTION_SUCCESS);
+  else if (times < 0)
+    {
+      sh_erange (list ? list->word->word : NULL, _("shift count"));
+      return (EXECUTION_FAILURE);
+    }
+  else if (times > number_of_args ())
+    {
+      if (print_shift_error)
+       sh_erange (list ? list->word->word : NULL, _("shift count"));
+      return (EXECUTION_FAILURE);
+    }
+
+  while (times-- > 0)
+    {
+      if (dollar_vars[1])
+       free (dollar_vars[1]);
+
+      for (count = 1; count < 9; count++)
+       dollar_vars[count] = dollar_vars[count + 1];
+
+      if (rest_of_args)
+       {
+         temp = rest_of_args;
+         dollar_vars[9] = savestring (temp->word->word);
+         rest_of_args = rest_of_args->next;
+         temp->next = (WORD_LIST *)NULL;
+         dispose_words (temp);
+       }
+      else
+       dollar_vars[9] = (char *)NULL;
+    }
+  return (EXECUTION_SUCCESS);
+}
index 080a03f4090dc4a4b31c7360f80036da4452a3e3..f86764f855beaa79a8fdb5ffbda6b5dbd99b5f92 100644 (file)
@@ -1,7 +1,7 @@
 This file is shopt.def, from which is created shopt.c.
 It implements the Bash `shopt' builtin.
 
-Copyright (C) 1994-2006 Free Software Foundation, Inc.
+Copyright (C) 1994-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,14 +24,17 @@ $PRODUCES shopt.c
 $BUILTIN shopt
 $FUNCTION shopt_builtin
 $SHORT_DOC shopt [-pqsu] [-o] [optname ...]
-Toggle the values of variables controlling optional behavior.
-The -s flag means to enable (set) each OPTNAME; the -u flag
-unsets each OPTNAME.  The -q flag suppresses output; the exit
-status indicates whether each OPTNAME is set or unset.  The -o
-option restricts the OPTNAMEs to those defined for use with
-`set -o'.  With no options, or with the -p option, a list of all
-settable options is displayed, with an indication of whether or
-not each is set.
+Set and unset shell options.  Without any option arguments, list all
+shell options with an indication of whether or not each is set.
+
+Options:
+  -o   restrict OPTNAMEs to those defined for use with `set -o'
+  -p   print each shell option with an indication of its status
+  -q   suppress output
+  -s   enable (set) each OPTNAME
+  -u   disable (unset) each OPTNAME
+
+The exit status indicates whether or not each OPTNAME is set.
 $END
 
 #include <config.h>
index 0ee794d408d3c952cc2ab352c32db4cbe5b82364..390478d739e0a502513023610f81c39cdbc76a0a 100644 (file)
@@ -1,7 +1,7 @@
 This file is shopt.def, from which is created shopt.c.
 It implements the Bash `shopt' builtin.
 
-Copyright (C) 1994-2006 Free Software Foundation, Inc.
+Copyright (C) 1994-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,14 +24,18 @@ $PRODUCES shopt.c
 $BUILTIN shopt
 $FUNCTION shopt_builtin
 $SHORT_DOC shopt [-pqsu] [-o] [optname ...]
-Toggle the values of variables controlling optional behavior.
-The -s flag means to enable (set) each OPTNAME; the -u flag
-unsets each OPTNAME.  The -q flag suppresses output; the exit
-status indicates whether each OPTNAME is set or unset.  The -o
-option restricts the OPTNAMEs to those defined for use with
-`set -o'.  With no options, or with the -p option, a list of all
-settable options is displayed, with an indication of whether or
-not each is set.
+Set and unset shell options.  Without any option arguments, list all
+shell options with an indication of whether or not each is set.
+
+Options:
+
+  -o   restrict OPTNAMEs to those defined for use with `set -o'
+  -p   print each shell option with an indication of its status
+  -q   suppress output
+  -s   enable (set) each OPTNAME
+  -u   disable (unset) each OPTNAME
+
+The exit status indicates whether or not each OPTNAME is set.
 $END
 
 #include <config.h>
@@ -174,8 +178,8 @@ static struct {
   { (char *)0, (int *)0, (shopt_set_func_t *)NULL }
 };
 
-static char *on = "on";
-static char *off = "off";
+static const char * const on = "on";
+static const char * const off = "off";
 
 static int find_shopt __P((char *));
 static int toggle_shopts __P((int, WORD_LIST *, int));
@@ -352,7 +356,7 @@ list_shopts (list, flags)
          if ((flags & QFLAG) == 0)
            print_shopt (shopt_vars[i].name, val, flags);
        }
-      return (EXECUTION_SUCCESS);
+      return (sh_chkwrite (EXECUTION_SUCCESS));
     }
 
   for (l = list, rval = EXECUTION_SUCCESS; l; l = l->next)
@@ -371,7 +375,7 @@ list_shopts (list, flags)
        print_shopt (l->word->word, val, flags);
     }
 
-  return (rval);
+  return (sh_chkwrite (rval));
 }
 
 static int
@@ -386,7 +390,7 @@ list_some_shopts (mode, flags)
       if (((flags & QFLAG) == 0) && mode == val)
        print_shopt (shopt_vars[i].name, val, flags);
     }
-  return (EXECUTION_SUCCESS);
+  return (sh_chkwrite (EXECUTION_SUCCESS));
 }
 
 static int
@@ -401,7 +405,7 @@ list_shopt_o_options (list, flags)
     {
       if ((flags & QFLAG) == 0)
        list_minus_o_opts (-1, (flags & PFLAG));
-      return (EXECUTION_SUCCESS);
+      return (sh_chkwrite (EXECUTION_SUCCESS));
     }
 
   for (l = list, rval = EXECUTION_SUCCESS; l; l = l->next)
@@ -423,7 +427,7 @@ list_shopt_o_options (list, flags)
            printf (OPTFMT, l->word->word, val ? on : off);
        }
     }
-  return (rval);
+  return (sh_chkwrite (rval));
 }
 
 static int
@@ -432,7 +436,7 @@ list_some_o_options (mode, flags)
 {
   if ((flags & QFLAG) == 0)
     list_minus_o_opts (mode, (flags & PFLAG));
-  return (EXECUTION_SUCCESS);
+  return (sh_chkwrite (EXECUTION_SUCCESS));
 }
 
 static int
@@ -540,5 +544,5 @@ shopt_listopt (name, reusable)
     }
 
   print_shopt (name, *shopt_vars[i].value, reusable ? PFLAG : 0);
-  return (EXECUTION_SUCCESS);
+  return (sh_chkwrite (EXECUTION_SUCCESS));
 }
index 0a8eb0ffa2516cd91ca890be529def35b34cfc06..25d5626b61a8a56a053d1500159cdb0140d45c76 100644 (file)
@@ -1,7 +1,7 @@
 This file is source.def, from which is created source.c.
 It implements the builtins "." and  "source" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,19 +24,19 @@ $PRODUCES source.c
 $BUILTIN source
 $FUNCTION source_builtin
 $SHORT_DOC source filename [arguments]
-Read and execute commands from FILENAME and return.  The pathnames
-in $PATH are used to find the directory containing FILENAME.  If any
-ARGUMENTS are supplied, they become the positional parameters when
-FILENAME is executed.
+Read and execute commands from FILENAME in the current shell.  The
+entries in $PATH are used to find the directory containing FILENAME.
+If any ARGUMENTS are supplied, they become the positional parameters
+when FILENAME is executed.
 $END
 $BUILTIN .
 $DOCNAME dot
 $FUNCTION source_builtin
 $SHORT_DOC . filename [arguments]
-Read and execute commands from FILENAME and return.  The pathnames
-in $PATH are used to find the directory containing FILENAME.  If any
-ARGUMENTS are supplied, they become the positional parameters when
-FILENAME is executed.
+Read and execute commands from FILENAME in the current shell.  The
+entries in $PATH are used to find the directory containing FILENAME.
+If any ARGUMENTS are supplied, they become the positional parameters
+when FILENAME is executed.
 $END
 
 #include <config.h>
diff --git a/builtins/source.def~ b/builtins/source.def~
new file mode 100644 (file)
index 0000000..5a3615c
--- /dev/null
@@ -0,0 +1,171 @@
+This file is source.def, from which is created source.c.
+It implements the builtins "." and  "source" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES source.c
+
+$BUILTIN source
+$FUNCTION source_builtin
+$SHORT_DOC source filename [arguments]
+Read and execute commands from FILENAME in the current shell.  The entries
+in $PATH are used to find the directory containing FILENAME.  If any
+ARGUMENTS are supplied, they become the positional parameters when
+FILENAME is executed.
+$END
+$BUILTIN .
+$DOCNAME dot
+$FUNCTION source_builtin
+$SHORT_DOC . filename [arguments]
+Read and execute commands from FILENAME in the current shell.  The entries
+in $PATH are used to find the directory containing FILENAME.  If any
+ARGUMENTS are supplied, they become the positional parameters when
+FILENAME is executed.
+$END
+
+#include <config.h>
+
+#include "../bashtypes.h"
+#include "posixstat.h"
+#include "filecntl.h"
+#if ! defined(_MINIX) && defined (HAVE_SYS_FILE_H)
+#  include <sys/file.h>
+#endif
+#include <errno.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../flags.h"
+#include "../findcmd.h"
+#include "common.h"
+#include "bashgetopt.h"
+#include "../trap.h"
+
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+static void maybe_pop_dollar_vars __P((void));
+
+/* If non-zero, `.' uses $PATH to look up the script to be sourced. */
+int source_uses_path = 1;
+
+/* If non-zero, `.' looks in the current directory if the filename argument
+   is not found in the $PATH. */
+int source_searches_cwd = 1;
+
+/* If this . script is supplied arguments, we save the dollar vars and
+   replace them with the script arguments for the duration of the script's
+   execution.  If the script does not change the dollar vars, we restore
+   what we saved.  If the dollar vars are changed in the script, and we are
+   not executing a shell function, we leave the new values alone and free
+   the saved values. */
+static void
+maybe_pop_dollar_vars ()
+{
+  if (variable_context == 0 && (dollar_vars_changed () & ARGS_SETBLTIN))
+    dispose_saved_dollar_vars ();
+  else
+    pop_dollar_vars ();
+  if (debugging_mode)
+    pop_args ();       /* restore BASH_ARGC and BASH_ARGV */
+  set_dollar_vars_unchanged ();
+}
+
+/* Read and execute commands from the file passed as argument.  Guess what.
+   This cannot be done in a subshell, since things like variable assignments
+   take place in there.  So, I open the file, place it into a large string,
+   close the file, and then execute the string. */
+int
+source_builtin (list)
+     WORD_LIST *list;
+{
+  int result;
+  char *filename, *debug_trap;
+
+  if (no_options (list))
+    return (EX_USAGE);
+  list = loptend;
+
+  if (list == 0)
+    {
+      builtin_error (_("filename argument required"));
+      builtin_usage ();
+      return (EX_USAGE);
+    }
+
+#if defined (RESTRICTED_SHELL)
+  if (restricted && strchr (list->word->word, '/'))
+    {
+      sh_restricted (list->word->word);
+      return (EXECUTION_FAILURE);
+    }
+#endif
+
+  filename = (char *)NULL;
+  if (source_uses_path)
+    filename = find_path_file (list->word->word);
+  if (filename == 0)
+    {
+      if (source_searches_cwd == 0)
+       {
+         builtin_error (_("%s: file not found"), list->word->word);
+         return (EXECUTION_FAILURE);
+       }
+      else
+       filename = savestring (list->word->word);
+    }
+
+  begin_unwind_frame ("source");
+  add_unwind_protect ((Function *)xfree, filename);
+
+  if (list->next)
+    {
+      push_dollar_vars ();
+      add_unwind_protect ((Function *)maybe_pop_dollar_vars, (char *)NULL);
+      remember_args (list->next, 1);
+      if (debugging_mode)
+       push_args (list->next); /* Update BASH_ARGV and BASH_ARGC */
+    }
+  set_dollar_vars_unchanged ();
+
+  /* Don't inherit the DEBUG trap unless function_trace_mode (overloaded)
+     is set.  XXX - should sourced files inherit the RETURN trap?  Functions
+     don't. */
+  debug_trap = TRAP_STRING (DEBUG_TRAP);
+  if (debug_trap && function_trace_mode == 0)
+    {
+      debug_trap = savestring (debug_trap);
+      add_unwind_protect (xfree, debug_trap);
+      add_unwind_protect (set_debug_trap, debug_trap);
+      restore_default_signal (DEBUG_TRAP);
+    }
+
+  result = source_file (filename, (list && list->next));
+
+  run_unwind_frame ("source");
+
+  return (result);
+}
index ea86ae22ce02ba8e9eaa94de9569de093701a13d..deb44b3db5131cfb4eb6651db3acff93b014f9c9 100644 (file)
@@ -1,7 +1,7 @@
 This file is suspend.def, from which is created suspend.c.
 It implements the builtin "suspend" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,9 +25,10 @@ $BUILTIN suspend
 $DEPENDS_ON JOB_CONTROL
 $FUNCTION suspend_builtin
 $SHORT_DOC suspend [-f]
-Suspend the execution of this shell until it receives a SIGCONT
-signal.  The `-f' if specified says not to complain about this
-being a login shell if it is; just suspend anyway.
+Suspend the execution of this shell until it receives a SIGCONT signal.
+
+Options:
+  -f   force the suspend, even if the shell is a login shell
 $END
 
 #include <config.h>
diff --git a/builtins/suspend.def~ b/builtins/suspend.def~
new file mode 100644 (file)
index 0000000..a84a6e3
--- /dev/null
@@ -0,0 +1,123 @@
+This file is suspend.def, from which is created suspend.c.
+It implements the builtin "suspend" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES suspend.c
+
+$BUILTIN suspend
+$DEPENDS_ON JOB_CONTROL
+$FUNCTION suspend_builtin
+$SHORT_DOC suspend [-f]
+Suspend the execution of this shell until it receives a SIGCONT signal.
+
+Options:
+
+  -f   force the suspend, even if the shell is a login shell
+$END
+
+#include <config.h>
+
+#if defined (JOB_CONTROL)
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashtypes.h"
+#include <signal.h>
+#include "../bashintl.h"
+#include "../shell.h"
+#include "../jobs.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+static sighandler suspend_continue __P((int));
+
+static SigHandler *old_cont;
+#if 0
+static SigHandler *old_stop;
+#endif
+
+/* Continue handler. */
+static sighandler
+suspend_continue (sig)
+     int sig;
+{
+  set_signal_handler (SIGCONT, old_cont);
+#if 0
+  set_signal_handler (SIGSTOP, old_stop);
+#endif
+  SIGRETURN (0);
+}
+
+/* Suspending the shell.  If -f is the arg, then do the suspend
+   no matter what.  Otherwise, complain if a login shell. */
+int
+suspend_builtin (list)
+     WORD_LIST *list;
+{
+  int opt, force;
+
+  reset_internal_getopt ();
+  force = 0;
+  while ((opt = internal_getopt (list, "f")) != -1)
+    switch (opt)
+      {
+      case 'f':
+       force++;
+       break;
+      default:
+       builtin_usage ();
+       return (EX_USAGE);
+      }
+      
+  list = loptend;
+
+  if (job_control == 0)
+    {
+      sh_nojobs (_("cannot suspend"));
+      return (EXECUTION_FAILURE);
+    }
+
+  if (force == 0)  
+    {
+      no_args (list);
+
+      if (login_shell)
+       {
+         builtin_error (_("cannot suspend a login shell"));
+         return (EXECUTION_FAILURE);
+       }
+    }
+
+  /* XXX - should we put ourselves back into the original pgrp now?  If so,
+     call end_job_control() here and do the right thing in suspend_continue
+     (that is, call restart_job_control()). */
+  old_cont = (SigHandler *)set_signal_handler (SIGCONT, suspend_continue);
+#if 0
+  old_stop = (SigHandler *)set_signal_handler (SIGSTOP, SIG_DFL);
+#endif
+  killpg (shell_pgrp, SIGSTOP);
+  return (EXECUTION_SUCCESS);
+}
+
+#endif /* JOB_CONTROL */
index f74cb0aa4dcb9b5860f430229960bc3da52d1e74..2354e6eadb260cc39b3cbf45e03a579bff179947 100644 (file)
@@ -1,7 +1,7 @@
 This file is test.def, from which is created test.c.
 It implements the builtin "test" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -31,27 +31,27 @@ are string operators as well, and numeric comparison operators.
 
 File operators:
 
-    -a FILE        True if file exists.
-    -b FILE        True if file is block special.
-    -c FILE        True if file is character special.
-    -d FILE        True if file is a directory.
-    -e FILE        True if file exists.
-    -f FILE        True if file exists and is a regular file.
-    -g FILE        True if file is set-group-id.
-    -h FILE        True if file is a symbolic link.
-    -L FILE        True if file is a symbolic link.
-    -k FILE        True if file has its `sticky' bit set.
-    -p FILE        True if file is a named pipe.
-    -r FILE        True if file is readable by you.
-    -s FILE        True if file exists and is not empty.
-    -S FILE        True if file is a socket.
-    -t FD          True if FD is opened on a terminal.
-    -u FILE        True if the file is set-user-id.
-    -w FILE        True if the file is writable by you.
-    -x FILE        True if the file is executable by you.
-    -O FILE        True if the file is effectively owned by you.
-    -G FILE        True if the file is effectively owned by your group.
-    -N FILE        True if the file has been modified since it was last read.
+  -a FILE        True if file exists.
+  -b FILE        True if file is block special.
+  -c FILE        True if file is character special.
+  -d FILE        True if file is a directory.
+  -e FILE        True if file exists.
+  -f FILE        True if file exists and is a regular file.
+  -g FILE        True if file is set-group-id.
+  -h FILE        True if file is a symbolic link.
+  -L FILE        True if file is a symbolic link.
+  -k FILE        True if file has its `sticky' bit set.
+  -p FILE        True if file is a named pipe.
+  -r FILE        True if file is readable by you.
+  -s FILE        True if file exists and is not empty.
+  -S FILE        True if file is a socket.
+  -t FD          True if FD is opened on a terminal.
+  -u FILE        True if the file is set-user-id.
+  -w FILE        True if the file is writable by you.
+  -x FILE        True if the file is executable by you.
+  -O FILE        True if the file is effectively owned by you.
+  -G FILE        True if the file is effectively owned by your group.
+  -N FILE        True if the file has been modified since it was last read.
 
   FILE1 -nt FILE2  True if file1 is newer than file2 (according to
                    modification date).
@@ -62,29 +62,29 @@ File operators:
 
 String operators:
 
-    -z STRING      True if string is empty.
+  -z STRING      True if string is empty.
 
-    -n STRING
-    STRING         True if string is not empty.
+  -n STRING
+     STRING      True if string is not empty.
 
-    STRING1 = STRING2
-                   True if the strings are equal.
-    STRING1 != STRING2
-                   True if the strings are not equal.
-    STRING1 < STRING2
-                   True if STRING1 sorts before STRING2 lexicographically.
-    STRING1 > STRING2
-                   True if STRING1 sorts after STRING2 lexicographically.
+  STRING1 = STRING2
+                 True if the strings are equal.
+  STRING1 != STRING2
+                 True if the strings are not equal.
+  STRING1 < STRING2
+                 True if STRING1 sorts before STRING2 lexicographically.
+  STRING1 > STRING2
+                 True if STRING1 sorts after STRING2 lexicographically.
 
 Other operators:
 
-    -o OPTION      True if the shell option OPTION is enabled.
-    ! EXPR         True if expr is false.
-    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
-    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
+  -o OPTION      True if the shell option OPTION is enabled.
+  ! EXPR         True if expr is false.
+  EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
+  EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
 
-    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,
-                   -lt, -le, -gt, or -ge.
+  arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,
+                 -lt, -le, -gt, or -ge.
 
 Arithmetic binary operators return true if ARG1 is equal, not-equal,
 less-than, less-than-or-equal, greater-than, or greater-than-or-equal
@@ -95,8 +95,8 @@ $BUILTIN [
 $DOCNAME test_bracket
 $FUNCTION test_builtin
 $SHORT_DOC [ arg... ]
-This is a synonym for the "test" builtin, but the last
-argument must be a literal `]', to match the opening `['.
+This is a synonym for the "test" builtin, but the last argument must
+be a literal `]', to match the opening `['.
 $END
 
 #include <config.h>
index b776e5ae732462b6c7f7fdeb7c6c5a3e00f45929..f74cb0aa4dcb9b5860f430229960bc3da52d1e74 100644 (file)
@@ -109,6 +109,7 @@ $END
 #endif
 
 #include "../bashansi.h"
+#include "../bashintl.h"
 
 #include "../shell.h"
 #include "../test.h"
index 42a160f3a817f6747f868bd03b1f300c2de77421..fc2371a166eb756dbc2a2cae91192d8b81a756ae 100644 (file)
@@ -1,7 +1,7 @@
 This file is times.def, from which is created times.c.
 It implements the builtin "times" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,7 +24,7 @@ $PRODUCES times.c
 $BUILTIN times
 $FUNCTION times_builtin
 $SHORT_DOC times
-Print the accumulated user and system times for the shell and all of its
+Prints the accumulated user and system times for the shell and all of its
 child processes.
 $END
 
index 22304fc2f92c00c4a25fcf3469dad27063640410..fc2371a166eb756dbc2a2cae91192d8b81a756ae 100644 (file)
@@ -1,7 +1,7 @@
 This file is times.def, from which is created times.c.
 It implements the builtin "times" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,8 +24,8 @@ $PRODUCES times.c
 $BUILTIN times
 $FUNCTION times_builtin
 $SHORT_DOC times
-Print the accumulated user and system times for processes run from
-the shell.
+Prints the accumulated user and system times for the shell and all of its
+child processes.
 $END
 
 #include <config.h>
@@ -111,5 +111,5 @@ times_builtin (list)
 #  endif /* HAVE_TIMES */
 #endif /* !HAVE_TIMES */
 
-  return (EXECUTION_SUCCESS);
+  return (sh_chkwrite (EXECUTION_SUCCESS));
 }
index 7affa1cd10c269fcbb93fe5f078c71d12b35dde9..5cc14c9f7c3b0adc5a7d84e93927738b0a053e70 100644 (file)
@@ -1,7 +1,7 @@
 This file is trap.def, from which is created trap.c.
 It implements the builtin "trap" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,20 +24,28 @@ $PRODUCES trap.c
 $BUILTIN trap
 $FUNCTION trap_builtin
 $SHORT_DOC trap [-lp] [[arg] signal_spec ...]
-The command ARG is to be read and executed when the shell receives
+Defines and activates handlers to be run when the shell receives signals
+or other conditions.
+
+ARG is a command to be read and executed when the shell receives the
 signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC
 is supplied) or `-', each specified signal is reset to its original
 value.  If ARG is the null string each SIGNAL_SPEC is ignored by the
-shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)
-the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC
-is DEBUG, ARG is executed before every simple command.  If the`-p' option
-is supplied then the trap commands associated with each SIGNAL_SPEC are
-displayed.  If no arguments are supplied or if only `-p' is given, trap
-prints the list of commands associated with each signal.  Each SIGNAL_SPEC
-is either a signal name in <signal.h> or a signal number.  Signal names
-are case insensitive and the SIG prefix is optional.  `trap -l' prints
-a list of signal names and their corresponding numbers.  Note that a
-signal can be sent to the shell with "kill -signal $$".
+shell and by the commands it invokes.
+
+If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If
+a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.
+
+If no arguments are supplied, trap prints the list of commands associated
+with each signal.
+
+Options:
+  -l   print a list of signal names and their corresponding numbers
+  -p   display the trap commands associated with each SIGNAL_SPEC
+
+Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.
+Signal names are case insensitive and the SIG prefix is optional.  A
+signal may be sent to the shell with "kill -signal $$".
 $END
 
 #include <config.h>
index 2735791e4ccd8216b897b015762f521984a5624a..8043309964cd2912f9ecfe7945a1724db09d3352 100644 (file)
@@ -1,7 +1,7 @@
 This file is trap.def, from which is created trap.c.
 It implements the builtin "trap" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,20 +23,28 @@ $PRODUCES trap.c
 
 $BUILTIN trap
 $FUNCTION trap_builtin
-$SHORT_DOC trap [-lp] [arg signal_spec ...]
-The command ARG is to be read and executed when the shell receives
+$SHORT_DOC trap [-lp] [[arg] signal_spec ...]
+Defines and activates handlers to be run when the shell receives signals
+or other conditions.
+
+ARG is a command to be read and executed when the shell receives the
 signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC
 is supplied) or `-', each specified signal is reset to its original
 value.  If ARG is the null string each SIGNAL_SPEC is ignored by the
-shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)
-the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC
-is DEBUG, ARG is executed after every simple command.  If the`-p' option
-is supplied then the trap commands associated with each SIGNAL_SPEC are
-displayed.  If no arguments are supplied or if only `-p' is given, trap
-prints the list of commands associated with each signal.  Each SIGNAL_SPEC
-is either a signal name in <signal.h> or a signal number.  Signal names
-are case insensitive and the SIG prefix is optional.  `trap -l' prints
-a list of signal names and their corresponding numbers.  Note that a
+shell and by the commands it invokes.
+
+If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If
+a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.
+
+If no arguments are supplied, trap prints the list of commands associated
+with each signal.
+
+Options:
+  -l   print a list of signal names and their corresponding numbers
+  -p   display the trap commands associated with each SIGNAL_SPEC
+
+Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.
+Signal names are case insensitive and the SIG prefix is optional.  A
 signal can be sent to the shell with "kill -signal $$".
 $END
 
@@ -112,9 +120,9 @@ trap_builtin (list)
   opt = DSIG_NOCASE|DSIG_SIGPREFIX;    /* flags for decode_signal */
 
   if (list_signal_names)
-    return (display_signal_list ((WORD_LIST *)NULL, 1));
+    return (sh_chkwrite (display_signal_list ((WORD_LIST *)NULL, 1)));
   else if (display || list == 0)
-    return (display_traps (list));
+    return (sh_chkwrite (display_traps (list)));
   else
     {
       char *first_arg;
index eebd5f9475a28c08e33fa8d3914c1893b3b9e139..bb5327615721848f9eb4a73390f2d387cbf0ee7a 100644 (file)
@@ -1,7 +1,7 @@
 This file is type.def, from which is created type.c.
 It implements the builtin "type" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -27,24 +27,20 @@ $SHORT_DOC type [-afptP] name [name ...]
 For each NAME, indicate how it would be interpreted if used as a
 command name.
 
-If the -t option is used, `type' outputs a single word which is one of
-`alias', `keyword', `function', `builtin', `file' or `', if NAME is an
-alias, shell reserved word, shell function, shell builtin, disk file,
-or unfound, respectively.
-
-If the -p flag is used, `type' either returns the name of the disk
-file that would be executed, or nothing if `type -t NAME' would not
-return `file'.
-
-If the -a flag is used, `type' displays all of the places that contain
-an executable named `file'.  This includes aliases, builtins, and
-functions, if and only if the -p flag is not also used.
-
-The -f flag suppresses shell function lookup.
-
-The -P flag forces a PATH search for each NAME, even if it is an alias,
-builtin, or function, and returns the name of the disk file that would
-be executed.
+Options:
+  -a   display all locations containing an executable named NAME;
+       includes aliases, builtins, and functions, if and only if
+       the `-p' option is not also used
+  -f   suppress shell function lookup
+  -P   force a PATH search for each NAME, even if it is an alias,
+       builtin, or function, and returns the name of the disk file
+       that would be executed
+  -p   returns either the name of the disk file that would be executed,
+       or nothing if `type -t NAME' would not return `file'.
+  -t   output a single word which is one of `alias', `keyword',
+       `function', `builtin', `file' or `', if NAME is an alias, shell
+       reserved word, shell function, shell builtin, disk file, or not 
+       found, respectively
 $END
 
 #include <config.h>
index fa40ad25316a6932c5b8c9206da9890957497c1a..ed135dd4104570ef8b818f76b7e856f6535ac017 100644 (file)
@@ -1,7 +1,7 @@
 This file is type.def, from which is created type.c.
 It implements the builtin "type" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -27,24 +27,19 @@ $SHORT_DOC type [-afptP] name [name ...]
 For each NAME, indicate how it would be interpreted if used as a
 command name.
 
-If the -t option is used, `type' outputs a single word which is one of
-`alias', `keyword', `function', `builtin', `file' or `', if NAME is an
-alias, shell reserved word, shell function, shell builtin, disk file,
-or unfound, respectively.
-
-If the -p flag is used, `type' either returns the name of the disk
-file that would be executed, or nothing if `type -t NAME' would not
-return `file'.
-
-If the -a flag is used, `type' displays all of the places that contain
-an executable named `file'.  This includes aliases, builtins, and
-functions, if and only if the -p flag is not also used.
-
-The -f flag suppresses shell function lookup.
-
-The -P flag forces a PATH search for each NAME, even if it is an alias,
-builtin, or function, and returns the name of the disk file that would
-be executed.
+Options:
+  -a   display all locations containing an executable named NAME;
+       includes aliases, builtins, and functions, if and only if
+       the `-p' option is not also used
+  -f   suppress shell function lookup
+  -P   force a PATH search for each NAME, even if it is an alias,
+       builtin, or function, and returns the name of the disk file
+       that would be executed
+  -p   returns either the name of the disk file that would be executed,
+       or nothing if `type -t NAME' would not return `file'.
+  -t   output a single word which is one of `alias', `keyword', `function',
+       `builtin', `file' or `', if NAME is an alias, shell reserved word,
+       shell function, shell builtin, disk file, or not found, respectively
 $END
 
 #include <config.h>
@@ -108,14 +103,14 @@ int
 type_builtin (list)
      WORD_LIST *list;
 {
-  int dflags, successful_finds, opt;
+  int dflags, any_failed, opt;
   WORD_LIST *this;
 
   if (list == 0)
     return (EXECUTION_SUCCESS);
 
   dflags = CDESC_SHORTDESC;    /* default */
-  successful_finds = 0;
+  any_failed = 0;
 
   /* Handle the obsolescent `-type', `-path', and `-all' by prescanning
      the arguments and converting those options to the form that
@@ -181,11 +176,11 @@ type_builtin (list)
       if (!found && (dflags & (CDESC_PATH_ONLY|CDESC_TYPE)) == 0)
        sh_notfound (list->word->word);
 
-      successful_finds += found;
+      any_failed += found == 0;
       list = list->next;
     }
 
-  opt = (successful_finds != 0) ? EXECUTION_SUCCESS : EXECUTION_FAILURE;
+  opt = (any_failed == 0) ? EXECUTION_SUCCESS : EXECUTION_FAILURE;
   return (sh_chkwrite (opt));
 }
 
index c8d50c27e183c7ad753401e6b8212946b86d9fc7..1ea2c2a2bd90c698c9b7c0f409bd9b8a632fd4a3 100644 (file)
@@ -1,7 +1,7 @@
 This file is ulimit.def, from which is created ulimit.c.
 It implements the builtin "ulimit" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,38 +25,39 @@ $BUILTIN ulimit
 $FUNCTION ulimit_builtin
 $DEPENDS_ON !_MINIX
 $SHORT_DOC ulimit [-SHacdefilmnpqrstuvx] [limit]
-Ulimit provides control over the resources available to processes
-started by the shell, on systems that allow such control.  If an
-option is given, it is interpreted as follows:
-
-    -S use the `soft' resource limit
-    -H use the `hard' resource limit
-    -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 written by the shell and its children
-    -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 real-time scheduling 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
-the current soft limit, the current hard limit, and no limit, respectively.
-Otherwise, the current value of the specified resource is printed.
-If no option is given, then -f is assumed.  Values are in 1024-byte
-increments, except for -t, which is in seconds, -p, which is in
-increments of 512 bytes, and -u, which is an unscaled number of
-processes.
+Provides control over the resources available to the shell and processes
+it creates, on systems that allow such control.
+
+Options:
+  -S   use the `soft' resource limit
+  -H   use the `hard' resource limit
+  -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 written by the shell and its children
+  -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 real-time scheduling 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 the
+current soft limit, the current hard limit, and no limit, respectively.
+Otherwise, the current value of the specified resource is printed.  If
+no option is given, then -f is assumed.
+
+Values are in 1024-byte increments, except for -t, which is in seconds,
+-p, which is in increments of 512 bytes, and -u, which is an unscaled
+number of processes.
 $END
 
 #if !defined (_MINIX)
index fd21e7296ef84c1765450615dde8cb2e8ab7684c..332a06340b157afc04b73a4303611c237e880bda 100644 (file)
@@ -1,7 +1,7 @@
 This file is ulimit.def, from which is created ulimit.c.
 It implements the builtin "ulimit" in Bash.
 
-Copyright (C) 1987-2007 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,38 +25,37 @@ $BUILTIN ulimit
 $FUNCTION ulimit_builtin
 $DEPENDS_ON !_MINIX
 $SHORT_DOC ulimit [-SHacdefilmnpqrstuvx] [limit]
-Ulimit provides control over the resources available to processes
-started by the shell, on systems that allow such control.  If an
-option is given, it is interpreted as follows:
-
-    -S use the `soft' resource limit
-    -H use the `hard' resource limit
-    -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 written by the shell and its children
-    -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 real-time scheduling 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
-the current soft limit, the current hard limit, and no limit, respectively.
-Otherwise, the current value of the specified resource is printed.
-If no option is given, then -f is assumed.  Values are in 1024-byte
-increments, except for -t, which is in seconds, -p, which is in
-increments of 512 bytes, and -u, which is an unscaled number of
-processes.
+Provides control over the resources available to the shell and processes
+it creates, on systems that allow such control.
+
+Options:
+  -S   use the `soft' resource limit
+  -H   use the `hard' resource limit
+  -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 written by the shell and its children
+  -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 real-time scheduling 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 the
+current soft limit, the current hard limit, and no limit, respectively.
+Otherwise, the current value of the specified resource is printed.  If
+no option is given, then -f is assumed.  Values are in 1024-byte
+increments, except for -t, which is in seconds, -p, which is in increments
+of 512 bytes, and -u, which is an unscaled number of processes.
 $END
 
 #if !defined (_MINIX)
@@ -199,15 +198,16 @@ typedef struct {
 
 static RESOURCE_LIMITS limits[] = {
 #ifdef RLIMIT_CORE
-  { 'c',       RLIMIT_CORE,  1024,     "core file size",       "blocks" },
+  { 'c',       RLIMIT_CORE,  512,      "core file size",       "blocks" },
 #endif
 #ifdef RLIMIT_DATA
   { 'd',       RLIMIT_DATA,  1024,     "data seg size",        "kbytes" },
+
 #endif
 #ifdef RLIMIT_NICE
   { 'e',       RLIMIT_NICE,  1,        "scheduling priority",  (char *)NULL },
 #endif
-  { 'f',       RLIMIT_FILESIZE, 1024,  "file size",            "blocks" },
+  { 'f',       RLIMIT_FILESIZE, 512,   "file size",            "blocks" },
 #ifdef RLIMIT_SIGPENDING
   { 'i',       RLIMIT_SIGPENDING, 1,   "pending signals",      (char *)NULL },
 #endif
index 23e819941666974f6a041cdd34c0b49eaae844f7..8703a828c516dffc88cc68b13363f5312d358abd 100644 (file)
@@ -1,7 +1,7 @@
 This file is umask.def, from which is created umask.c.
 It implements the builtin "umask" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,13 +24,15 @@ $PRODUCES umask.c
 $BUILTIN umask
 $FUNCTION umask_builtin
 $SHORT_DOC umask [-p] [-S] [mode]
-The user file-creation mask is set to MODE.  If MODE is omitted, or if
-`-S' is supplied, the current value of the mask is printed.  The `-S'
-option makes the output symbolic; otherwise an octal number is output.
-If `-p' is supplied, and MODE is omitted, the output is in a form
-that may be used as input.  If MODE begins with a digit, it is
-interpreted as an octal number, otherwise it is a symbolic mode string
-like that accepted by chmod(1).
+Sets the user file-creation mask to MODE.  If MODE is omitted, prints
+the current value of the mask.
+
+If MODE begins with a digit, it is interpreted as an octal number;
+otherwise it is a symbolic mode string like that accepted by chmod(1).
+
+Options:
+  -p   if MODE is omitted, output in a form that may be reused as input
+  -S   makes the output symbolic; otherwise an octal number is output
 $END
 
 #include <config.h>
diff --git a/builtins/umask.def~ b/builtins/umask.def~
new file mode 100644 (file)
index 0000000..34ac3ba
--- /dev/null
@@ -0,0 +1,313 @@
+This file is umask.def, from which is created umask.c.
+It implements the builtin "umask" in Bash.
+
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES umask.c
+
+$BUILTIN umask
+$FUNCTION umask_builtin
+$SHORT_DOC umask [-p] [-S] [mode]
+Sets the user file-creation mask to MODE.  If MODE is omitted, prints
+the current value of the mask.
+
+If MODE begins with a digit, it is interpreted as an octal number;
+otherwise it is a symbolic mode string like that accepted by chmod(1).
+
+Options:
+
+  -p   if MODE is omitted, output in a form that may be reused as input
+  -S   makes the output symbolic; otherwise an octal number is output
+$END
+
+#include <config.h>
+
+#include "../bashtypes.h"
+#include "filecntl.h"
+#if ! defined(_MINIX) && defined (HAVE_SYS_FILE_H)
+#  include <sys/file.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <chartypes.h>
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "posixstat.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+#ifdef __LCC__
+#define mode_t int
+#endif
+
+/* **************************************************************** */
+/*                                                                  */
+/*                     UMASK Builtin and Helpers                    */
+/*                                                                  */
+/* **************************************************************** */
+
+static void print_symbolic_umask __P((mode_t));
+static int symbolic_umask __P((WORD_LIST *));
+
+/* Set or display the mask used by the system when creating files.  Flag
+   of -S means display the umask in a symbolic mode. */
+int
+umask_builtin (list)
+     WORD_LIST *list;
+{
+  int print_symbolically, opt, umask_value, pflag;
+  mode_t umask_arg;
+
+  print_symbolically = pflag = 0;
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "Sp")) != -1)
+    {
+      switch (opt)
+       {
+       case 'S':
+         print_symbolically++;
+         break;
+       case 'p':
+         pflag++;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+
+  list = loptend;
+
+  if (list)
+    {
+      if (DIGIT (*list->word->word))
+       {
+         umask_value = read_octal (list->word->word);
+
+         /* Note that other shells just let you set the umask to zero
+            by specifying a number out of range.  This is a problem
+            with those shells.  We don't change the umask if the input
+            is lousy. */
+         if (umask_value == -1)
+           {
+             sh_erange (list->word->word, _("octal number"));
+             return (EXECUTION_FAILURE);
+           }
+       }
+      else
+       {
+         umask_value = symbolic_umask (list);
+         if (umask_value == -1)
+           return (EXECUTION_FAILURE);
+       }
+      umask_arg = (mode_t)umask_value;
+      umask (umask_arg);
+      if (print_symbolically)
+       print_symbolic_umask (umask_arg);
+    }
+  else                         /* Display the UMASK for this user. */
+    {
+      umask_arg = umask (022);
+      umask (umask_arg);
+
+      if (pflag)
+       printf ("umask%s ", (print_symbolically ? " -S" : ""));
+      if (print_symbolically)
+       print_symbolic_umask (umask_arg);
+      else
+       printf ("%04lo\n", (unsigned long)umask_arg);
+    }
+
+  return (sh_chkwrite (EXECUTION_SUCCESS));
+}
+
+/* Print the umask in a symbolic form.  In the output, a letter is
+   printed if the corresponding bit is clear in the umask. */
+static void
+print_symbolic_umask (um)
+     mode_t um;
+{
+  char ubits[4], gbits[4], obits[4];           /* u=rwx,g=rwx,o=rwx */
+  int i;
+
+  i = 0;
+  if ((um & S_IRUSR) == 0)
+    ubits[i++] = 'r';
+  if ((um & S_IWUSR) == 0)
+    ubits[i++] = 'w';
+  if ((um & S_IXUSR) == 0)
+    ubits[i++] = 'x';
+  ubits[i] = '\0';
+
+  i = 0;
+  if ((um & S_IRGRP) == 0)
+    gbits[i++] = 'r';
+  if ((um & S_IWGRP) == 0)
+    gbits[i++] = 'w';
+  if ((um & S_IXGRP) == 0)
+    gbits[i++] = 'x';
+  gbits[i] = '\0';
+
+  i = 0;
+  if ((um & S_IROTH) == 0)
+    obits[i++] = 'r';
+  if ((um & S_IWOTH) == 0)
+    obits[i++] = 'w';
+  if ((um & S_IXOTH) == 0)
+    obits[i++] = 'x';
+  obits[i] = '\0';
+
+  printf ("u=%s,g=%s,o=%s\n", ubits, gbits, obits);
+}
+
+int
+parse_symbolic_mode (mode, initial_bits)
+     char *mode;
+     int initial_bits;
+{
+  int who, op, perm, bits, c;
+  char *s;
+
+  for (s = mode, bits = initial_bits;;)
+    {
+      who = op = perm = 0;
+
+      /* Parse the `who' portion of the symbolic mode clause. */
+      while (member (*s, "agou"))
+       {
+         switch (c = *s++)
+           {
+           case 'u':
+             who |= S_IRWXU;
+             continue;
+           case 'g':
+             who |= S_IRWXG;
+             continue;
+           case 'o':
+             who |= S_IRWXO;
+             continue;
+           case 'a':
+             who |= S_IRWXU | S_IRWXG | S_IRWXO;
+             continue;
+           default:
+             break;
+           }
+       }
+
+      /* The operation is now sitting in *s. */
+      op = *s++;
+      switch (op)
+       {
+       case '+':
+       case '-':
+       case '=':
+         break;
+       default:
+         builtin_error (_("`%c': invalid symbolic mode operator"), op);
+         return (-1);
+       }
+
+      /* Parse out the `perm' section of the symbolic mode clause. */
+      while (member (*s, "rwx"))
+       {
+         c = *s++;
+
+         switch (c)
+           {
+           case 'r':
+             perm |= S_IRUGO;
+             break;
+           case 'w':
+             perm |= S_IWUGO;
+             break;
+           case 'x':
+             perm |= S_IXUGO;
+             break;
+           }
+       }
+
+      /* Now perform the operation or return an error for a
+        bad permission string. */
+      if (!*s || *s == ',')
+       {
+         if (who)
+           perm &= who;
+
+         switch (op)
+           {
+           case '+':
+             bits |= perm;
+             break;
+           case '-':
+             bits &= ~perm;
+             break;
+           case '=':
+             if (who == 0)
+               who = S_IRWXU | S_IRWXG | S_IRWXO;
+             bits &= ~who;
+             bits |= perm;
+             break;
+
+           /* No other values are possible. */
+           }
+
+         if (*s == '\0')
+           break;
+         else
+           s++;        /* skip past ',' */
+       }
+      else
+       {
+         builtin_error (_("`%c': invalid symbolic mode character"), *s);
+         return (-1);
+       }
+    }
+
+  return (bits);
+}
+
+/* Set the umask from a symbolic mode string similar to that accepted
+   by chmod.  If the -S argument is given, then print the umask in a
+   symbolic form. */
+static int
+symbolic_umask (list)
+     WORD_LIST *list;
+{
+  int um, bits;
+
+  /* Get the initial umask.  Don't change it yet. */
+  um = umask (022);
+  umask (um);
+
+  /* All work is done with the complement of the umask -- it's
+     more intuitive and easier to deal with.  It is complemented
+     again before being returned. */
+  bits = parse_symbolic_mode (list->word->word, ~um & 0777);
+  if (bits == -1)
+    return (-1);
+
+  um = ~bits & 0777;
+  return (um);
+}
index 94e525f543e94ab390e26999c476ea6de95a52f4..3e018044d99c0b27cf633fd31c1edd6b6b3ad800 100644 (file)
@@ -1,7 +1,7 @@
 This file is wait.def, from which is created wait.c.
 It implements the builtin "wait" in Bash.
 
-Copyright (C) 1987-2006 Free Software Foundation, Inc.
+Copyright (C) 1987-2008 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,21 +23,21 @@ $BUILTIN wait
 $FUNCTION wait_builtin
 $DEPENDS_ON JOB_CONTROL
 $PRODUCES wait.c
-$SHORT_DOC wait [n]
-Wait for the specified process and report its termination status.  If
-N is not given, all currently active child processes are waited for,
-and the return code is zero.  N may be a process ID or a job
-specification; if a job spec is given, all processes in the job's
-pipeline are waited for.
+$SHORT_DOC wait [id]
+Waits for the process identified by ID, which may be a process ID or a
+job specification, and reports its termination status.  If ID is not
+given, waits for all currently active child processes, and the return
+status is zero.  If ID is a a job specification, waits for all processes
+in the job's pipeline.
 $END
 
 $BUILTIN wait
 $FUNCTION wait_builtin
 $DEPENDS_ON !JOB_CONTROL
-$SHORT_DOC wait [n]
-Wait for the specified process and report its termination status.  If
-N is not given, all currently active child processes are waited for,
-and the return code is zero.  N must be a process ID.
+$SHORT_DOC wait [pid]
+Waits for the specified process and reports its termination status.  If
+PID is not given, all currently active child processes are waited for,
+and the return code is zero.  PID must be a process ID.
 $END
 
 #include <config.h>
index ece8360449db15808b137ca7e0a5b0dcffcc7895..94e525f543e94ab390e26999c476ea6de95a52f4 100644 (file)
@@ -1,7 +1,7 @@
 This file is wait.def, from which is created wait.c.
 It implements the builtin "wait" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
index f127e51be5f31169e384820e6fba62200bdbc12d..51c81b772c0b78387cf8d3fed7d2435a6675f520 100644 (file)
Binary files a/doc/bash.pdf and b/doc/bash.pdf differ
index 3614838d64ccd73bf9619e2674a38bcf06c90aaa..433e61b02b759d5c66b7f8b078edb7b26c5d30eb 100644 (file)
@@ -3438,7 +3438,7 @@ parent.
 @item printf
 @btindex printf
 @example
-@code{printf} [-v @var{var}] @var{format} [@var{arguments}]
+printf [-v @var{var}] @var{format} [@var{arguments}]
 @end example
 Write the formatted @var{arguments} to the standard output under the
 control of the @var{format}.
index 797740d9dfd4c752c8dc91368a2baf302842632c..3614838d64ccd73bf9619e2674a38bcf06c90aaa 100644 (file)
@@ -16,7 +16,7 @@ This is Edition @value{EDITION}, last updated @value{UPDATED},
 of @cite{The GNU Bash Reference Manual},
 for @code{Bash}, Version @value{VERSION}.
 
-Copyright @copyright{} 1988-2005 Free Software Foundation, Inc.
+Copyright @copyright{} 1988--2007 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -26,13 +26,14 @@ are preserved on all copies.
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.2 or
 any later version published by the Free Software Foundation; with no
-Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
 and with the Back-Cover Texts as in (a) below.  A copy of the license is
-included in the section entitled ``GNU Free Documentation License.''
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual.  Buying copies from the FSF
+supports it in developing GNU and promoting software freedom.''
 
-(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
-this GNU Manual, like GNU software.  Copies published by the Free
-Software Foundation raise funds for GNU development.''
 @end quotation
 @end copying
 
@@ -110,7 +111,7 @@ reference on shell behavior.
 * Major Differences From The Bourne Shell::    A terse list of the differences
                                                between Bash and historical
                                                versions of /bin/sh.
-* Copying This Manual::                Copying this manual.
+* GNU Free Documentation License::     Copying and sharing this documentation.
 * Indexes::                    Various indexes for this manual.
 @end menu
 @end ifnottex
@@ -7468,12 +7469,8 @@ The SVR4.2 shell behaves differently when invoked as @code{jsh}
 (it turns on job control).
 @end itemize
 
-@node Copying This Manual
-@appendix Copying This Manual
-
-@menu
-* GNU Free Documentation License::      License for copying this manual.
-@end menu
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
 
 @include fdl.texi
 
index 76ca594ef93adb733b577bfb490622ad3e29e996..d584a68d1c51a6dd79ba3b784c22c8edfb00e556 100644 (file)
@@ -91,7 +91,7 @@ CSOURCES = clktck.c clock.c getcwd.c getenv.c oslib.c setlinebuf.c \
           fmtulong.c fmtullong.c fmtumax.c shmatch.c strnlen.c \
           strtoll.c strtoull.c strtoimax.c strtoumax.c memset.c strstr.c \
           mktime.c strftime.c xstrchr.c zcatfd.c zmapfd.c winsize.c eaccess.c \
-          wcsdup.c fpurge.c
+          wcsdup.c fpurge.c zgetline.c
 
 # The header files for this library.
 HSOURCES = 
@@ -104,7 +104,7 @@ OBJECTS = clktck.o clock.o getenv.o oslib.o setlinebuf.o strnlen.o \
          pathphys.o tmpfile.o stringlist.o stringvec.o spell.o shquote.o \
          strtrans.o strindex.o snprintf.o mailstat.o fmtulong.o \
          fmtullong.o fmtumax.o xstrchr.o zcatfd.o zmapfd.o winsize.o wcsdup.o \
-         fpurge.o ${LIBOBJS}
+         fpurge.o zgetline.o ${LIBOBJS}
 
 SUPPORT = Makefile
 
@@ -186,6 +186,7 @@ wcsdup.o: wcsdup.c
 xstrchr.o: xstrchr.c
 zcatfd.o: zcatfd.c
 zmapfd.o: zmapfd.c
+zgetline.o: zgetline.c
 zread.o: zread.c
 zwrite.o: zwrite.c
 
@@ -246,6 +247,7 @@ vprint.o: ${BUILD_DIR}/config.h
 wcsdup.o: ${BUILD_DIR}/config.h
 xstrchr.o: ${BUILD_DIR}/config.h
 zcatfd.o: ${BUILD_DIR}/config.h
+zgetline.o: ${BUILD_DIR}/config.h
 zmapfd.o: ${BUILD_DIR}/config.h
 zread.o: ${BUILD_DIR}/config.h
 zwrite.o: ${BUILD_DIR}/config.h
@@ -482,3 +484,8 @@ wcsdup.o: ${topdir}/xmalloc.h
 xstrchr.o: ${topdir}/bashansi.h
 xstrchr.o: ${BASHINCDIR}/ansi_stdlib.h
 xstrchr.o: ${BASHINCDIR}/shmbutil.h
+
+zgetline.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h
+zgetline.o: ${BASHINCDIR}/stdc.h
+zgetline.o: ${topdir}/xmalloc.h
+zgetline.o: ${topdir}/bashtypes.h
index 53e5ca5d1f5665a22c5025551645848bdfabf6d7..76ca594ef93adb733b577bfb490622ad3e29e996 100644 (file)
@@ -40,6 +40,8 @@ INTL_BUILDDIR = ${LIBBUILD}/intl
 INTL_INC = @INTL_INC@
 LIBINTL_H = @LIBINTL_H@
 
+datarootdir = @datarootdir@
+
 INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
@@ -89,7 +91,7 @@ CSOURCES = clktck.c clock.c getcwd.c getenv.c oslib.c setlinebuf.c \
           fmtulong.c fmtullong.c fmtumax.c shmatch.c strnlen.c \
           strtoll.c strtoull.c strtoimax.c strtoumax.c memset.c strstr.c \
           mktime.c strftime.c xstrchr.c zcatfd.c zmapfd.c winsize.c eaccess.c \
-          wcsdup.c
+          wcsdup.c fpurge.c
 
 # The header files for this library.
 HSOURCES = 
@@ -102,7 +104,7 @@ OBJECTS = clktck.o clock.o getenv.o oslib.o setlinebuf.o strnlen.o \
          pathphys.o tmpfile.o stringlist.o stringvec.o spell.o shquote.o \
          strtrans.o strindex.o snprintf.o mailstat.o fmtulong.o \
          fmtullong.o fmtumax.o xstrchr.o zcatfd.o zmapfd.o winsize.o wcsdup.o \
-         ${LIBOBJS}
+         fpurge.o ${LIBOBJS}
 
 SUPPORT = Makefile
 
@@ -140,6 +142,7 @@ eaccess.o: eaccess.c
 fmtullong.o: fmtullong.c
 fmtulong.o: fmtulong.c
 fmtumax.o: fmtumax.c
+fpurge.o: fpurge.c
 getcwd.o: getcwd.c
 getenv.o: getenv.c
 inet_aton.o: inet_aton.c
@@ -200,6 +203,7 @@ eaccess.o: ${BUILD_DIR}/config.h
 fmtullong.o: ${BUILD_DIR}/config.h
 fmtulong.o: ${BUILD_DIR}/config.h
 fmtumax.o: ${BUILD_DIR}/config.h
+fpurge.o: ${BUILD_DIR}/config.h
 getcwd.o: ${BUILD_DIR}/config.h
 getenv.o: ${BUILD_DIR}/config.h
 inet_aton.o: ${BUILD_DIR}/config.h
diff --git a/lib/sh/zgetline.c b/lib/sh/zgetline.c
new file mode 100644 (file)
index 0000000..5ef6392
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 2, or (at your option) any later
+   version.
+
+   Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+   
+   You should have received a copy of the GNU General Public License along
+   with Bash; see the file COPYING.  If not, write to the Free Software
+   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include <config.h>
+
+#include <sys/types.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <errno.h>
+#include "xmalloc.h"
+
+#if !defined (errno)
+extern int errno;
+#endif
+
+/* Initial memory allocation for automatic growing buffer in zreadlinec */
+#define GET_LINE_INITIAL_ALLOCATION 16
+
+/* Derived from GNU libc's getline.
+   The behavior is almost the same as getline. See man getline.
+   The differences are
+       (1) using file descriptor instead of FILE *,
+       (2) the order of arguments; the file descriptor comes the first, and
+       (3) the addtion of thired argument, UNBUFFERED_READ; this argument
+           controls whether get_line uses buffering or not to get a byte data
+           from FD. get_line uses zreadc if UNBUFFERED_READ is zero; and
+           uses zread if UNBUFFERED_READ is non-zero.
+
+   Returns number of bytes read or -1 on error. */
+
+ssize_t
+zgetline (fd, lineptr, n, unbuffered_read)
+     int fd;
+     char **lineptr;
+     size_t *n;
+     int unbuffered_read;
+{
+  int nr, retval;
+  char *line, c;
+
+  if (lineptr == 0 || n == 0 || (*lineptr == 0 && *n != 0))
+    return -1;
+
+  nr = 0;
+  line = *lineptr;
+  
+  while (1)
+    {
+      retval = unbuffered_read ? zread (fd, &c, 1) : zreadc(fd, &c);
+
+      if (retval <= 0)
+       {
+         line[nr] = '\0';
+         break;
+       }
+
+      if (nr + 2 >= *n)
+       {
+        size_t new_size;
+
+        new_size = (*n == 0) ? GET_LINE_INITIAL_ALLOCATION : *n * 2;
+        line = xrealloc (*lineptr, new_size);
+
+        if (line)
+          {
+            *lineptr = line;
+            *n = new_size;
+          }
+        else
+          {
+            if (*n > 0)
+              {
+                (*lineptr)[*n - 1] = '\0';
+                nr = *n - 2;
+              }
+            break;
+          }
+       }
+
+      line[nr] = c;
+      nr++;
+
+      if (c == '\n')
+       {
+         line[nr] = '\0';
+         break;
+       }
+    }
+
+  return nr - 1;
+}