summaryrefslogtreecommitdiff
path: root/CWRU
diff options
context:
space:
mode:
authorAn-Cheng Huang <ancheng@vyatta.com>2007-11-12 13:06:02 -0800
committerAn-Cheng Huang <ancheng@vyatta.com>2007-11-12 13:06:02 -0800
commitb7fc9e0f6d6105ba2203f219743d4b269415e84b (patch)
treeef6586dfc62798c2b17487b443864699aca55f31 /CWRU
downloadvyatta-bash-b7fc9e0f6d6105ba2203f219743d4b269415e84b.tar.gz
vyatta-bash-b7fc9e0f6d6105ba2203f219743d4b269415e84b.zip
initial import from bash_3.1dfsg.orig.tar.gz
Diffstat (limited to 'CWRU')
-rw-r--r--CWRU/PLATFORMS31
-rw-r--r--CWRU/README20
-rw-r--r--CWRU/changelog12477
-rw-r--r--CWRU/mh-folder-comp449
-rwxr-xr-xCWRU/misc/bison26
-rw-r--r--CWRU/misc/errlist.c57
-rw-r--r--CWRU/misc/hpux10-dlfcn.h63
-rw-r--r--CWRU/misc/open-files.c35
-rw-r--r--CWRU/misc/sigs.c47
-rw-r--r--CWRU/misc/sigstat.c226
-rw-r--r--CWRU/sh-redir-hack15
11 files changed, 13446 insertions, 0 deletions
diff --git a/CWRU/PLATFORMS b/CWRU/PLATFORMS
new file mode 100644
index 0000000..f05caff
--- /dev/null
+++ b/CWRU/PLATFORMS
@@ -0,0 +1,31 @@
+The version of bash in this directory has been compiled on the
+following systems:
+
+By chet:
+
+SunOS 4.1.4
+SunOS 5.5
+BSDI BSD/OS 2.1
+FreeBSD 2.2
+NetBSD 1.2
+AIX 4.2
+AIX 4.1.4
+HP/UX 9.05, 10.01, 10.10, 10.20
+Linux 2.0.29 (libc 5.3.12)
+Linux 2.0.4 (libc 5.3.12)
+
+By other testers:
+
+SCO ODT 2.0
+SCO 3.2v5.0, 3.2v4.2
+SunOS 5.3
+SunOS 5.5
+BSD/OS 2.1
+FreeBSD 2.2
+SunOS 4.1.3
+Irix 5.3
+Irix 6.2
+Linux 2.0 (unknown distribution)
+Digital OSF/1 3.2
+GNU Hurd 0.1
+SVR4.2
diff --git a/CWRU/README b/CWRU/README
new file mode 100644
index 0000000..7d7ca1a
--- /dev/null
+++ b/CWRU/README
@@ -0,0 +1,20 @@
+Contents of this directory:
+
+changelog - my change log since the last release
+
+POSIX.NOTES - list of what changes for `posix mode'
+
+README - this file
+
+misc - directory with some useful tools
+
+The following are distributed `as-is'. They will not apply without some
+modification.
+
+sh-redir-hack - diff to parse.y to get redirections before
+ compound commands
+
+empty-for-wordlist - diff to parse.y to allow an empty wordlist after
+ the `in' keyword in a `for' statement
+
+mh-folder-comp - diffs that reportedly add MH folder completion
diff --git a/CWRU/changelog b/CWRU/changelog
new file mode 100644
index 0000000..6ab5c81
--- /dev/null
+++ b/CWRU/changelog
@@ -0,0 +1,12477 @@
+ 4/9/2001
+ --------
+[bash-2.05 released]
+
+ 4/10
+ ----
+redir.c
+ - check return value of fclose() in write_here_document() for error
+ returns; don't just rely on fwrite() failing
+
+support/bashbug.sh
+ - set TMPDIR to /tmp if it's null or unset
+ - use $TMPDIR in the TEMP tempfile name template
+ - fixed the call to `mktemp', if it exists, to make it more portable
+
+jobs.c
+ - if WCONTINUED is not defined, define it to 0 and add a define for
+ WIFCONTINUED(wstatus) which expands to 0
+ - add WCONTINUED to the flags passed to waitpid(2) in waitchld()
+ - don't increment children_exited if waitpid's status is WIFCONTINUED,
+ since we don't want to call a SIGCHLD trap handler in this case
+ - in waitchld(), we set child->running to 1 if WIFCONTINUED(status)
+ is non-zero
+ - make sure pretty_print_job doesn't check for the core dump bit if
+ the process has been continued; it's only valid if the job is dead
+ - in set_job_status_and_cleanup, set the job to JRUNNING if job_state
+ is non-zero and the job was previously marked as JSTOPPED
+
+configure.in
+ - add -DBROKEN_DIRENT_D_INO to interix LOCAL_CFLAGS
+
+lib/glob/glob.c
+ - if BROKEN_DIRENT_D_INO is defined, define REAL_DIR_ENTRY to 1
+
+jobs.c
+ - in kill_pid, we only need to block and unblock SIGCHLD if the
+ `group' argument is non-zero, since otherwise we just call `kill'
+ on the pid argument
+
+version.c
+ - update copyright date to 2001
+
+bashline.c
+ - prog_complete_return needs to take a `const char *' as its first
+ argument
+ - history_completion_generator needs to take a `const char *' as
+ its first argument, and `text' needs to be a `const char *'
+
+ 4/11
+ ----
+redir.c
+ - fixed a weird typo in redir_special_open, case RF_DEVFD, added
+ call to all_digits before call to legal_number
+ - fixed do_redirection_internal to call legal_number instead of atol(3)
+ when translating r_duplicating_{in,out}put_word, so it handles
+ overflow better
+ - produce an error message in redirection_error for out-of-range
+ file descriptors
+ - change allocation strategy in redirection_error so we don't have to
+ malloc scratch memory if redirection_expand() fails
+
+jobs.h
+ - added defines for `running' member of a struct process
+
+general.c
+ - fix legal_number to return 0 when strtol(3) reports overflow or
+ underflow
+
+parse.y
+ - changed read_token_word to call legal_number instead of atoi(3)
+
+input.c
+ - return -1/EBADF from close_buffered_fd if fd is < 0
+
+command.h
+ - fixed bogus comment about IS_DESCRIPTOR in description of the
+ REDIRECTEE struct
+
+print_cmd.c
+ - change cprintf's 'd' modifier code to display negative numbers as
+ an out-of-range value. We can do this only because the only use
+ of %d is to output file descriptor numbers in redirections
+
+support/mksignames.c
+ - need to include config.h to get a possible value for
+ UNUSABLE_RT_SIGNALS
+
+ 4/16
+ ----
+lib/readline/doc/rluser.texinfo
+ - corrected a small error in one description of M-DEL
+
+ 4/17
+ ----
+stringlib.c
+ - need to initialize `ind' before calls to RESIZE_MALLOCED_BUFFER
+ in strcreplace()
+
+support/bashversion.c
+ - new file, prints bash version information
+
+Makefile.in
+ - rules for building bashversion and linking it to version.o
+
+ 4/24
+ ----
+conftypes.h
+ - new file with HOSTTYPE, OSTYPE, MACHTYPE, etc. defines from
+ variables.h
+
+variables.h, version.c
+ - include conftypes.h
+
+patchlevel.h
+ - new file, contains define for PATCHLEVEL. Doing away with the old
+ scheme of having the information in configure.in
+
+version.c
+ - include patchlevel.h
+
+Makefile.in
+ - run bashversion -p to find patch level rather than have configure
+ substitute in a value
+ - pass -S ${top_srcdir} to support/mkversion.sh
+
+support/mkversion.sh
+ - don't put PATCHLEVEL define into version.h, but accept and ignore
+ a -p option
+ - take a new -S srcdir option
+ - find the patch level by parsing it out of patchlevel.h
+
+configure.in
+ - hard-code BASHVERS assignment instead of reading it from a file
+ - remove BASHPATCH; don't substitute it
+
+_distribution,_patchlevel
+ - removed
+
+ 4/26
+ ----
+shell.c
+ - call init_noninteractive() in open_shell_script if forced_interactive
+ is non-zero (the shell was started with -i) and fd_is_tty is 0
+ (the script file is a real file, not something like /dev/stdin),
+ since it wasn't done earlier
+
+builtins/printf.def
+ - change for POSIX.2 compliance when conversion errors are encountered
+ when processing %d, %u, and floating point conversion operators
+ (print a warning message, return the value accumulated at the time
+ of the error -- which is always 0 -- and exit with a non-zero status)
+
+command.h
+ - added CMD_COMMAND_BUILTIN for use by the `command' builtin and the
+ code in execute_cmd.c
+
+builtins/command.def
+ - add CMD_COMMAND_BUILTIN to the created command's flags
+
+ 5/1
+ ---
+configure.in
+ - add call to AC_C_CONST to test `const' compiler behavior
+ - add call to AC_C_INLINE to test `inline' compiler behavior
+ - add call to AC_C_STRINGIZE to test cpp #x stringizing operator
+
+config.h.in
+ - add `#undef const' for configure to substitute
+ - add `#undef inline' for configure to substitute
+ - add `#undef HAVE_STRINGIZE' for configure to substitute
+
+include/stdc.h
+ - remove code that defines or undefines `const' and `inline'
+ - change the __STRING macro to be defined depending on the value
+ of HAVE_STRINGIZE
+
+lib/malloc/malloc.c
+ - change the __STRING macro to be defined depending on the value
+ of HAVE_STRINGIZE
+
+lib/readline/{readline,rlprivate}.h
+ - moved rl_get_termcap to readline.h, making it a public function
+
+lib/readline/readline.h
+ - new #define, RL_READLINE_VERSION, hex-encoded library version
+ number, currently set to 0x0402
+ - new public int variable, rl_readline_version
+
+lib/readline/readline.c
+ - #define RL_READLINE_VERSION if it is not already defined (which it
+ should be in readline.h)
+ - initialize rl_readline_version to RL_READLINE_VERSION
+
+lib/readline/doc/rltech.texinfo
+ - documented rl_get_termcap
+ - documented rl_readline_version
+
+jobs.c
+ - job_exit_status should return an int, not a WAIT (undetected
+ before because on most POSIX-like systems a WAIT is really an int)
+
+builtins/evalfile.c
+ - added FEVAL_REGFILE (file must be a regular file) to accepted
+ _evalfile flags
+ - fc_execute_file() adds FEVAL_REGFILE to _evalfile flags. This
+ means that startup files and files read with `.' no longer need
+ to be regular files
+
+ 5/2
+ ---
+
+lib/termcap/Makefile.in
+ - fix target for installed termcap library (normally unused)
+
+lib/tilde/Makefile.in
+ - fix install target to install in $(libdir) (normally unused)
+
+Makefile.in
+ - don't make $(man3dir) since there's nothing installed there
+
+Makefile.in,doc/Makefile.in
+ - change `man1ext' to `.1', `man3ext' to `.3'
+ - change appropriate install targets to use new values of man[13]ext
+ - use `test ...' instead of `[...]'
+ - add support for DESTDIR root installation prefix, for package
+ building (installdirs, install, install-strip, uninstall targets)
+
+builtins/common.c
+ - new function int get_exitstat(WORD_LIST *list) returns an eight-bit
+ exit status value for use in return, exit, logout builtins
+
+builtins/common.h
+ - extern declaration for get_exitstat()
+
+builtins/{exit,return}.def
+ - call get_exitstat where appropriate
+
+builtins/printf.def
+ - add support for "'" flag character as posix 1003.2-200x d6 says
+ - fix core dump when user-supplied field width or precision is 0
+ - fix to printstr() to handle zero-length precision with `%b' format
+ specifier (printf '%.0b-%.0s\n' foo bar)
+ - fix to printstr() to treat a negative field width as a positive
+ field width with left-justification
+ - fix to mklong to avoid static buffers, which can always be overrun
+ by someone sufficiently motivated
+
+bashline.c
+ - change var in add_host_name to type `size_t' for passing to xrealloc
+
+ 5/3
+ ---
+execute_cmd.c
+ - change restore_signal_mask to accept a sigset_t *, since a sigset_t
+ may not fit into a pointer, change call
+
+unwind_prot.c
+ - use a union UWP in restore_variable when restoring a variable whose
+ size is the same as sizeof(int), the reverse of the method used to
+ store it in unwind_protect_int
+
+builtins/printf.def
+ - use a #define LENMODS containing the length modifiers instead of
+ testing against each possible modifier character, save any mod
+ character found
+ - add support for ISO C99 length specifiers `j', `t', and `z'
+ - if `L' modifier is supplied with a floating point conversion char,
+ pass a `long double' to printf if HAVE_LONG_DOUBLE is defined
+
+configure.in,config.h.in
+ - call AC_C_LONG_DOUBLE to check for `long double'; define
+ HAVE_LONG_DOUBLE if supported
+
+bashline.c
+ - fix an inadvertantly-unclosed comment in attempt_shell_completion
+ - make set_saved_history return a value
+ - make dynamic_complete_history return a useful value
+
+{make_cmd,execute_cmd,shell,subst,trap,variables,input,unwind_prot,test,
+pcomplete}.c
+ - removed some declared-but-unused variables
+
+builtins/{cd,enable,fc,set,setattr,type,umask,printf,complete}.def
+ - removed some declared-but-unused variables
+
+lib/sh/{zread,netopen}.c
+ - removed some declared-but-unused variables
+
+execute_cmd.c
+ - in execute_arith_command, use a long variable to hold the result
+ of evalexp(), since that's what it returns
+
+builtins/evalstring.c
+ - make cat_file return -1 on a read or write error
+
+lib/sh/stringlib.c
+ - make merge_stringlists() return the right value
+
+ 5/7
+ ---
+pcomplete.c
+ - remove typo that caused empty declaration (;;)
+
+parse.y
+ - fix yyerror() to accept a single string argument; fix callers
+
+trap.c
+ - cast pointer to long instead of int when printing message with
+ internal_warning() in run_pending_traps()
+
+subst.c
+ - fix process_substitute to handle stdin being closed
+
+test.c
+ - change `while' to `if' in and() and or(), since the loop isn't
+ actually performed -- there's an unconditional `return' in the
+ loop body
+ - check for integer overflow of arguments to `-t'
+
+lib/sh/netopen.c
+ - change _getserv() to reject negative port/service numbers
+
+expr.c
+ - fix strlong() to not convert the base specification from long to
+ int before checking for overflow, since truncation on machines
+ where sizeof(int) != sizeof(long) may mask errors
+
+builtins/{jobs,kill,wait}.def
+ - use legal_number instead of atoi when converting strings to pid_t;
+ check for numeric overflow
+
+input.c
+ - fix for cygwin in b_fill_buffer -- off-by-one error when checking
+ buffer for \r\n termination
+
+general.h
+ - new #define INT_STRLEN_BOUND(t), computes max length of string
+ representing integer value of type T, possibly including a sign
+ character
+ - include <limits.h> if it's present
+
+{execute_cmd,findcmd,test}.c
+ - don't include <limits.h>, since general.h does it now
+
+{execute_cmd,lib/sh/itos,pcomplete,print_cmd,subst,variables}.c
+ - use INT_STRLEN_BOUND instead of static array sizes when converting
+ various strings to integer values
+
+shell.h
+ - struct fd_bitmap now uses an `int' size, since it's bounded by
+ the number of file descriptors, which must fit into an `int'
+
+execute_cmd.c
+ - FD_BITMAP_DEFAULT_SIZE is now 32, not 32L
+ - new_fd_bitmap takes an `int' size parameter, not a `long'
+
+execute_cmd.h
+ - change prototype for new_fd_bitmap()
+
+test.c
+ - fix test_stat to check for overflow when parsing the integer file
+ descriptor number; return ENOENT instead of EBADF for files that
+ are not open
+
+hashlib.c
+ - don't discard the upper 32 bits of the random value, if present
+
+lib/readline/shell.c
+ - use the same INT_STRLEN_BOUND mechanism to decide how much space to
+ allocated in sh_set_lines_and_columns
+
+ 5/8
+ ---
+aclocal.m4
+ - add check for libtinfo (termcap-specific portion of ncurses-5.2) to
+ BASH_CHECK_LIB_TERMCAP
+ - new macro, RL_LIB_READLINE_VERSION, checks version of installed
+ readline library and (optionally) writes version #defines to
+ config.h. Bash doesn't use the version defines
+
+configure.in
+ - call RL_LIB_READLINE_VERSION instead of support/rlvers.sh
+
+execute_cmd.c
+ - fix execute_shell_script and the WHITECHAR and STRINGCHAR macros
+ to check array bounds before indexing into the sample string
+
+unwind_prot.[ch]
+ - import new versions submitted by Paul Eggert <eggert@twinsun.com>
+ with a couple of changes for backwards compatibility, so the rest
+ of the source doesn't need to be changed yet
+
+jobs.c
+ - use unwind_protect_var on last_made_pid in run_sigchld_trap
+
+builtins/bind.def
+ - use unwind_protect_var on rl_outstream
+
+general.c
+ - rework print_rlimtype to use INT_STRLEN_BOUND and handle the
+ most negative number correctly
+
+expr.c
+ - `tokval' should have been a `long', since all arithmetic is done
+ as longs
+
+builtins/history.def
+ - consolidate tests for valid history position in one block to
+ avoid duplicate code and strings
+
+builtins/ulimit.def
+ - fix check for overflow when setting limit to work when int is 32
+ bits and RLIMTYPE is 64
+
+lib/sh/tmpfile.c
+ - don't truncate the result of time(3) to int; just use time_t,
+ since it's being assigned to an `unsigned long'
+
+mailcheck.c
+ - use legal_number instead of atoi in time_to_check_mail() to catch
+ more numeric errors; consolidate error checking in one block
+ - last_time_mail_checked should be a time_t
+
+ 5/9
+ ---
+builtins/set.def
+ - recognize `set [-+]o nolog' if HISTORY is defined
+
+bashline.c
+ - new variable `dont_save_function_defs', set by `set -o nolog';
+ currently ignored
+
+command.h
+ - the `dest' member of a REDIRECTEE is now an `int'
+
+parse.y,redir.c
+ - changed uses of `redir.test' (where redir is a REDIRECTEE) since
+ it's now an int
+
+lib/readline/rlstdc.h
+ - don't mess around with `const', rely on configure to supply a
+ proper definition if the compiler doesn't support it
+
+lib/tilde/tilde.h
+ - include <config.h> if HAVE_CONFIG_H is defined
+ - don't mess around with `const', rely on configure
+
+builtins/shopt.def
+ - new read-only `shopt' option, login_shell, non-zero if shell is a
+ login shell (as decided by shell.c)
+ - new function set_login_shell(), sets shopt private value of
+ login_shell
+
+builtins/common.h
+ - new extern declaration for set_login_shell
+
+shell.c
+ - call set_login_shell after setting value of login_shell (in
+ main() and set_shell_name())
+
+parse.y
+ - added new `\A' prompt string escape sequence: time in 24-hour
+ HH:MM format
+
+configure.in, config.h.in
+ - check for <grp.h>, define HAVE_GRP_H if found
+
+builtins/complete.def
+ - add new `-A group/-g' option to complete group names
+
+pcomplete.h
+ - new define for CA_GROUP, used with group name completion
+
+pcomplete.c
+ - add code to support CA_GROUP group name completion
+
+bashline.c
+ - new function, bash_groupname_completion_function(), supports
+ programmable completion of group names
+
+bashline.h
+ - extern declaration for bash_groupname_completion_function
+
+lib/readline/bind.c
+ - new inputrc variable, `match-hidden-files', controls completion
+ matching files beginning with a `.' (on Unix)
+
+lib/readline/complete.c
+ - new variable, _rl_match_hidden_files, mirrors `match-hidden-files'
+ inputrc variable
+
+lib/readline/rlprivate.h
+ - extern declaration for _rl_match_hidden_files
+
+builtins/hash.def
+ - new `-t' option to list hash values for each filename argument
+
+builtins/read.def
+ - alarm(3) takes an `unsigned int' argument, not int
+ - check for arithmetic overflow with -t and -n options
+
+input.c
+ - check for read error before doing \r\n translation on cygwin in
+ b_fill_buffer
+ - reset bp->b_used to 0 instead of leaving it at -1 on read error
+ in b_fill_buffer
+
+builtins/shopt.def
+ - new functions, shopt_setopt(name, mode) and
+ shopt_listopt(name, mode) to give the rest of the shell an easy
+ interface
+
+builtins/common.h
+ - extern declarations for shopt_setopt and shopt_listopt
+
+shell.c
+ - new invocation options -O and +O, to list or set/unset shopt
+ options like +o/-o sets and unsets `set -o' options
+
+doc/{bash.1,bashref.texi}
+ - document `set -o nolog'
+ - document `login_shell' shopt option
+ - document new `\A' prompt string escape sequence
+ - document new `-t' option to `hash'
+ - document new `[+-]O' invocation option
+
+doc/bashref.texi
+ - add text to `Invoking Bash' section defining a login shell; text
+ taken from man page
+
+doc/bash.1, lib/readline/doc/rluser.texinfo
+ - documented new complete/compgen `-A group/-g' option
+
+lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
+ - documented new `match-hidden-files' inputrc variable
+
+ 5/10
+ ----
+configure.in
+ - fix AC_CHECK_PROG(ar, ...)
+ - add AC_CHECK_TYPE for ssize_t
+
+config.h.in
+ - new #undef for ssize_t
+
+lib/sh/zread.c
+ - int -> ssize_t fixes to mirror modern declarations of read and write
+ - the `off' variable in zsyncfd should be an off_t since it computes
+ a file offset
+ - the local buffer `lbuf' is now char, since it's not nice to pass
+ unsigned char * to read(2), and the values from it are assigned to
+ a char anyway
+ - lind and lused are now size_t, since they index into a buffer
+ - set lused to 0 on read error
+
+lib/sh/zwrite.c
+ - change second argument to type `char *', since ISO C says you have
+ to pass a `char *' to `write'
+
+externs.h
+ - fix extern declarations of zread, zread1, zreadc, and zwrite
+ - prototype extern declaration of qsort_string_compare
+ - add extern declaration for history_delimiting_chars() from parse.y
+
+input.h
+ - b_used and b_inputp members ofr struct BSTREAM are now size_t
+
+builtins/evalstring.c
+ - the number of chars read with zread in cat_file should be assigned
+ to a variable of type ssize_t
+
+input.c
+ - the number of chars read with zread in b_fill_buffer should be
+ assigned to a variable of type ssize_t
+ - `localbuf' is now type char[], since POSIX says you shouldn't pass
+ unsigned char * to read(2)
+ - in getc_with_restart(), use a variable of type unsigned char to
+ get a value from the local buffer and return it
+ - in ungetc_with_restart, explicitly return the character arg passed
+ to avoid relying on localbuf being unsigned char
+
+subst.c
+ - the number of chars read with zread in read_comsub should be
+ assigned to a variable of type ssize_t
+
+mksyntax.c
+ - instead of casting to unsigned char * in addcstr, use a variable
+ of type unsigned char and let the compiler do the work
+
+parse.y
+ - instead of casting to unsigned char * in yy_readline_get, use a
+ variable of type unsigned char and let the compiler do the work
+ - ditto for yy_string_get and shell_getc (cast to unsigned char)
+
+subst.c
+ - instead of casting to unsigned char when assigning to ifscmap in
+ expand_word_internal, use a variable of type unsigned char and
+ let the compiler do the work
+
+lib/sh/strtrans.c
+ - instead of casting to unsigned char in ansic_quote, use a variable
+ of type unsigned char and let the compiler do the work
+
+builtins/evalstring.c
+ - remove extern declarations for zwrite and run_trap_cleanup; they're
+ in externs.h
+ - prototype cat_file forward declaration
+
+Makefile.in
+ - remove -I$(includedir) from INCLUDES and SUBDIR_INCLUDES
+
+aclocal.m4
+ - change RL_LIB_READLINE_VERSION to set RL_PREFIX, RL_LIBDIR,
+ and RL_INCLUDEDIR to what it used to test the installed readline
+ library version for use by the caller
+ - change RL_LIB_READLINE_VERSION to not compute ac_cv_rl_prefix if
+ the caller has already assigned it a value
+ - rename _rl_prefix -> ac_cv_rl_prefix, _rl_libdir -> ac_cv_rl_libdir,
+ _rl_includedir -> ac_cv_rl_includedir
+
+configure.in
+ - change testing of whether to use the value of
+ $opt_with_installed_readline to be != no, to allow the user to
+ specify a prefix where the installed readline library may be found
+ - if --with-installed-readline=PREFIX is supplied, set ac_cv_rl_prefix
+ to PREFIX before calling RL_LIB_READLINE_VERSION
+ - if --with-installed-readline[=PREFIX] is supplied, don't set
+ RL_LIBDIR and RL_INCLUDEDIR; let RL_LIB_READLINE_VERSION take care
+ of it, set RL_INCLUDE=-I${RL_INCLUDEDIR}
+ - if --with-installed-readline[=PREFIX] is supplied, and we're
+ linking with the history library, assign $RL_LIBDIR to HIST_LIBDIR
+ so we use the same version of the installed readline and history
+ libraries
+
+Makefile.in, builtins/Makefile.in
+ - have configure substitute RL_INCLUDEDIR, set RL_INCLUDEDIR variable
+
+doc/bashref.texi
+ - updated description of --with-installed-readline configure option
+
+general.c
+ - moved QSFUNC typedef here from builtins/common.c
+
+{alias,bashline,variables,lib/sh/stringvec}.c
+ - cast fourth argument to qsort to (QSFUNC *)
+
+alias.c
+ - prototype forward declaration of qsort_alias_compare
+
+bashhist.c
+ - include <glob/glob.h> for extern declaration of glob_pattern_p
+ - remove extern declaration of history_delimiting_chars; it's now
+ in externs.h
+ - prototype forward declarations of histignore_item_func,
+ maybe_add_history, and bash_add_history
+
+bracecomp.c
+ - remove extern declaration for sh_backslash_quote; it's in externs.h
+
+braces.c
+ - remove extern declaration for extract_command_subst; it's in subst.h
+ - prototype forward declarations for expand_amble, array_concat, and
+ brace_gobbler
+
+error.c
+ - prototype extern declaration of give_terminal_to, fix bad call
+
+{execute_cmd,expr,findcmd,jobs,mailcheck,nojobs,pcomplete,print_cmd,redir,
+shell}.c
+ - prototype all static forward function declarations
+
+pcomplete.c
+ - changed some function parameters to `const char *' to avoid discarding
+ const qualifier
+
+make_cmd.c
+ - make_bare_word, make_word_flags, and make_word now take a
+ `const char *' string argument
+
+make_cmd.h
+ - changed extern declarations for make_bare_word and make_word
+
+print_cmd.c
+ - cprintf now takes a `const char *' as its first argument, like
+ xprintf and printf
+ - the conditional define for xprintf should have been HAVE_VPRINTF,
+ not HAVE_VFPRINTF
+
+shell.c
+ - in isnetconn(), the return value of sizeof() is size_t
+
+aclocal.m4
+ - add inclusion of stddef.h if STDC_HEADERS is defined to 1 in
+ BASH_CHECK_TYPE
+
+configure.in
+ - add a call to BASH_CHECK_TYPE for socklen_t (type of third argument
+ to getpeername(2))
+
+ 5/11
+ ----
+lib/readline/bind.c
+ - make `useq' a char array to pass to rl_macro_bind in
+ rl_parse_and_bind
+
+lib/readline/{{bind,isearch}.c,rlprivate.h}
+ - _rl_isearch_terminators is now a char *, not unsigned char *
+
+{subst,variables,lib/sh/tmpfile}.c
+ - dollar_dollar_pid is now a `pid_t' instead of `int'
+
+variables.c
+ - sbrand() now takes an `unsigned long' to set the seed value
+ - changed last_random_value to type int, since it's always between
+ 0 and 32767
+ - use strtoul to convert the value in assign_random instead of atoi
+ - take out casts in any arguments to sbrand()
+ - take out cast to int in call to inttostr in set_ppid()
+
+subst.c
+ - don't cast last_asynchronous_pid when passing to itos()
+
+{sig,subst}.c
+ - prototype all static forward function declarations
+
+ 5/14
+ ----
+{test,trap,variables}.c
+ - prototype all static forward function declarations
+
+variables.c
+ - free_variable_hash_data() now takes a PTR_T, a `generic pointer'
+
+builtins/{alias,bind,break,cd,complete,declare,enable,exit,fc,fg_bg,help,
+history,jobs,pushd,read,set,trap,umask,
+ - prototype all static forward function declarations
+
+builtins/read.def
+ - reset_eol_delim now takes a `char *' arg, since that's what the
+ unwind_protect functions pass it, and it ignores its arguments
+ anyway
+
+lib/readline/{histsearch,input,kill,rltty,search,vi_mode}.c
+ - prototype all static forward function declarations
+
+lib/tilde/tilde.c
+ - prototype all static forward function declarations
+ - tilde_find_prefix, tilde_find_suffix, isolate_tilde_prefix, and
+ glue_prefix_and_suffix now take `const char *' arguments where
+ appropriate
+
+configure.in,config.h.in
+ - check for vsnprintf, define HAVE_VSNPRINTF if found
+
+lib/readline/display.c
+ - use vsnprintf() in rl_message if it's available; if we don't, at
+ least set the last character in msg_buf to 0 to avoid overrun --
+ we really can't do anything about overflow at this point. if it's
+ available, this fixes buffer overflow problems in rl_message
+
+ 5/15
+ ----
+lib/readline/histexpand.c
+ - in get_history_word_specifier, allow any character to terminate
+ a `:first-' modifier, not just `:' and null. This is what csh
+ appears to do. This allows things like `!:0- xyzzy' to replace the
+ last argument with xyzzy
+
+ 5/18
+ ----
+configure.in, config.h.in
+ - check for <stdint.h>, define HAVE_STDINT_H if found
+ - check for intmax_t in <stdint.h>, define intmax_t as long if not
+ found
+
+ 5/21
+ ----
+builtins/kill.def
+ - change to use strerror() for error message when kill(2) fails
+
+aclocal.m4
+ - new macro, BASH_C_LONG_LONG, check for `long long'
+
+configure.in, config.h.in
+ - call BASH_C_LONG_LONG, define HAVE_LONG_LONG if found
+
+lib/sh/snprintf.c
+ - new file, with implementations of snprintf, vsnprintf, asprintf,
+ and vasprintf, derived from inetutils version
+
+Makefile.in, lib/sh/Makefile.in
+ - add snprintf.c/snprintf.o
+
+configure.in, config.h.in
+ - add checks for snprintf, asprintf, vasprintf, with appropriate
+ cpp defines
+
+lib/readline/{rldefs,xmalloc}.h, lib/readline/xmalloc.c
+ - xmalloc and xrealloc now take `size_t' arguments, like their bash
+ counterparts
+
+externs.h,lib/sh/itos.c
+ - inttostr and itos now take `long' arguments
+ - inttostr takes a `size_t' argument for the buffer size
+
+{expr,lib/malloc/malloc,variables,general}.c
+ - fixed calls to itos() by removing casts, etc.
+
+subst.[ch]
+ - get_dollar_var_value now takes a long, not an int
+ - sub_append_number now takes a long, not an int
+
+subst.c
+ - in parameter_brace_expand_word, use a long and legal_number to
+ translate ${N}, to avoid overflow
+ - in parameter_brace_expand_length, use a long and legal_number to
+ translate ${#N}, to avoid overflow
+ - in do_array_element_assignment, array_expand_index,
+ array_value_internal, use arrayind_t instead of int
+ - let verify_substring_values take long * arguments for the return
+ value of evalexp()
+ - pass long * arguments to verify_substring_values in
+ parameter_brace_substring
+ - parameter_brace_expand_length now returns `long'
+ - parameter_brace_expand now uses a long variable for the return
+ value of parameter_brace_expand_length
+ - param_expand now uses a long variable for the return value from
+ evalexp
+ - array_length reference now returns an `arrayind_t', since it can
+ return the num_elements member of an array, which is of type
+ arrayind_t
+
+subst.h
+ - array_expand_index now returns an `arrayind_t'
+
+array.[ch]
+ - array_subrange now takes arrayind_t arguments, not `int'
+ - dup_array_subrange now uses arrayind_t local variable to do
+ array indexing
+ - use long to print array indices in print_element
+
+variables.c
+ - null_array_assign, assign_dirstack, bind_array_variable
+ now take arrayind_t arguments as array indices
+ - assign_array_var_from_word_list, assign_array_var_from_string,
+ unbind_array_element now use arrayind_t local variables for
+ array indexing
+
+variables.h
+ - change extern declaration of bind_array_variable
+
+builtins/common.[ch]
+ - get_numeric_arg now returns a `long', since it usually returns
+ the value of legal_number()
+
+builtins/{shift,break}.def
+ - use long variables for the return value of get_numeric_arg
+
+builtins/history.def
+ - convert string argument to int only if it's in range
+
+builtins/pushd.def
+ - set_dirstack_element and get_dirstack_element now take `long'
+ index arguments
+ - get_dirstack_index now takes a `long' index argument, since it's
+ passed the converted value from legal_number
+
+lib/sh/timeval.c
+ - in print_timeval, don't assume that the number of minutes fits into
+ an int, since it's just seconds/60.
+
+lib/sh/clock.c
+ - ditto for print_clock_t
+
+ 5/22
+ ----
+shell.c
+ - since the -O option settings may possibly be overridden by the
+ normal shell initialization or posix initialization, save the
+ invocation options on an alist (with add_shopt_to_alist) and
+ process them after basic initialization (with run_shopt_alist)
+
+ 5/23
+ ----
+trap.h
+ - new define, BASH_NSIG, all system signals plus special bash traps
+
+trap.c, builtins/trap.def
+ - use BASH_NSIG for array bounds and loops where appropriate
+
+trap.c
+ - change decode_signal to disallow numeric signal numbers above
+ NSIG -- this means you can only reference special traps like
+ DEBUG by name
+ - new SPECIAL_TRAP(s) macro to test whether s is one of the special
+ bash traps (currently DEBUG and EXIT)
+ - change reset_or_restore_signal_handlers so command substitution
+ doesn't inherit the debug trap (like ksh93), and child processes
+ don't have to rely on initialize_traps being run to get rid of
+ any debug trap
+
+support/mksignames.c
+ - add extra "ERR" signal name, value NSIG+1, allocate space for it
+ and write it out in signal_names[]
+
+trap.h
+ - new define: ERROR_TRAP == NSIG+1, change BASH_NSIG to NSIG+2
+ - extern declarations for set_error_trap, run_error_trap
+ - new define: TRAP_STRING(s), expands to trap_list[s] if signal S
+ is trapped and not ignored, NULL otherwise
+
+trap.c
+ - add ERROR_TRAP to SPECIAL_TRAPS define
+ - initialize ERROR_TRAP stuff in initialize_traps
+ - new function: set_error_trap(command), sets the ERR trap string
+ - new function: run_error_trap(command), runs the ERR trap string
+ - set trap string for ERROR_TRAP to NULL in free_trap_strings
+ - change reset_or_restore_signal_handlers so child processes don't
+ inherit the ERR trap
+ - add case to call run_error_trap in maybe_call_trap_handler
+
+execute_cmd.c
+ - in execute_command_internal, keep track of ERR trap and call it if
+ necessary
+ - use TRAP_STRING to get the value of debug and error traps
+ - in execute_function, arrange things so the ERR trap is not inherited
+ by shell functions, and is saved and restored like the DEBUG trap
+
+doc/{bash.1,bashref.texi}
+ - documented new ERR trap
+
+tests/{trap.{tests,right},trap2.sub,trap2a.sub}
+ - added ERR trap tests
+
+subst.c
+ - on machines without /dev/fd, change the named pipe fifo list to a
+ list of structs containing pathname and proc information
+ - change unlink_fifo_list to kill the proc in the fifo list with
+ signal 0 and not remove the fifo if the proc is still alive. This
+ should fix the problem on those backward systems without /dev/fd
+ where fifos were removed when a job using process substitution was
+ suspended
+
+ 5/24
+ ----
+examples/loadables/getconf.h
+ - new file, with basic defines needed to make getconf work minimally
+ on POSIX systems without the necessary definitions
+
+examples/loadables/getconf.c
+ - replacement functions for confstr, sysconf, pathconf for systems
+ that lack them, providing a minimal posix interface
+ - heavily augmented getconf, now supports all POSIX.1-200x,
+ POSIX.2-200x, Solaris 7, AIX 4.2 getconf variables
+
+ 5/29
+ ----
+builtins/setattr.def
+ - make `readonly', `export', and `declare' print `invisible' variables
+ as just a command and variable name, without a value, when listing
+ all variables (as POSIX.2-200x d6 requires)
+
+ 5/30
+ ----
+
+configure.in
+ - upgraded to autoconf-2.50 on main development machine, so require
+ autoconf-2.50 in preparation for using some if its new features
+ - call AC_C_PROTOTYPES
+ - remove call to AC_EXEEXT, which now does the wrong thing
+ - changed AC_INIT to new flavor
+ - added call to AC_CONFIG_SRCDIR
+ - AC_CONFIG_HEADER -> AC_CONFIG_HEADERS
+ - AC_RETSIGTYPE -> AC_TYPE_SIGNAL
+
+configure.in, aclocal.m4, config.h.in
+ - removed call to BASH_LARGE_FILE_SUPPORT, use AC_SYS_LARGEFILE
+ standard support, with new macros _FILE_OFFSET_BITS and
+ _LARGE_FILES
+ - removed definition of BASH_LARGE_FILE_SUPPORT
+
+doc/bashref.texi
+ - document new `--enable-largefile' configure option
+
+lib/readline/readline.c
+ - change rl_set_prompt to call rl_expand_prompt unconditionally, so
+ local_prompt and local_prompt_prefix get set correctly
+
+ 6/6
+ ---
+lib/readline/complete.c
+ - don't append `/' or ` ' to a match when completing a symlink that
+ resolves to a directory, unless the match doesn't add anything
+ to the word. This means that a tab will complete the word up to
+ the full name, but not add anything, and a subsequent tab will add
+ a slash. Change to append_to_match; callers changed
+
+hashlib.c
+ - new function, hash_table_nentries (table), returns the number of
+ items in TABLE
+
+hashlib.h
+ - extern declaration for hash_table_nentries
+
+configure.in
+ - configure without bash malloc on openbsd; they claim it needs
+ eight-bit alignment (which the bash malloc provides, but...)
+
+ 7/2
+ ---
+stringlib.c
+ - only call RESIZE_MALLOCED_BUFFER from strsub() if the replacement
+ string length is > 0, avoid possible hangs if replacement is null
+
+subst.c
+ - don't include input.h; no longer needed
+
+configure.in
+ - remove calls to AC_SYS_RESTARTABLE_SYSCALLS and
+ BASH_SYS_RESTARTABLE_SYSCALLS; the results are no longer used
+
+config.h.in
+ - remove define for HAVE_RESTARTABLE_SYSCALLS
+
+aclocal.m4
+ - removed definition of BASH_SYS_RESTARTABLE_SYSCALLS; no longer used
+
+execute_cmd.c
+ - changed select command so `return' no longer terminates the select
+ command, so it can be used to return from an enclosing function.
+ This is as ksh (88 and 93) does it
+
+lib/readline/vi_mode.c
+ - fix trivial typo in declaration of vi_motion; `t' appears twice;
+ the second instance should be `T'
+
+ 7/3
+ ---
+configure.in
+ - don't add -static to LDFLAGS on Solaris 2.x. This means that the
+ auxiliary programs will be built as dynamic executables, but that
+ should do no harm
+
+ 7/5
+ ---
+lib/glob/fnmatch.c
+ - fix the code that processes **(pattern) to short-circuit if the
+ pattern is ill-formed or lacks a trailing `)' -- this fixes the
+ segfault on **(/*)
+
+Makefile.in, builtins/Makefile.in
+ - split CCFLAGS into CCFLAGS_FOR_BUILD and CFLAGS, to aid in
+ cross-compilation
+ - build programs that use $(CC_FOR_BUILD) using $(CCFLAGS_FOR_BUILD)
+
+configure.in, config.h.in
+ - check for getaddrinfo(3), define HAVE_GETADDRINFO if found
+
+lib/sh/netopen.c
+ - implemented a version of _netopen (_netopen6) that uses
+ getaddrinfo(3) if available, use if HAVE_GETADDRINFO is defined.
+ old _netopen is _netopen4; _netopen now calls either _netopen6
+ or _netopen4 as appropriate
+
+ 7/9
+ ---
+builtins/exit.def
+ - don't source ~/.bash_logout if subshell_environment is non-zero
+
+execute_command.c
+ - in execute_until_or_while, handle the case where `breaking' is
+ set in the loop test (e.g., by the job control code when a job
+ is stopped with SIGTSTP), but the return value from the test is
+ something that would cause the loop to break. Need to decrement
+ `breaking' in this case
+
+ 7/10
+ ----
+execute_cmd.c
+ - in execute_in_subshell, make sure a command of type cm_subshell
+ inherits its `enclosing' command's CMD_IGNORE_RETURN flag
+
+variables.c
+ - in maybe_make_export_env, don't allow restricted shells to put
+ exported functions in the export environment
+
+ 7/11
+ ----
+lib/glob/strmatch.h
+ - renamed old fnmatch.h
+ - changed guard #ifdef to _STRMATCH_H
+ - include system <fnmatch.h> if HAVE_LIBC_FNM_EXTMATCH is defined
+
+lib/glob/strmatch.c
+ - renamed old fnmatch.c
+ - include "strmatch.h"
+ - if HAVE_LIBC_FNM_EXTMATCH is defined, define a dummy version of
+ strmatch() that just calls fnmatch(3)
+
+lib/glob/glob.c
+ - include "strmatch.h"
+ - fnmatch -> strmatch
+
+Makefile.in, lib/glob/Makefile.in
+ - fnmatch -> strmatch
+
+{bashhist,execute_cmd,pathexp,pcomplete,shell,stringlib,subst,test}.c,
+pathexp.h,builtins/help.def
+ - include <glob/strmatch.h>
+ - fnmatch -> strmatch
+
+execute_cmd.c
+ - broke the code that parses the interpreter name from a #! line
+ out from execute_shell_script to a new function, getinterp()
+ - call getinterp from execute_shell_script
+ - use return value from getinterp in error message about bad
+ #! interpreter in shell_execve
+
+ 7/12
+ ----
+lib/readline/isearch.c
+ - the last isearch string is now remembered in a new static variable,
+ last_isearch_string
+ - if ^R^R is typed, readline now searches for the remembered isearch
+ string, if one exists
+
+ 7/24
+ ----
+pcomplete.h
+ - extern declaration for completions_to_stringlist()
+
+ 7/25
+ ----
+builtins/complete.def
+ - make compgen handle -o default option
+ - make compgen return success only if sl->list_len is non-zero,
+ indicating that there are items on the list
+
+ 7/31
+ ----
+execute_cmd.c
+ - in execute_connection, force stdin to /dev/null for asynchronous
+ commands if job control is not active, not just if the shell is
+ running a shell script (since you can run `set -m' in a script)
+
+lib/readline/rltty.c
+ - make sure _rl_tty_restore_signals resets `tty_sigs_disabled' on
+ successful restoration of the terminal modes
+ - make sure _rl_tty_disable_signals turns off IXON so that ^S and
+ ^Q can be read by rl_quoted_insert
+
+ 8/1
+ ---
+aclocal.m4
+ - new check for FNM_EXTMATCH being defined in <fnmatch.h>, as Ullrich
+ Drepper intends to do for new versions of GNU libc
+
+config.h.in
+ - new definition for HAVE_LIBC_FNM_EXTMATCH
+
+configure.in
+ - check for fnmatch, but don't define anything in config.h
+ - call BASH_FUNC_FNMATCH_EXTMATCH to check for FNM_EXTMATCH
+
+ 8/2
+ ---
+alias.h
+ - remove bogus extern declaration for xmalloc()
+ - include "stdc.h"
+ - add prototype declarations for all extern function declarations
+
+xmalloc.c,lib/readline/xmalloc.c
+ - fix xmalloc to return a PTR_T
+ - fix xrealloc to return a PTR_T and take a PTR_T as first argument
+
+include/ansi_stdlib.h
+ - extern declarations for malloc and realloc have them return PTR_T
+
+xmalloc.h
+ - new file, with extern declarations for functions in xmalloc.c
+
+general.h
+ - removed extern declarations for functions in xmalloc.c
+ - include xmalloc.h
+
+Makefile.in,builtins/Makefile.in
+ - update dependencies to include xmalloc.h
+
+parse.y,{alias,array,bashline,bracecomp,execute_cmd,findcmd,flags,general,
+hashcmd,locale,mailcheck,make_cmd,pathexp,pcomplete,print_cmd,stringlib,
+subst,unwind_prot,variables}.c
+builtins/{common,evalfile}.c
+builtins/{cd,command,enable,exec,printf,read,set}.def
+lib/sh/{makepath,netopen,pathphys,setlinebuf,shquote,snprintf,stringlist,
+strtrans,tmpfile}.c
+lib/readline/{util,terminal,shell,readline,macro,kill,isearch,input,
+histfile,histexpand,display,complete,bind}.c
+ - make sure all calls to xmalloc are cast to the right return value
+
+siglist.c
+ - include xmalloc.h
+
+parse.y,{alias,bashline,bracecomp,expr,make_cmd,nojobs,print_cmd,subst}.c
+builtins/{fc,printf,read}.def
+lib/sh/snprintf.c, lib/tilde/tilde.c
+lib/readline/{bind,display,histexpand,isearch,macro,util,vi_mode}.c
+ - make sure all calls to xrealloc are cast to the right return value
+
+lib/sh/{netopen,setlinebuf,shquote,snprintf}.c, lib/tilde/tilde.c
+ - include xmalloc.h, remove extern declaration of xmalloc
+
+lib/readline/xmalloc.h
+ - xmalloc and xrealloc should return PTR_T
+
+lib/readline/rldefs.h
+ - don't include an extern declaration for xmalloc
+
+ 8/7
+ ---
+support/shobj-conf
+ - fixed up commented-out stanzas for HP's unbundled C compiler on
+ HP/UX
+
+support/bashbug.sh
+ - force the subject to be changed from the default
+
+lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
+ - document that transpose-words swaps the last two words on the line
+ if point is at the end of the line
+
+ 8/9
+ ---
+stringlib.c
+ - fix possible infinite recursion problem with null pattern in
+ strsub()
+
+hashlib.c
+ - new function copy_hash_table to copy a hash table using a caller-
+ supplied function to copy item data (defaults to savestring())
+
+hashlib.h
+ - new extern declaration for copy_hash_table
+
+builtins/declare.def
+ - changes so that declare [-a] var=value assigns `value' to element 0
+ of array variable `var' like ksh93
+ - change so that declare [-a] var[N]=value assigns `value' to element
+ N of array variable `var' like ksh93
+
+ 8/13
+ ----
+arrayfunc.c
+ - new file, for miscellaneous array functions
+
+arrayfunc.h
+ - new file, extern declarations for functions in arrayfunc.c
+
+variables.c
+ - move convert_var_to_array, bind_array_variable,
+ assign_array_from_string, assign_array_var_from_word_list,
+ assign_array_var_from_string, quote_array_assignment_chars,
+ skipsubscript, unbind_array_element, print_array_assignment
+ to arrayfunc.c
+
+shell.h
+ - include arrayfunc.h after variables.h
+
+variables.h
+ - remove above extern function declarations moved to arrayfunc.h
+ - add extern declaration for var_lookup
+
+Makefile.in
+ - add arrayfunc.c, arrayfunc.h in appropriate places
+ - add arrayfunc.h to dependencies
+
+subst.c
+ - move valid_array_reference, array_expand_index, array_variable_part,
+ array_value_internal, array_value (now global), get_array_value,
+ do_array_element_assignment to arrayfunc.c
+
+subst.h
+ - extern declarations for functions above moved to arrayfunc.h
+
+arrayfunc.h
+ - extern declarations for above functions from subst.c
+
+subst.[ch]
+ - string_list_dollar_star and string_list_dollar_at are now global
+ functions
+ - quote_escapes is now a global function
+
+subst.c
+ - maybe_expand_string -> expand_string_if_necessary
+ - expand_string_to_string -> expand_string_to_string_internal
+ - new functions: expand_string_to_string and
+ expand_string_unsplit_to_string, which call
+ expand_string_to_string_internal with expand_string and
+ expand_string_unsplit as the FUNC arguments, respectively
+
+arrayfunc.c
+ - change array_expand_index to call expand_string_to_string instead
+ of maybe_expand_string
+
+ 8/14
+ ----
+shell.c
+ - in execute_env_file, call expand_string_unsplit_to_string
+
+mailcheck.c
+ - in check_mail, call expand_string_to_string
+
+variables.c
+ - in assign_in_env, call expand_string_unsplit_to_string
+
+arrayfunc.c
+ - new function, array_variable_name, splits an array reference into
+ a name (which is returned as a new string) and subscript
+ - change array_variable_part to just call array_variable_name and
+ look up the string returned with find_variable
+ - new function, find_or_make_array_variable (name, flags) which will
+ look up an array variable and convert a string variable to an
+ array if necessary. The FLAGS argument, if non-zero, says to
+ check the readonly and noassign attributes and fail if either is set
+
+builtins/read.def
+ - make `read -a aname' honor any readonly status of `aname'
+ - read -a now calls find_or_make_array_variable with FLAGS value 1
+
+arrayfunc.[ch], subst.c, builtins/{declare,read}.def
+ - do_array_element_assignment -> assign_array_element
+
+ 8/20
+ ----
+parse.y
+ - changed `for' command grammar to allow missing word list after `IN'
+ token, like latest POSIX drafts require
+
+lib/sh/tmpfile.c
+ - in sh_mktmpname(), check for filenum == 0 and init to non-zero number
+ in this case. it can happen on arithmetic overflow
+
+support/mkversion.sh
+ - added `[0-9].[0-9][0-9][a-z]' as an acceptable value for a
+ distribution to allow for intermediate versions, like 2.05a
+
+support/config.guess
+ - removed the addition of the output of `/usr/bin/objformat' when
+ creating the canonical name on FreeBSD machines, so the canonical
+ name is once again `freebsd4.2' instead of `freebsdelf4.2'
+
+ 8/22
+ ----
+lib/readline/{rlstdc,history,keymaps,readline,rldefs,rlprivate,rlshell,
+rltypedefs,xmalloc}.h
+lib/readline/{bind,compat,complete,display,funmap,histexpand,histsearch,
+input,isearch,kill,nls,parens,readline,rltty,search,shell,signals,vi_mode
+ - changed __P to PARAMS
+
+lib/tilde/tilde.[ch]
+ - changed __P to PARAMS
+
+{Makefile,configure}.in
+ - changed the version number to 2.05a
+ - changed the release status to `alpha1'
+
+ 8/23
+ ----
+support/shobj-conf
+ - support for building shared libraries on Darwin/MacOS X
+
+siglist.h
+ - extern declaration for strsignal() to compensate for lack of
+ a definition in some system include files
+
+jobs.c
+ - remove casts from strsignal() calls
+
+[bash-2.05a-alpha1 frozen]
+
+ 8/27
+ ----
+[bash-2.05a-alpha1 released]
+
+ 8/27
+ ----
+execute_cmd.c
+ - fix eval_arith_for_expr to handle the case where the expanded
+ word list is NULL, returning 0 in this case
+
+print_cmd.c
+ - in print_function_def, make sure that func_redirects is assigned
+ a value before being used
+
+ 8/28
+ ----
+alias.c
+ - include <ctype.h> for definition of isalpha()
+
+bashhist.h
+ - add prototypes for extern function declarations
+
+flags.c
+ - include bashhist.h for extern function declarations
+
+mksyntax.c
+ - include <unistd.h> if HAVE_UNISTD_H is defined in config.h
+
+parse.y
+ - include test.h for extern function declarations
+
+externs.h
+ - change extern declaration for setlinebuf to sh_setlinebuf
+
+stringlib.c
+ - include <glob/glob.h> for extern function declarations
+
+variables.h
+ - add function prototypes for all of the sv_* functions
+
+builtins/common.h
+ - add extern declarations for set_shellopts() and parse_shellopts()
+ from builtins/set.def
+
+variables.c
+ - include "hashcmd.h" for extern declaration for flush_hashed_filenames
+ - include "pathexp.h" for extern declaration for setup_glob_ignore
+
+lib/malloc/malloc.c
+ - cast to `long' instead of `int' in memalign for 64-bit machines
+
+{pcomplete,trap}.c
+ - changed printf escape sequences used to print pointers to %p
+
+lib/readline/undo.c
+ - include "xmalloc.h" for extern function declaration
+
+input.h
+ - add function prototypes to extern declarations for getc_with_restart
+ and ungetc_with_restart
+
+variables.[ch]
+ - changed type of `function' member of `struct name_and_function' to
+ `sv_func_t', which is defined and prototyped in variables.h
+ - map_over now takes an `sh_var_map_func_t *'
+
+shell.h
+ - start of a set of function pointer typedefs like those in
+ lib/readline/rltypedefs.h
+
+hashlib.[ch]
+ - second paramter to flush_hash_table is now an `sh_free_func_t *'
+
+trap.c
+ - parameter to reset_or_restore_signal_handlers is now an
+ `sh_resetsig_func_t *'
+
+pcomplete.h, pcomplib.c
+ - function pointer argument to print_all_compspecs is now an
+ `sh_csprint_func_t *'
+ - function pointer `list_getter' element of an `ITEMLIST' is now
+ prototyped with __P((...)) instead of using `Function *'
+
+jobs.[ch]
+ - `j_cleanup' member of a JOB is now an `sh_vptrfunc_t *'
+
+alias.c
+ - map_over_aliases now takes an `sh_alias_map_func_t *'
+ - free_alias_data now takes a `PTR_T'
+
+pathexp.c
+ - function pointer argument to ignore_globbed_names is now an
+ `sh_ignore_func_t *'
+
+bashline.c
+ - function pointer argument to _ignore_completion_names is now an
+ `sh_ignore_func_t *'
+
+pathexp.h,{bashhist,bashline.c
+ - `item_func' member of a `struct ignorevar' is now an
+ `sh_iv_item_func_t *'
+
+builtins/evalfile.c
+ - `errfunc' is now an `sh_vmsg_func_t *'
+
+jobs.c
+ - map_over_job now takes an `sh_job_map_func_t *' as its first argument
+
+array.[ch]
+ - function pointer argument to array_walk is now an
+ `sh_ae_map_func_t *'
+
+general.c
+ - tilde_expansion_preexpansion_hook has type `tilde_hook_func_t *',
+ and so the assignment in tilde_initialize doesn't need a cast
+
+list.c
+ - map_over_words now takes an `sh_icpfunc_t *' as its second argument
+
+input.h
+ - the `getter' and `ungetter' function pointer members of a
+ BASH_INPUT are now of types `sh_cget_func_t *' and
+ `sh_cunget_func_t *' respectively
+ - init_yy_io now takes an `sh_cget_func_t *' as its first argument and
+ an `sh_cunget_func_t *' as its second
+
+parse.y
+ - init_yy_io now takes an `sh_cget_func_t *' as its first argument and
+ an `sh_cunget_func_t *' as its second
+ - initialize_bash_input casts bash_input.getter and bash_input.ungetter
+ appropriately
+
+builtins/mkbuiltins.c
+ - make the extern function definitions written to builtext.h have
+ prototypes with __P((...))
+ - include "stdc.h"
+ - change Function to mk_handler_func_t
+ - fixed comment_handler to take the right number of args
+ - prototyped all the handler functions with __P((...))
+
+builtins.h
+ - the `function' member of a struct builtin is now of type
+ `sh_builtin_func_t *'
+
+builtins/common.[ch]
+ - last_shell_builtin, this_shell_builtin are now of type
+ `sh_builtin_func_t *'
+ - find_shell_builtin, builtin_address, find_special_builtin now return
+ `sh_builtin_func_t *'
+
+builtins/exit.def, {execute_cmd,jobs,nojobs,variables}.c, parse.y
+ - changed all declarations of last_shell_builtin and this_shell_builtin
+
+execute_cmd.c
+ - execute_builtin, execute_builtin_or_function,
+ execute_subshell_builtin_or_function now take an
+ `sh_builtin_func_t *' instead of a `Function *' for argument
+ - changed appropriate variables from `Function *' to
+ `sh_builtin_func_t *'
+
+builtins/{bind,builtin,enable,read,setattr}.def
+ - replaced uses of `Function *' in variable declarations with
+ appropriate types (sh_builtin_func_t * or rl_command_func_t *)
+
+builtins/set.def
+ - set_func and get_func members of binary_o_options are now of types
+ `setopt_set_func_t *' and `setopt_get_func_t *', which are
+ prototyped
+
+builtins/shopt.def
+ - set_func member of shopt_vars is now of type `shopt_set_func_t *'
+
+bashline.c
+ - enable_hostname_completion now returns `int' (the old value of
+ perform_hostname_completion)
+
+[The only use of Function and VFunction now is for unwind-protects]
+
+ 9/4
+ ---
+lib/sh/getcwd.c
+ - use const define from config.h rather than `CONST'
+ - use PTR_T define from xmalloc.h rather than `PTR'
+ - include xmalloc.h for PTR_T
+ - remove PATH_MAX define, rely on value from maxpath.h
+
+{general,mailcheck}.c, lib/sh/{pathcanon,pathphys}.c
+ - don't include maxpath.h directly; it's already included by shell.h
+
+lib/sh/mailstat.c
+ - new `mailstat()' implementation, to stat a mailbox file for
+ mail checking. handles maildir-style mail directories with one
+ file per message and creates a dummy stat struct from them
+
+lib/sh/Makefile.in
+ - add mailstat.c and mailstat.o in the appropriate places
+
+lib/malloc/malloc.c
+ - augmented implementation with wrapper functions that pass in file
+ and line number information from cpp. currently unused, but a
+ placeholder for future debugging and use tracking
+
+lib/malloc/shmalloc.h
+ - new file, extern declarations for allocation wrapper functions for
+ use by the shell (and others, I guess)
+
+xmalloc.[ch]
+ - wrapper functions for xmalloc, xfree, xrealloc (sh_ prefixed) that
+ pass cpp line number information through to the malloc functions,
+ if USING_BASH_MALLOC is defined
+
+ 9/5
+ ---
+lib/malloc/gmalloc.c
+ - removed; no longer part of distribution
+
+lib/malloc/Makefile.in
+ - removed references to gmalloc.[co]
+
+configure.in, doc/bashref.texi
+ - removed references to `--with-glibc-malloc' configure option
+
+{configure,Makefile}.in
+ - changed the way bash malloc is configured into the Makefile, making
+ it more like how readline is configured. If the bash malloc is
+ not configured in, nothing in lib/malloc will be built
+
+ 9/6
+ ---
+lib/malloc/imalloc.h
+ - new file, some internal malloc definitions
+
+lib/malloc/mstats.h
+ - new file, definitions for malloc statistics structs and functions
+
+lib/malloc/trace.c
+ - new file, malloc tracing functions (currently just print messages
+ to stderr), code is #ifdef MALLOC_TRACE
+
+lib/malloc/stats.c
+ - new file, moved malloc stats code from malloc.c to here
+
+lib/malloc/malloc.c
+ - moved some definitions to imalloc.h
+ - moved stats code to stats.c
+ - malloc tracing calls added to internal_{malloc,realloc,free}, all
+ #ifdef MALLOC_TRACE
+
+lib/malloc/Makefile.in, Makefile.in
+ - added {imalloc,mstats}.h, {trace,stats}.c
+
+parse.y
+ - changed decode_prompt_string to save and restore $?
+ (last_command_exit_value) around calls to expand_prompt_string(),
+ so command substitutions in PS1, etc. don't change $?
+
+{array,subst}.c
+ - a couple more arrayind_t fixes from Paul Eggert
+
+configure.in
+ - remove redundant check for wait3(2)
+
+redir.h
+ - fixed a typo (stdin_redirs -> stdin_redirects)
+
+ 9/10
+ ----
+execute_cmd.c
+ - remove check for \n and \r from WHITESPACE macro, since those
+ chars are not whitespace as returned by the whitespace(c) macro
+ - getinterp now takes a `char *' as first arg, not unsigned char *
+ - execute_shell_script now takes a `char *' as first arg, not
+ unsigned char *
+ - fix typo in forward declaration for `initialize_subshell'
+
+general.[ch]
+ - check_binary_file now takes a (char *) argument, not unsigned char *
+ - pass unsigned char to isspace and isprint because of ISO C fuckup
+ - bash_tilde_expand now takes a `const char *' as its argument
+
+builtins/evalfile.c, shell.c
+ - buffer passed to check_binary_file is char, not unsigned char
+
+parse.y
+ - fix extern declaration for yyerror()
+ - yyerror now takes a `const char *' as first arg
+
+{error,jobs}.c
+ - fixes to printf-style functions to handle pids wider than an int
+
+lib/readline/{isearch,vi_mode}.c
+ - fix call to rl_message in rl_display_search (remove extra arg)
+
+variables.c
+ - fix missing argument to builtin_error in make_local_variable
+
+builtins/getopts.def
+ - since getopts takes no options, change while loop calling
+ internal_getopts to a simple `if' check
+
+builtins/printf.def
+ - since printf takes no options, change while loop calling
+ internal_getopts to a simple `if' check
+
+lib/readline/bind.c
+ - remove _SET_BELL macro, expand code inline
+
+lib/readline/input.c
+ - change _rl_input_available to use either select or FIONREAD,
+ but not both
+
+lib/readline/readline.c
+ - fix rl_digit_loop to remove unreachable code at end of loop
+
+{bashhist,bashline,expr,jobs,redir,shell}.c, builtins/fc.def, lib/sh/snprintf.c
+ - bracket unused functions with #ifdef INCLUDE_UNUSED/#endif
+ - remove some unused variables
+
+execute_cmd.c
+ - remove #ifdef'd code that allowed `return' to terminate a select
+ statement
+
+expr.c
+ - remove some extraneous tests from strlong()
+
+array.h
+ - arrayind_t is now a long, since shell arithmetic is performed as
+ longs
+ - remove second declaration of new_array_element
+
+builtins/printf.def
+ - in mklong, xrealloc cannot return NULL, so don't check for it
+ - remove some #if 0 code
+ - fix core dump triggered by a format specification with more than
+ one `*'
+ - remove `foundmod', since its value mirrors `modchar != 0'
+ - include "common.h" for builtin_{error,usage} declarations
+
+Makefile.in,builtins/Makefile.in
+ - updated some dependencies due to new include files
+
+pcomplete.c
+ - include "execute_cmd.h" for declaration of execute_shell_function
+
+arrayfunc.c
+ - include <stdio.h> for printf
+ - include "builtins/common.h" for builtin_error declaration
+
+builtins/evalstring.c
+ - include "../trap.h" for run_trap_cleanup declaration
+
+builtins/help.def
+ - include "common.h" instead of locally declaring builtin_error
+ and builtin_usage
+
+error.h
+ - add extern declaration for itrace()
+ - add prototype to extern declaration of get_name_for_error
+ - file_error now takes a `const char *' as first argument
+
+externs.h
+ - added prototype for sh_setlinebuf declaration, bracketed with
+ NEED_SH_SETLINEBUF_DECL so we don't need stdio.h everywhere
+ - add extern declaration for parse.y:return_EOF()
+
+shell.c
+ - add NEED_SH_SETLINEBUF_DECL before including shell.h
+
+lib/readline/callback.c
+ - include <stdlib.h> or "ansi_stdlib.h" for abort declaration
+
+quit.h
+ - remove declaration of throw_to_top_level
+
+subst.c
+ - remove unused extern declaration for getopts_reset
+
+lib/sh/netopen.c
+ - include <shell.h> for legal_number, etc.
+ - add prototype for inet_aton extern declaration
+
+lib/sh/clock.c
+ - include <stdc.h> for __P declaration
+ - add extern declaration for get_clk_tck
+
+support/mkversion.sh
+ - changed so that extern function declarations for functions in
+ version.c (moved from externs.h) are in the generated version.h
+
+shell.h
+ - include version.h
+
+version.c
+ - various `char *' version variables are now `const char *'
+
+general.h
+ - add prototype for same_file, bracketed with _POSIXSTAT_H
+ #ifdef, since that's what include/posixstat.h defines
+
+builtins/common.[ch]
+ - _evalfile, maybe_execute_file, source_file, and fc_execute_file
+ now take a `const char *' as their first argument
+
+eval.c
+ - removed extern declaration of yyparse; it's in externs.h
+
+parse.y
+ - added prototypes to static forward function declarations
+ - changed local `all_digits' variable in read_token_word () to
+ all_digit_token to avoid clash with all_digits() function in
+ general.c
+
+{bashhist,copy_cmd,make_cmd,hashlib,mailcheck}.c
+ - added prototypes for static function declarations
+
+shell.h
+ - add extern declarations for interactive, interactive_shell,
+ changed c files with extern declarations
+
+pcomplete.c
+ - changed it_init_aliases to avoid shadowing global variable
+ `aliases'
+
+bashline.c,pathexp.c,general.h
+ - sh_ignore_func_t is now a pointer to a function taking a
+ `const char *'; users changed
+
+configure.in
+ - test for <strings.h>
+
+config.h.in
+ - add #undef HAVE_STRINGS_H
+
+bashansi.h
+ - change like recommended in autoconf manual
+
+ 9/11
+ ----
+[a date which will live in infamy. prayers for the victims.]
+
+execute_cmd.c
+ - don't use an absolute index into abuf in mkfmt, use
+ sizeof(abuf) to compute last index
+
+builtins/common.c
+ - fix read_octal to do a better job of detecting overflow while
+ iterating through the string
+
+builtins/umask.def
+ - change octal-print mode to print 4 digits, like other shells
+ - cast umask to unsigned long to avoid problems on systems where
+ it's wider than an int (POSIX doesn't guarantee that mode_t is
+ no wider than an int, but real-world systems use int)
+
+builtins/printf.def
+ - mklong can never return NULL (it uses xrealloc), so the mainline
+ doesn't need to check for NULL returns
+ - new function, getldouble (long double *), to get long doubles
+ - mklong now takes a `char *' as its second argument, the modifier(s)
+ to use
+ - changed use of `modchar' to handle more than a single modifier
+ character
+ - changed to handle `long double' and `L' formats better, rather
+ than discarding long double information
+ - since printf now follows the POSIX.2 rules for conversion errors,
+ we can dispense with the status returns from the get* functions
+ - make the get* functions as similar in structure as possible,
+ removing type casts, etc.
+
+lib/sh/timeval.c,execute_cmd.c
+ - change some instances of `long' to `time_t', for systems where
+ a time_t is bigger than a long
+
+jobs.c
+ - include "posixtime.h" instead of <sys/time.h>
+
+config.h.in
+ - add defines for HAVE_DECL_CONFSTR, HAVE_DECL_STRTOLD,
+ HAVE_DECL_SBRK, HAVE_DECL_PRINTF
+ - remove defines for SBRK_DECLARED and PRINTF_DECLARED
+ - add _GNU_SOURCE define
+
+configure.in
+ - add AC_CHECK_DECLS for strtold, confstr, sbrk, printf
+ - remove call to BASH_FUNC_SBRK_DECLARED
+ - remove call to BASH_FUNC_PRINTF
+
+xmalloc.c, lib/malloc/malloc.c
+ - change check of SBRK_DECLARED to HAVE_SBRK_DECL
+
+print_cmd.c
+ - change PRINTF_DECLARED to HAVE_DECL_PRINTF
+
+builtins/evalstring.c, builtins/common.h
+ - parse_and_execute now takes a `const char *' as its second argument
+
+input.h,parse.y
+ - with_input_from_* functions now take a `const char *' as their
+ second argument
+ - init_yy_io now takes a `const char *' as its fourth argument
+
+parse.y,externs.h
+ - parse_string_to_word_list now takes a `const char *' as its second
+ argument
+
+tests/builtins.right
+ - change output to account for extra digit in umask output
+
+pcomplib.c
+ - free_progcomp now takes a PTR_T argument
+
+builtins/bashgetopt.h
+ - include <stdc.h>
+ - add prototypes to extern declarations
+
+builtins/shopt.def
+ - add prototypes to static function declarations
+
+builtins/{fc,umask,wait}.def, builtins/{bashgetopt,common}.c
+ - include <ctype.h> for isdigit macro (referenced by `digit(x)')
+
+lib/readline/complete.c
+ - added more static function declarations with prototypes
+
+ 9/12
+ ----
+lib/sh/tmpfile.c
+ - use `^' instead of `*' in sh_mktmpname to make filenames a bit
+ more random
+
+include/stdc.h,lib/readline/rldstdc.h
+ - add __attribute__ definition
+
+builtins/common.h
+ - add printf __attribute__ to declaration of builtin_error
+
+error.h
+ - add printf __attribute__ to declaration of programming_error,
+ report_error, parser_error, fatal_error, sys_error, internal_error,
+ internal_warning
+
+lib/readline/readline.h
+ - add printf __attribute__ to declaration of rl_message
+
+pcomplete.c
+ - add printf __attribute__ to declaration of debug_printf
+
+print_cmd.c
+ - add printf __attribute__ to declarations of cprintf, xprintf
+
+include/chartypes.h
+ - new file, includes <ctype.h> and defines macros that check for
+ safe (ascii) arguments before calling the regular ctype macros
+
+{alias,bashline,execute_cmd,expr,findcmd,general,locale,mksyntax,stringlib,subst,variables}.c
+parse.y
+builtins/{bashgetopt,common}.c
+builtins/{fc,printf,umask,wait}.def
+lib/glob/strmatch.c
+lib/sh/{oslib,pathcanon,pathphys,snprintf,strcasecmp,strindex,stringvec,strtod,strtol,strtrans}.c
+examples/loadables/{head,sleep}.c
+ - include "chartypes.h" or <chartypes.h> instead of <ctype.h>
+
+Makefile.in,{builtins,lib/{glob,sh}}/Makefile.in
+ - update dependencies to include chartypes.h
+
+lib/sh/inet_aton.c
+ - use `unsigned char' instead of `char' to pass to ctype.h functions
+
+lib/sh/netopen.c
+ - check for '0' <= host[0] <= '9' in _getaddr instead of using
+ isdigit
+
+subst.c,lib/sh/shquote.c
+ - change array subscripts into sh_syntaxtab from `char' to
+ `unsigned char'
+
+{alias,bashline,execute_cmd,expr,general,subst}.c, parse.y
+builtins/{fc,printf,umask,wait}.def builtins/{bashgetopt,common}.c
+lib/sh/{pathcanon,pathphys,snprintf,strcasecmp,strindex,strtod,strtol,strtrans}.c
+examples/loadables/{head,sleep}.c
+ - change to use some of the new macros in chartypes.h
+ - remove old local macro definitions now provided by chartypes.h
+
+general.h
+ - remove definition of isletter, ISOCTAL, digit, digit_value
+ - change legal_variable_starter and legal_variable_char to use
+ chartypes.h macros
+ - change ABSPATH to use chartypes.h macros
+
+lib/readline/util.c
+ - change to use Paul Eggert's FUNCTION_FOR_MACRO define to define
+ function replacements for macros in chardefs.h
+
+lib/readline/chardefs.h
+ - added some of the same macros as in chartypes.h
+ - change _rl_lowercase_p, _rl_uppercase_p, _rl_digit_p,
+ _rl_to_upper, _rl_to_lower to use new IS* macros
+ - added _rl_isident macro from vi_mode.c:isident
+
+lib/readline/{bind,complete,nls}.c
+ - change to use some of the new macros from chardefs.h
+
+lib/readline/vi_mode.c
+ - isident -> _rl_isident
+ - remove local defines of macros in chardefs.h
+
+lib/sh/strtol.c
+ - updated to new version, modified from glibc 2.2.4 and sh-utils-2.0.
+ This one can do strtoll and strtoull, if necessary
+
+ 9/13
+ ----
+builtins/ulimit.def
+ - changed get_limit so it retrieves both hard and soft limits
+ instead of one or the other
+ - changed callers of get_limit
+ - changed getmaxvm to take soft limit, hard limit as arguments
+ - changed getmaxuprc to just take a single argument, the value
+ - changed calls to printone() to pass soft limit or hard limit
+ depending on `mode' instead of using old current_limit variable
+ - moved check for out-of-range limits in ulimit_internal into the
+ block that converts a string argument to a value of type rlim_t
+ - changed RESOURCE_LIMITS struct to break the description into a
+ description string and separate scale factor string
+ - changed print_all_limits to print a single error message if
+ get_limit fails, including limits[i].description now that the
+ scale factor has been removed from the description string
+ - removed DESCFMT define, since it's now used only in printone()
+ - changed printone to print the option character associated with a
+ particular limit if we're printing multiple limits
+ - changed calls to builtin_error to print the description associated
+ with a limit if setting or getting the limit fails
+ - added support for new POSIX 1003.1-200x rlim_t values:
+ RLIM_SAVED_CUR and RLIM_SAVED_MAX, which expand to the current
+ soft and hard limits, whatever they are
+ - changed printone to print `hard' or `soft' if the current limit is
+ RLIM_SAVED_MAX or RLIM_SAVED_CUR, respectively
+ - changed ulimit_internal to handle new `hard' and `soft' arguments
+ - changed help text do describe the special limit arguments `hard',
+ `soft', and `unlimited'
+
+doc/{bash.1,bashref.texi}
+ - documented new `hard' and `soft' limit arguments to `ulimit'
+
+hashlib.[ch]
+ - find_hash_item now takes a `const char *' is its first argument
+ - hash_string now takes a `const char *' is its first argument
+ - remove_hash_item now takes a `const char *' as its first argument
+
+pcomplib.c
+ - removed cast from first argument to find_hash_item in find_compspec
+
+general.[ch]
+ - absolute_program now takes a `const char *' as its argument
+ - absolute_pathname now takes a `const char *' as its argument
+
+lib/glob/glob.[ch]
+ - glob_pattern_p now takes a `const char *' as its argument
+
+bashline.c
+ - removed cast from first argument to absolute_program in
+ command_word_completion_function
+ - removed cast from first argument to glob_pattern_p in
+ attempt_shell_completion
+
+findcmd.[ch]
+ - find_absolute_program, find_user_command, find_path_file,
+ search_for_command, user_command_matches now take a
+ `const char *' as their first argument
+ - file_status, executable_file, is_directory, executable_or_directory
+ now take a `const char *' as their argument
+ - _find_user_command_internal, find_user_command_internal,
+ find_user_command_in_path
+
+lib/sh/makepath.c, externs.h
+ - changed sh_makepath so it takes `const char *' for its first
+ two arguments
+
+hashcmd.[ch]
+ - find_hashed_filename now takes a `const char *' as its first arg
+ - remove_hashed_filename now takes a `const char *' as its first arg
+
+variables.[ch]
+ - new_shell_variable, var_lookup, shell_var_from_env_string,
+ find_name_in_env_array, bind_function, makunbound,
+ bind_name_in_env_array, bind_tempenv_variable, bind_variable
+ now take a `const char *' as their first arg
+ - find_function, make_new_variable, find_tempenv_variable,
+ find_variable_internal, find_variable, set_func_read_only,
+ set_func_auto_export, all_variables_matching_prefix, assign_in_env,
+ assignment, kill_local_variable, make_local_variable, unbind_variable
+ now take a `const char *' as their arg
+ - mk_env_string now takes `const char *' arguments
+
+arrayfunc.[ch]
+ - skipsubscript now takes a `const char *' as its argument
+
+ 9/17
+ ----
+lib/readline/complete.c
+ - attempt to preserve case of what the user typed in
+ compute_lcd_of_matches if we're ignoring case in completion
+
+builtins/{let,pushd}.def,{execute_cmd,expr}.c
+ - change some 0L constants to 0 and let the compiler sort it out
+
+ 9/18
+ ----
+lib/malloc/alloca.c
+ - alloca now takes a `size_t' argument
+
+include/memalloc.h
+ - if we're providing an extern function declaration for alloca,
+ use `void *' and prototype if __STDC__ is defined
+ - if HAVE_ALLOCA_H is defined, but C_ALLOCA is defined, don't
+ define HAVE_ALLOCA
+
+ 9/19
+ ----
+subst.c
+ - do_assignment_internal, do_assignment, and do_assignment_no_expand
+ now take a `const char *' as their first argument
+
+general.h
+ - a `sh_assign_func_t' is now a function taking a `const char *' and
+ returning int
+
+hashcmd.c
+ - free_filename_data now takes a `PTR_T' argument to agree with the
+ typedef for `sh_free_func_t'
+
+lib/sh/snprintf.c
+ - use TYPE_MAXIMUM define like strtol.c instead of huge constants
+
+ 9/20
+ ----
+lib/sh/snprintf.c
+ - don't bother to compile the bulk of the body unless HAVE_SNPRINTF
+ or HAVE_ASPRINTF is not defined
+
+ 9/24
+ ----
+flags.c
+ - ignore `set -n' if the shell was started interactively
+
+lib/readline/readline.c
+ - initialize readline_echoing_p to 0; let the terminal-specific code
+ in rltty.c set it appropriately
+
+lib/malloc/malloc.c
+ - changed internal_memalign() slightly to avoid compiler warnings about
+ negating an unsigned variable (-alignment -> (~alignment + 1))
+
+ 9/27
+ ----
+lib/readline/readline.c
+ - changed rl_newline to set _rl_history_saved_point appropriately
+ for the {previous,next}_history code
+
+lib/readline/rlprivate.h
+ - extern declaration for _rl_history_preserve_point
+
+lib/readline/bind.c
+ - new bindable variable, `history-preserve-point', sets value of
+ _rl_history_preserve_point
+
+ 10/1
+ ----
+lib/malloc/table.c
+ - new file, with a map of allocated (and freed) memory for debugging
+ multiple frees, etc. Indexed by hash on values returned by
+ malloc(); holds size, file and line number info for last alloc or
+ free and a couple of statistics pointers
+
+lib/malloc/malloc.c
+ - a few cleanups; added calls for registering allocations and frees
+ if MALLOC_REGISTER is defined
+ - replaced MALLOC_RETURN with explicit MALLOC_NOTRACE define
+ - reordered fields in `struct...minfo' in `union mhead' to restore
+ eight-byte alignment
+ - added explicit checks for underflow in free and realloc since
+ checking mh_magic2 is not sufficient to detect everything (it's
+ no longer the last field in the struct, and thus not the bytes
+ immediately preceding what's returned to the user)
+ - new function, xbotch, for printing file and line number info for
+ the failed assertion before calling botch() (programming_error())
+
+configure.in
+ - replaced call to BASH_C_LONG_LONG with call to
+ AC_CHECK_TYPES([long long])
+ - moved the C compiler tests before the tests for various
+ system types, so we can know whether we have `long long'
+ before testing for 64-bit types
+ - if we have `long long', check for sizeof(long long) and save value
+
+aclocal.m4
+ - changed BASH_TYPE_BITS64_T to check `long long' before `long', but
+ after `double'
+
+ 10/2
+ ----
+lib/malloc/malloc.c
+ - made malloc and realloc both agree on the rounding for a request of
+ size N (round up to nearest multiple of 8 after adjusting for
+ malloc overhead); uses new ALLOCATED_BYTES macro
+ - realloc and free now use new IN_BUCKET macro for underflow checks
+
+execute_cmd.c
+ - fixed time_command() to use `time_t' instead of `long' to hold
+ time stamps
+
+lib/sh/clock.c
+ - clock_t_to_secs now takes a `time_t *' second argument
+ - fixed print_clock_t to call clock_t_to_secs with right arguments
+
+lib/sh/timeval.c
+ - fixed print_timeval to make `minutes' a `long' and make its
+ structure identical to print_clock_t
+
+redir.c
+ - changed redirection_error to check for EBADF and use the file
+ descriptor being redirected from in the error message if it
+ is >= 0
+
+Makefile.in
+ - changed release status to `beta1'
+
+lib/glob/collsyms.h
+ - added a few ASCII symbols to the posix_collsyms array
+
+ 10/3
+ ----
+aclocal.m4
+ - fixed typo in BASH_TYPE_BITS64_T
+
+configure.in
+ - added check for unsigned chars with AC_C_CHAR_UNSIGNED
+
+config.h.in
+ - added PROTOTYPES and __CHAR_UNSIGNED__ #defines
+
+general.h
+ - if CHAR_MAX is not define by <limits.h>, provide a definition
+
+builtins/printf.def
+ - change tescape() to mask \0 and \x escape sequences with 0xFF
+ - change tescape() to process at most two hex digits after a `\x'
+
+lib/sh/strtrans.c
+ - change strtrans() to mask \0 and \x escape sequences with 0xFF
+ - change strtrans() to process at most two hex digits after a `\x'.
+ This affects `echo -e' and $'...' processing
+
+lib/readline/bind.c
+ - changed rl_translate_keyseq() to process at most two hex digits
+ after a `\x'
+
+lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
+ - changed documentation for key binding escape sequences to specify
+ that at most two hex digits after \x are translated
+ - changed documentation for key binding to specify that the result
+ of \nnn or \xhh escapes is an eight-bit value, not just ASCII
+
+doc/{bash.1,bashref.texi}
+ - changed documentation of $'...' to specify that at most two hex
+ digits after \x are translated
+ - changed `echo' documentation to specify that at most two hex
+ digits after \x are translated
+ - changed documentation for `echo' and $'...' to specify that the
+ result of \nnn or \xhh escapes is an eight-bit value, not just ASCII
+
+ 10/4
+ ----
+lib/malloc/malloc.c
+ - changed interface for xbotch to pass memory address and error code
+ as two additional arguments
+ - call mregister_describe_mem from xbotch to get the last allocation
+ or free before the botch
+
+configure.in
+ - call AC_CHECK_DECLS([strsignal])
+
+config.h.in
+ - add HAVE_DECL_STRSIGNAL
+
+siglist.h
+ - make declaration of strsignal() dependent on !HAVE_DECL_STRSIGNAL
+
+ 10/5
+ ----
+support/texi2html
+ - upgraded to version 1.64
+
+ 10/9
+ ----
+aclocal.m4
+ - added check for `long long' to BASH_TYPE_PTRDIFF_T
+
+configure.in
+ - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ
+
+aclocal.m4
+ - replaced body of BASH_STRUCT_TERMIOS_LDISC with call to
+ AC_CHECK_MEMBER(struct termios.c_line, ...)
+ - replaced body of BASH_STRUCT_TERMIO_LDISC with call to
+ AC_CHECK_MEMBER(struct termios.c_line, ...)
+
+[bash-2.05a-beta1 frozen]
+
+ 10/10
+ -----
+lib/sh/snprintf.c
+ - fixed exponent() to not smash the trailing zeros in the fraction
+ when using %g or %G with an `alternate form'
+ - fixed exponent() to handle the optional precision with %g and %G
+ correctly (number of significant digits before the exponent)
+
+ 10/11
+ -----
+expr.c
+ - fixed strlong() to correct the values of `@' and `_' when
+ translating base-64 constants (64#@ == 62 and 64#_ == 64), for
+ compatibility with ksh
+
+lib/sh/itos.c
+ - added a slightly more flexible fmtlong() function that takes a
+ base argument and flags (for future use)
+ - rewrote itos and inttostr in terms of fmtlong
+
+lib/sh/fmtulong.c
+ - new file, converts unsigned long to string. hooks for `unsigned
+ long long' in the future. unused as yet
+
+ 10/15
+ -----
+lib/readline/rltty.c
+ - change the SET_SPECIAL macro to avoid possible (but highly
+ unlikely) negative array subscripts
+
+error.h
+ - add __attribute__ to extern declaration of itrace (even though the
+ function isn't defined in released versions of bash)
+
+bashansi.h
+ - include <strings.h> if HAVE_STRINGS_H is defined, to get any extra
+ function declarations provided therein
+
+copy_cmd.c
+ - fix typo in forward declaration for copy_arith_for_command
+
+lib/malloc/stats.c
+ - make the accumulators in _print_malloc_stats be `unsigned long'
+ instead of `int'
+
+externs.h, sig.h
+ - add `__noreturn__' gcc attribute to exit_shell and jump_to_top_level
+ declarations
+
+lib/sh/mailstat.c, support/bashversion.c
+ - include <bashansi.h> for some string function declarations
+
+lib/malloc/shmalloc.h
+ - added extern declarations of functions that do malloc debugging
+
+lib/readline/{isearch,readline,vi_mode}.c
+ - make sure we index into _rl_keymap with a non-negative index
+
+parse.y
+ - make sure we index into sh_syntaxtab with a non-negative index
+
+lib/readline/vi_mode.c
+ - bound the vi_mark_chars array with the number of characters between
+ 'a' and 'z' rather than using a fixed amount
+ - don't use _rl_lowercase_p when deciding whether the char read by
+ rl_vi_set_mark is a valid mark; just use 'a' <= char <= 'z'
+
+lib/readline/chardefs.h
+ - conditionally include memory.h and strings.h as in general.h
+ - replace ISASCII with IN_CTYPE_DOMAIN like other GNU software
+ - add defines for ISPRINT(c), ISLOWER(c) and ISUPPER(c)
+ - fix defines for _rl_lowercase_p, _rl_uppercase_p, _rl_digit_p,
+ _rl_pure_alphabetic, ALPHABETIC, _rl_to_upper, _rl_to_lower,
+ and _rl_isident to work on systems with signed chars
+
+include/chartypes.h
+ - replace ISASCII with IN_CTYPE_DOMAIN like other GNU software
+
+lib/sh/{strcasecmp,strtod,strtol}.c
+ - don't pass possibly-negative characters to tolower() or toupper()
+
+lib/glob/strmatch.c
+ - don't bother testing for isupper in FOLD; rely on TOLOWER macro
+ from <chartypes.h> to do it
+ - don't use local definitions of isblank, et al.; rely on macros
+ from <chartypes.h>
+
+lib/readline/{display,readline}.c, mksyntax.c
+ - use new ISPRINT macro instead of isprint()
+
+builtins/{kill.def,mkbuiltins.c},{error,execute_cmd,jobs,nojobs,subst}.c
+ - don't assume that a pid_t fits into an int for printing and other
+ uses
+
+variables.[ch]
+ - the unused put_gnu_argv_flags_into_env now takes a `long' pid
+ argument
+
+configure.in, config.h.in
+ - call AC_STRUCT_ST_BLOCKS, define HAVE_STRUCT_STAT_ST_BLOCKS if found
+ - check for strtoull(), define HAVE_STRTOULL if found
+ - check for uintmax_t, define to `unsigned long' if not found
+
+lib/sh/mailstat.c
+ - don't use st_blocks member of struct stat unless
+ HAVE_STRUCT_STAT_ST_BLOCKS is defined; otherwise use the st_nlink
+ field to return the total number of messages in a maildir-style
+ mail directory
+
+general.h,{alias,expr,general,subst,variables}.c
+builtins/{printf,read}.def
+lib/readline/{bind,complete,nls}.c
+lib/sh/{pathcanon,pathphys,shquote,snprintf,strindex,strtod,strtol,strtrans}.c
+ - cast args to ctype macros to unsigned char for systems with signed
+ chars; other fixes for signed chars
+
+lib/sh/{fmtullong,strtoull.c}
+ - new files, more support for `long long'
+
+Makefile.in, lib/sh/Makefile.in
+ - make fmtullong.o and strtoull.o part of libsh
+
+lib/sh/itos.c
+ - remove local copy of fmtlong; use fmtulong instead
+ - new functions: uitos, uinttostr work on `unsigned long'
+
+lib/sh/snprintf.c
+ - fixes to make `unsigned long long' work (%llu)
+ - fixes to make unsigned formats not print the sign when given
+ an unsigned long that is greater than LONG_MAX
+
+externs.h
+ - extern declarations for fmtulong, fmtulloing, strtoull
+ - extern declarations for uitos, uinttostr
+
+ 10/16
+ -----
+configure.in
+ - move header checks before function checks
+ - move c compiler tests before header checks
+ - check for <inttypes.h> with BASH_HEADER_INTTYPES
+ - change type checks for intmax_t, uintmax_t to not attempt to
+ include <stdint.h>
+ - check for strtoimax, strtoumax, strtoll, strtol, strtoull, strtoul
+ with BASH_CHECK_DECL (for declarations in header files) and
+ AC_REPLACE_FUNCS (for availability and LIBOBJS substitution)
+ - remove check for have_long_long around sizeof check for long long
+ (since autoconf will give it a size of 0 if the type isn't found)
+
+config.h.in
+ - add a define for HAVE_INTTYPES_H
+ - add a define for HAVE_UNSIGNED_LONG_LONG
+ - add defines for HAVE_STRTOIMAX, HAVE_STRTOUMAX, HAVE_STRTOLL
+
+aclocal.m4
+ - new func, BASH_HEADER_INTTYPES, which just calls AC_CHECK_HEADERS
+ on <inttypes.h>; separate so it can be AC_REQUIREd
+ - AC_REQUIRE([BASH_HEADER_INTTYPES]) in BASH_CHECK_TYPE
+ - include <inttypes.h> in BASH_CHECK_TYPE if HAVE_INTTYPES_H is
+ defined
+ - change AC_DEFINE to AC_DEFINE_UNQUOTED in BASH_CHECK_TYPE
+ - new `long long' checking macros: BASH_TYPE_LONG_LONG and
+ BASH_TYPE_UNSIGNED_LONG_LONG
+ - new BASH_CHECK_DECL
+
+lib/sh/{strto[iu]max,strtoll}.c, lib/sh/Makefile.in, Makefile.in
+ - new files
+
+externs.h
+ - extern declarations for strtoll, strtoimax, strtoumax
+
+lib/malloc/alloca.c
+ - include <bashtypes.h> for size_t
+
+builtins/printf.def
+ - new functions: getllong, getullong, getintmax, getuintmax; return
+ long long, unsigned long long, intmax_t, uintmax_t respectively
+ - builtin printf now handles `ll' and `j' length modifiers directly
+
+lib/sh/Makefile.in
+ - use LIBOBJS to decide whether or not the strto* functions are
+ needed
+
+ 10/17
+ -----
+configure.in
+ - call AC_REPLACE_FUNCS(rename)
+ - move getcwd, strpbrk, strcasecmp, strerror, strtod
+ from AC_CHECK_FUNCS to AC_REPLACE_FUNCS
+ - only call BASH_FUNC_GETCWD if $ac_func_getcwd == "yes"
+ - call BASH_CHECK_SYS_SIGLIST
+ - if we don't have vprintf but have _doprnt, call AC_LIBOBJ(vprint)
+
+lib/sh/Makefile.in
+ - remove rename, getcwd, inet_aton, strpbrk, strcasecmp, strerror,
+ strtod, vprint from OBJECTS; picked up from LIBOBJS
+
+aclocal.m4
+ - change BASH_FUNC_GETCWD to call AC_LIBOBJ(getcwd) if the libc
+ getcwd(3) calls popen(3)
+ - change BASH_FUNC_INET_ATON to call AC_LIBOBJ(inet_aton) if it's
+ not found in libc or as a #define even with the special includes
+ - BASH_KERNEL_RLIMIT_CHECK -> BASH_CHECK_KERNEL_RLIMIT
+ - BASH_DEFAULT_MAILDIR -> BASH_SYS_DEFAULT_MAILDIR
+ - BASH_JOB_CONTROL_MISSING -> BASH_SYS_JOB_CONTROL_MISSING
+ - BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS
+ - BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE
+ - BASH_DUP2_CLOEXEC_CHECK -> BASH_FUNC_DUP2_CLOEXEC_CHECK
+ - BASH_PGRP_SYNC -> BASH_SYS_PGRP_SYNC
+ - BASH_RLIMIT_TYPE -> BASH_TYPE_RLIMIT
+ - BASH_FUNC_PRINTF -> BASH_DECL_PRINTF
+ - BASH_FUNC_SBRK_DECLARED -> BASH_DECL_SBRK
+ - BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T
+ - BASH_CHECK_SOCKLIB -> BASH_CHECK_LIB_SOCKET
+ - new macro, BASH_CHECK_SYS_SIGLIST, encapsulates all the checks for
+ sys_siglist, _sys_siglist, and strsignal(), sets SIGLIST_O to
+ siglist.o if appropriate
+
+Makefile.in
+ - use SIGLIST_O variable to decide whether or not we need siglist.o
+
+{execute_cmd,subst}.c
+ - change a couple of instances of ISDIGIT to DIGIT, where we really,
+ really only want ascii digits
+
+ansi_stdlib.h
+ - don't need a declaration for atol()
+
+ 10/18
+ -----
+
+aclocal.m4
+ - new macro, BASH_FUNC_PRINTF_A_FORMAT, checks for printf support
+ for %a, %A conversion specifiers, defines HAVE_PRINTF_A_FORMAT
+ if successful
+
+configure.in
+ - call AC_CHECK_FUNCS for isascii
+ - call BASH_FUNC_PRINTF_A_FORMAT
+
+config.h.in
+ - add a define for HAVE_ISASCII
+ - add a define for HAVE_PRINTF_A_FORMAT
+
+lib/sh/snprintf.c
+ - for long double output, fall back to sprintf using ldfallback()
+ function for floating point formats
+ - support %a, %A using dfallback() or ldfallback() if
+ HAVE_PRINTF_A_FORMAT is defined
+ - fix bug in vasprintf that returned wrong value in its first
+ argument if the buffer holding the result string got reallocated
+ - fixed PUT_CHAR macro to increment the counter even if we've
+ exceeded the buffer size, for the return value from
+ vsnprintf/snprintf
+ - fix vsnprintf_internal to not use counter < length as a loop
+ condition, but always process the entire format string (for
+ the return value from vsnprintf/snprintf)
+
+builtins/printf.def
+ - support %a, %A if HAVE_PRINTF_A_FORMAT is defined
+
+include/typemax.h
+ - new file, with the TYPE_MAXIMUM stuff that's duplicated in several
+ files in lib/sh
+
+lib/sh/{fmtulong,strtol,snprintf}.c
+ - include <typemax.h> instead of having the definitions in each file
+
+lib/sh/Makefile.in
+ - updated dependencies for typemax.h
+
+ 10/22
+ -----
+configure.in
+ - call AC_CHECK_FUNCS on ctype.h functions/macros that bash redefines
+ in chartypes.h
+
+config.h.in
+ - defines for HAVE_IS{ASCII,BLANK,GRAPH,PRINT,SPACE,XDIGIT}
+
+include/chartypes.h, lib/glob/strmatch.c, lib/readline/chardefs.h
+ - don't redefine some is* ctype macros/functions if HAVE_ISXXX is
+ defined (meaning that an appropriate function, but not a macro,
+ exists)
+
+lib/sh/strtrans.c
+ - new function, ansic_shouldquote, returns 1 if argument string
+ contains non-printing chars that should be quoted with $'...'
+
+externs.h
+ - new declaration for ansic_shouldquote()
+
+variables.c
+ - change print_var_value to ansi C quote the string if we're not in
+ posix mode and the variable's value contains non-printing chars,
+ to use the regular shell single quoting if the value contains
+ shell meta-characters, and to just output the string otherwise
+
+lib/sh/shquote.c
+ - add `break' to `case '~':' to avoid fallthrough and extra test
+
+doc/bashref.texi
+ - note that in POSIX mode, `set' displays variable values that
+ include nonprinting characters without quoting, unless they
+ contain shell metacharacters
+
+builtins/printf.def, lib/sh/snprintf.c
+ - handle `F' conversion specifier as equivalent to 'f'
+
+parse.y, {nojobs,variables}.c
+ - a couple of cleanups for when building a minimal configuration
+
+nojobs.c
+ - new function: stop_making_children(), just sets
+ already_making_children to 0 (like stop_pipeline)
+
+subst.c
+ - call stop_making_children from subst.c:command_substitute if
+ JOB_CONTROL is not defined. This fixes the bug where the wrong
+ process is waited for (and its status returned) when using
+ command substitution in a null command in a shell function
+
+builtins/printf.def
+ - new variable `tw' used to keep track of the total number of
+ characters written by a single call to `printf' -- to be
+ used for the `%n' conversion, which will be added later. It
+ gets reset each time we reuse the format string, which is what
+ ksh93 seems to do
+
+ 10/23
+ -----
+variables.c
+ - new function, bind_var_to_int (char *var, long val)
+
+variables.h
+ - extern declaration for bind_var_to_int
+
+lib/sh/netopen.c
+ - use gai_strerror() for error messages when getaddrinfo() fails
+ - use PF_INET if DEBUG is defined, since IPv6 doesn't work for me
+
+Makefile.in
+ - pass DEBUG=${DEBUG} down to makes in some subdirectories
+
+{builtins,lib/{glob,sh}}/Makefile.in
+ - append ${DEBUG} to LOCAL_CFLAGS value, passed by top-level Makefile
+
+builtins/printf.def
+ - added support for %n format conversion char (number of chars printed
+ so far from current format string)
+
+ 10/24
+ -----
+variables.c
+ - if posixly_correct is set, the default value of $MAILCHECK is 600
+ - use legal_number instead of atoi in adjust_shell_level
+ - treat non-numeric assignments to SECONDS as 0 in assign_seconds
+ - new function, init_funcname_var; sets FUNCNAME as a dynamic variable
+ if it's not set in the initial environment
+ - new function, init_groups_var; sets GROUPS as a dynamic array
+ variable if it's not set in the initial environment
+ - new function, init_dirstack_var; sets DIRSTACK as a dynamic array
+ variable if it's not set in the initial environment
+ - new function, init_seconds_var; sets SECONDS as a dynamic
+ variable using any valid integer value in the initial environment
+ as the initial value, as if an assignment had been performed
+ - call init_funcname_var, init_groups_var, init_dirstack_var,
+ init_seconds_var from initialize_dynamic_variables
+ - non-numeric values assigned to LINENO are treated as 0
+ - change initialize_shell_variables to not auto-export PATH or TERM
+ - change set_home_var to not auto-export HOME
+ - change set_shell_var to not auto-export SHELL
+ - broke the code that sets HOSTNAME, HOSTTYPE, MACHTYPE, OSTYPE
+ out into a separate function, set_machine_vars; none of those
+ variables are auto-exported
+ - bash no longer un-exports SSH_CLIENT or SSH2_CLIENT
+
+shell.c
+ - changed isnetconn() to check SSH_CLIENT and SSH2_CLIENT only if
+ SSH_SOURCE_BASHRC is defined in config-top.h
+
+config-top.h
+ - added a commented-out definition for SSH_SOURCE_BASHRC
+
+ 10/25
+ -----
+
+Makefile.in
+ - changed RELSTATUS to `rc1' (release candidate 1)
+
+ 10/29
+ -----
+locale.c
+ - fixed an `=' vs. `==' typo in set_locale_var when parsing
+ LC_NUMERIC
+
+doc/{bash.1,bashref.texi}
+ - document what bash does with $POSIXLY_CORRECT
+
+doc/builtins.1
+ - some updates
+
+builtins/psize.sh
+ - some mktemp(1) changes
+
+lib/readline/readline.c
+ - change rl_backward to check for rl_point < 0 and reset to 0 if so
+
+lib/readline/util.c
+ - don't compile in _rl_strpbrk if HAVE_STRPBRK is defined
+
+lib/readline/rlprivate.h
+ - remove extern declaration of _rl_strpbrk
+
+lib/readline/rldefs.h
+ - #define _rl_strpbrk as strpbrk if HAVE_STRPBRK is define, otherwise
+ add extern declaration of _rl_strpbrk from rlprivate.h
+
+{mailcheck,shell,variables}.c
+ - make sure to include posixtime.h to get any prototype for time(3)
+ in scope
+
+{array,eval,execute_cmd,mksyntax,subst}.c, parse.y
+builtins/common.c
+lib/sh/pathcanon.c
+ - a few changes as the result of `gcc -Wall' patches from solar
+ designer
+
+builtins/read.def, parse.y
+ - change some calls to free() to xfree()
+
+builtins/set.def
+ - make sure unset_builtin() resets unset_array to 0 each time through
+ the loop, because it's set (and used) depending on the current
+ argument
+
+shell.h
+ - new define, USE_VAR, to force the compiler to not put a particular
+ variable in a register -- helpful if registers are not restored
+ by setjmp/longjmp
+
+builtins/{evalfile.c,{read,wait}.def}, {eval,execute_cmd,shell,test}.c
+ - use USE_VAR for some variables
+
+subst.c
+ - fixed a case in expand_word_internal where a NULL pointer could
+ have been passed to free() (though free() should ignore it)
+ - fixed a case at the end of expand_word_internal where LIST could
+ have been used uninitialized (it makes gcc happy, though it
+ doesn't happen in practice)
+
+test.c
+ - give test_syntax_error(), beyond(), and integer_expected_error()
+ the `__noreturn__' attribute for gcc
+
+unwind_prot.c
+ - in clear_unwind_protect_list(), convert `flags' to `long' (via
+ assignment to a `long' variable) before casting to `char *', in
+ case pointers and longs are 64 bits and ints are 32 (makes no
+ difference on 32-bit machines)
+
+ 10/30
+ -----
+print_cmd.c
+ - fixed cprintf to avoid gcc warning about assigning const pointer
+ to non-const (discarding type qualifier)
+
+{make_cmd,pcomplete,test}.c,parse.y
+ - some minor changes to shut up gcc warnings
+
+lib/sh/tmpfile.c
+ - fixed sh_mktmpfp to avoid file descriptor leaks in the case that
+ sh_mktmpfd succeeds but fdopen fails for some reason
+ - change sh_mktmpfd to use the same scheme for computing `filenum'
+ as sh_mktmpname
+ - change get_sys_tmpdir to prefer P_tmpdir if P_tmpdir is defined
+ - changed sh_mktmpname and sh_mktmpfd to avoid trying to assign to
+ `nameroot' if `nameroot == 0' (duh)
+ - add code to sh_mktmpfd to use mkstemp(3) if USE_MKSTEMP is defined
+ - add code to sh_mktmpname to use mktemp(3) if USE_MKTEMP is defined
+
+support/{fixlinks,mkclone}
+ - use mktemp if it's available for the symlink test
+ - use $TMPDIR instead of hardcoding /tmp; default to /tmp
+ - use a better filename for the symlink test instead of `z'
+
+support/bashbug.sh
+ - more changes inspired by a patch from solar designer
+
+lib/malloc/Makefile.in
+ - new target `alloca', which builds libmalloc.a with alloca.o only
+ (for systems without alloca that are configured --without-bash-malloc)
+
+configure.in
+ - if we don't have a working alloca and are not configured to build
+ the bash malloc library, make a malloc library containing only
+ alloca.o
+
+aclocal.m4
+ - slight change to RL_LIB_READLINE_VERSION to deal with minor version
+ numbers with a letter appended (like 4.2a)
+
+ 10/31
+ -----
+doc/{bash.1,bashref.texi}
+ - slight change to note that only interactive shells resend a SIGHUP
+ to all jobs before exiting
+
+externs.h
+ - declare strto[ui]max only if NEED_STRTOIMAX_DECL is defined. This
+ keeps picky compilers from choking because intmax_t is not defined
+ (MacOS X 10.1)
+
+builtins/printf.def
+ - #define NEED_STRTOIMAX_DECL before including shell.h
+
+ 11/1
+ ----
+general.c
+ - check in bash_tilde_expand() for an unquoted tilde-prefix; don't
+ bother passing the string to tilde_expand unless the prefix is
+ unquoted
+
+shell.c
+ - fix a problem with $LINENO when executing commands supplied with
+ the -c invocation option when ONESHOT is defined
+
+[bash-2.05a-rc1 frozen]
+
+builtins/printf.def
+ - fix the %n conversion to require that the variable name supplied
+ be a valid shell identifier
+
+variables.c
+ - improve random number generator slightly by using the upper 16
+ bits of the running random number instead of the lower 16, which
+ are incrementally more random
+
+ 11/2
+ ----
+configure.in
+ - if RL_INCLUDEDIR ends up being /usr/include, don't put
+ -I$(RL_INCLUDEDIR) into CFLAGS
+
+ 11/5
+ ----
+doc/{bash.1,bashref.texi}
+ - correct description of POSIXLY_CORRECT to note that the shell enters
+ posix mode *before* the startup files are read if POSIXLY_CORRECT
+ is in the initial environment
+
+variables.c
+ - fix function prologues for init_dirstack_var and init_groups_var
+ to agree with caller (no arguments)
+
+jobs.c
+ - fix forward function declarations for pipe_read and pipe_close
+
+subst.c
+ - removed `inline' attribute from skip_double_quoted because it can
+ potentially be called recursively
+
+bashline.c
+ - quick fix to bashline.c:attempt_shell_completion programmable
+ completion code to just punt if the end of the command word found
+ by find_cmd_end is <= the start found by find_cmd_start (the bug
+ is probably in find_cmd_start -- fix later)
+
+pcomplete.c
+ - fix gen_matches_from_itemlist to return if the stringlist is null
+ after any cleaning or initialization, before trying to use it
+ - fix GEN_COMPS to only bother to try to append the STRINGLIST
+ returned by gen_matches_from_itemlist to `glist' if it's non-NULL
+
+lib/sh/stringlist.c
+ - make copy_stringlist return NULL if the STRINGLIST * passed as an
+ argument is NULL
+ - make append_stringlist call copy_stringlist only if M2 is non-NULL;
+ otherwise just return NULL if m1 is NULL
+ - make word_list_to_stringlist return 0 immediately if the passed
+ LIST argument is NULL
+ - make realloc_stringlist call alloc_stringlist if the passed
+ STRINGLIST argument (`sl') is 0, just like realloc calls malloc
+
+subst.c
+ - in skip_to_delim(), if we have an unclosed ${, and it's at the end
+ of the string (string[i] == '{', string[i+1] == '{' and
+ string[i+2] == 0, return si (i + 2) immediately without bothering
+ to call extract_dollar_brace_string or extract_delimited_string
+ - in skip_to_delim(), if string[i] is 0 after a call to
+ extract_dollar_brace_string or extract_delimited_string (meaning we
+ have an unclosed ${ or other expansion, return i immediately without
+ doing a `continue' (which will increment i past the end of string)
+ - in split_at_delims, don't increment te by 1 if it's pointing to a
+ delimiter. this has the effect of skipping the first delimiter
+ char in a possibly multi-character delimiter, and ignoring
+ single-char delimiters like `>'
+
+configure.in
+ - use AC_CHECK_MEMBERS([struct stat.st_blocks]) instead of a call to
+ AC_STRUCT_ST_BLOCKS to avoid configure changing LIBOBJS if the test
+ fails
+
+general.c
+ - introduce two new variables: bash_tilde_{prefixes,suffixes}, set
+ to the additional prefixes and suffixes bash wants to pass to the
+ tilde expansion code (reserved for post-bash-2.05a fix)
+
+aclocal.m4
+ - add missing `test' in BASH_CHECK_SYS_SIGLIST
+
+ 11/7
+ ----
+lib/readline/vi_mode.c
+ - fix rl_vi_goto_mark to explicitly check that the desired mark is
+ between 'a' and 'z', since some locales have lowercase letters
+ outside that range, which could cause a negative subscript
+
+include/chartypes.h
+ - remove superfluous `#undef ISASCII'
+
+lib/sh/strto[iu]max.c
+ - changes from Paul Eggert to work around buggy compilers and catch
+ configuration errors at compile time
+
+aclocal.m4
+ - new macro, BASH_C_LONG_DOUBLE, identical to AC_C_LONG_DOUBLE but
+ with a fix for Irix 5.3 (not called, since I'm not sure it's the
+ right thing to do -- the C standard allows double and long double
+ to be the same size)
+
+lib/sh/snprintf.c
+ - only try to write the trailing NUL in vsnprintf_internal if
+ data->length is >= 0, since if it's not, we probably don't have
+ a buffer
+
+Makefile.in
+ - changed RELSTATUS to `release'
+
+ 11/8
+ ----
+lib/sh/strtol.c
+ - make sure chars passed to toupper are cast to unsigned
+
+unwind_prot.c
+ - change clear_unwind_protect_list to not require a cast from `int'
+ to `char *'
+
+lib/readline/chardefs.h
+ - make _rl_digit_p succeed only for ascii digits, since that's what
+ most callers assume
+
+ 11/13
+ -----
+doc/bashref.texi
+ - added `ERR' trap and [-+]O invocation option to section listing
+ differences from the Bourne shell
+
+ 11/15
+ -----
+[bash-2.05a released]
+
+ 11/19
+ -----
+include/stdc.h
+ - new define, INLINE, defined as `inline' for gcc and empty otherwise
+
+subst.c
+ - make skip_double_quoted, sub_append_string have INLINE attribute
+
+trap.c
+ - use BASH_NSIG as upper limit for signal names in signal_name()
+
+lib/readline/bind.c
+ - use RL_COMMENT_BEGIN_DEFAULT in output for rl-comment-begin value
+
+error.c
+ - fix sys_error to save value of errno around calls to fprintf
+
+doc/Makefile.in
+ - added rules to create PDF files from postscript and dvi input
+
+MANIFEST.doc
+ - added {article,bash,bashref,rose94}.pdf
+
+doc/bash.1
+ - rearranged some `.PD 0' and `.TP' directives so man2html will
+ handle them better (shouldn't affect groff output)
+
+support/man2html.c
+ - small fix to handle quoted string arguments to directives like
+ `.BR' without mangling the output
+
+ 11/20
+ -----
+{arrayfunc,variables}.c
+ - changed calling sequence for dynamic array variable `assign'
+ functions to (SHELL_VAR *self, char *value, arrayind_t ind)
+ - changed calling sequence for dynamic variable assign functions
+ to the same as array variable assign_func. Now this can be
+ prototyped
+
+variables.h
+ - the assign_func member of a `struct variable' is now of type
+ `sh_var_assign_func_t', which is prototyped
+ - the dynamic_value member of a `struct variable' is now of type
+ `sh_var_value_func_t', which is prototyped
+
+variables.c
+ - changed to use `sh_var_assign_func_t' and `sh_var_value_func_t'
+
+builtins/cd.def
+ - when in posix mode, if the new directory name formed by PWD and
+ the argument passed by the user cannot be canonicalized, and the
+ -P option has not been supplied, return failure immediately
+ - if canonicalization failed, but the fallback to the directory
+ name specified by the user succeeds, reset the current working
+ directory
+
+lib/readline/{input.c,rlprivate.h}
+ - renamed rl_unget_char to _rl_unget_char; made library global
+
+lib/readline/{{bind,readline}.c,{keymaps,rlprivate}.h}
+ - support for `key subsequences'; allows a key sequence and a function
+ mapped to a subsequence of that key sequence. Primarily to allow
+ arrow keys to be bound in readline vi insert mode, while preserving
+ the ESC function to switch to command mode.
+
+lib/readline/{input.c,rlprivate.h}
+ - new function, _rl_input_queued(T), does a check with select or
+ FIONREAD with a timeout of `T' (which is generally 0)
+
+lib/readline/readline.c
+ - change _rl_dispatch_subseq to test for input in the queue if we
+ get ESC while in vi insertion mode if the keymap entry type for
+ ESC is ISKMAP. If _rl_input_queued returns non-zero, we assume
+ that an arrow key sequence has been pressed and go ahead with the
+ subsequence. If it returns zero, we assume that the user pressed
+ ESC to switch into command mode, and dispatch to that right away.
+ This avoids forcing the user to press another key before switching
+ into command mode
+
+ 11/21
+ -----
+lib/readline/readline.c
+ - bind common arrow key sequences in vi insertion keymap
+
+lib/readline/terminal.c
+ - bind termcap definition's arrow keys in vi insertion keymap
+
+lib/readline/bind.c
+ - check for rl_vi_movement_mode in _rl_bind_if_unbound, so
+ binding the arrow keys can work
+
+lib/readline/readline.c
+ - since _rl_bind_if_unbound does the check of what's currently
+ bound to the key sequence, the check in bind_arrow_keys_internal
+ was redundant
+ - bind_arrow_keys_internal now takes a Keymap argument and handles
+ saving and restoring _rl_keymap; changed bind_arrow_keys
+ accordingly
+
+builtins/fc.def
+ - fix from Paul Eggert to substitute the nearest history number in
+ range if an out-of-range value is supplied. POSIX requires this
+
+lib/sh/pathcanon.c
+ - fix from Corrina Vinschen for the special `cygdrive' prefix on
+ Cygwin
+
+bashhist.c
+ - split the history adding code into more pieces:
+ check_history_control (char *line) checks LINE against the value
+ of HISTCONTROL, returning 1 if LINE should be saved and 0 if not
+
+ check_add_history (char *line) calls check_history_control and
+ history_should_ignore (line) and saves the line with
+ bash_add_history if the checks indicate that it should be saved
+
+ maybe_add_history just calls check_add_history to set the value
+ of first_line_saved
+
+bashhist.h
+ - extern declaration for check_add_history()
+
+shell.c
+ - don't call load_history() from the interactive shell startup
+ code if history_lines_this_session is > 0, indicating that we've
+ already saved some lines in the history and that we probably
+ don't want to overwrite them
+
+builtins/history.def
+ - call check_add_history from push_history, so `history -s xx'
+ works even when in a compound command whose first line has not
+ been saved. (Caveat: in a compound command when the first
+ line has been saved, the line supplied to history -s will become
+ part of the compound command's history entry. Of course, the
+ delete_history call could remove the compound command from the
+ history entirely)
+
+bashline.c
+ - use sh_makepath instead of xmalloc/sprintf in
+ command_word_completion_function
+
+lib/readline/complete.c
+ - get_y_or_n now takes an int FOR_PAGER argument; caller changed
+ If FOR_PAGER is non-zero, get_y_or_n returns appropriate values
+ for a more-like pager: `newline' or `return' return 2; `q' or
+ `Q' return 0
+ - there is now a mini internal more-like pager for displaying a
+ list of completions that exceeds the screen height (new function
+ _rl_internal_pager, called from rl_display_match_list)
+
+ 11/24
+ -----
+command.h
+ - new flag, W_TILDEEXP, says to do tilde expansion on an
+ assignment word
+
+execute_cmd.c
+ - fix_assignment_words now sets W_TILDEEXP for assignment word
+ arguments to `assignment builtins'
+
+general.c
+ - bash_tilde_expand now takes a second argument indicating whether
+ or not it's being invoked in an `assignment context'
+
+general.h
+ - change extern declaration for bash_tilde_expand
+
+{bashline,execute_cmd,findcmd,general,variables}.c
+builtins/evalfile.c
+lib/sh/makepath.c
+ - fix callers of bash_tilde_expand appropriately
+
+subst.c
+ - fix callers of bash_tilde_expansion appropriately
+ - add (currently commented-out) code that would tilde expand assignment
+ statement arguments to assignment builtins (W_TILDEEXP flag set)
+ even when the shell is in posix mode
+
+bashline.c
+ - fix attempt_shell_completion to turn off
+ rl_filename_completion_desired when doing command name completion,
+ so no slash gets appended to the name if there happens to be a
+ directory with the same name in the current directory
+
+ 11/26
+ -----
+lib/readline/rltech.texinfo
+ - a couple of additions to the rl_stuff_char description
+
+parse.y
+ - turn off echo_input_at_read in parse_string_to_word_list, so `set -v'
+ doesn't give extra lines of output when doing compound array
+ assignment
+
+subst.c
+ - fix split_at_delims to handle skipping over a `\n' if it's a
+ delimiter (use spctabnl(c) instead of whitespace(c))
+
+ 11/27
+ -----
+support/config.{guess,sub}
+ - updated (with bash changes) to latest version from gnu.org
+
+sig.h
+ - add prototype for set_signal_handler declaration
+
+builtins/setattr.def
+ - add prototype to extern declaration of declare_builtin
+
+builtins/times.def
+ - add no_options call, since times takes no options
+
+lib/sh/spell.c
+ - add prototypes to forward declarations for midist and spdist
+
+lib/sh/strtrans.c
+ - add explicit int return type to ansic_shouldquote declaration
+
+lib/readline/rldefs.h, lib/readline/{macro,readline,util,undo}.c
+ - move define for SWAP to rldefs.h, removed from various C files
+
+lib/readline/vi_mode.c
+ - removed define for exchange(), changed to use SWAP instead
+
+lib/readline/bind.c
+ - added some static forward function declarations
+ - find_boolean_var, find_string_var now take a `const char *' argument
+
+lib/readline/signals.c
+ - added static forward declaration for rl_maybe_set_sighandler
+
+lib/readline/readline.c
+ - add some common key bindings for the HOME and END keys in
+ bind_arrow_keys_internal
+
+lib/readline/terminal.c
+ - fetch the `@7' termcap string; it's sent by the END key
+ - attempt to bind the terminal's END key to rl_end_of_line in
+ bind_termcap_arrow_keys; I don't know why I was using `kH'
+ instead of `@7'
+
+doc/builtins.1
+ - remove `case', `for', `if', `until', `while' from NAME section;
+ those are not shell builtins
+
+ 11/28
+ -----
+stringlib.c
+ - new function, find_token_in_alist, takes a token value and an
+ ALIST argument, and returns the string correspoinding to the
+ token if found in the alist
+
+externs.h
+ - new extern declaration for find_token_in_alist()
+
+subst.c
+ - string_list_internal is no longer static
+
+subst.h
+ - new extern declaration for string_list_internal()
+
+parse.y
+ - new alist array of other tokens returned by read_token which are
+ not reserved words in word_token_alist[]
+ - reworked error reporting: new functions print_offending_line,
+ which prints the line containing the syntax error,
+ error_token_from_token, which takes the current token and tries to
+ figure out its textual representation, and error_token_from_text,
+ which does the old job of finding the bad token by analyzing the
+ text of shell_input_line at the current index
+ - report_syntax_error now tries to figure out the token that caused
+ the syntax error by first looking at current_token and falling
+ back to the old method of textual analysis if that fails
+ - report_syntax_error doesn't say the token resulting from the textual
+ analysis of the input line is an `unexpected token'; it just
+ says there is a `syntax error near xxx'
+ - changed conditional command error reporting to use the value
+ returned by error_token_from_token if it's not null instead of
+ just using the token value in the message, since current_token
+ ends up being set to -1, and the text of the message from
+ report_syntax_error might not be exactly right
+ - change parse_string_to_word_list to set current_token to the
+ offending token returned by read_token before calling yyerror()
+ to make the error reporting do the right thing
+
+aclocal.m4
+ - fixed typo in BASH_CHECK_LIB_TERMCAP
+
+configure.in
+ - add check for isinf(3); define HAVE_ISINF_IN_LIBC if found
+
+config.h.in
+ - add define for HAVE_ISINF_IN_LIBC
+
+lib/sh/snprintf.c
+ - check for Inf and NaN, using isinf and isnan if they're found in
+ libc
+ - use the current locale for thousands separator and decimal point
+ - recognize "'" flag; not implemented yet
+ - fix for snprintf/vsnprintf with length of 0 and string argument of
+ 0 with non-zero length
+
+builtins/read.def
+ - TMOUT is now the default timeout for `read' (and select) if set,
+ like ksh93 when reading from the terminal
+ - edit_line (called by read -e) now just does readline's filename
+ completion by setting rl_attempted_completion_function to NULL,
+ since e.g., doing command completion for the first word on the
+ line wasn't really useful
+
+execute_cmd.c
+ - changed select_command to return failure status if select_query
+ returns NULL, indicating that read_builtin returned
+ EXECUTION_FAILURE
+
+doc/{bash.1,bashref.texi}
+ - documented new TMOUT behavior
+ - slight change to the description of the test `-ef' option
+
+doc/bashref.texi
+ - added item to posix mode section describing failure behavior of
+ cd when invoked in logical mode and the pathname formed by
+ combining $PWD and the directory argument does not refer to an
+ existing directory
+
+ 11/29
+ -----
+execute_cmd.c
+ - fix execute_function to call dispose_function_env after
+ merge_function_env if the shell is in posix mode (fixes debian
+ bash bug #117673)
+
+lib/readline/readline.c
+ - rl_forward -> rl_forward_char; rl_forward function for compatibility
+ - rl_backward -> rl_backward_char; rl_forward function for
+ compatibility
+ - new functions, rl_forward_byte, rl_backward_byte, for future use
+
+lib/readline/readline.h
+ - extern declarations for rl_forward_char, rl_backward_char,
+ rl_forward_byte, rl_backward_byte
+
+lib/readline/{emacs_keymap,funmap,vi_keymap,vi_mode
+ - rl_forward -> rl_forward_char
+ - rl_backward -> rl_backward_char
+
+lib/readline/funmap.c
+ - new bindable names, `backward-byte' and `forward-byte'
+
+aclocal.m4
+ - new function, BASH_CHECK_MULTIBYTE, encapsulates checks for
+ multibyte code
+
+config.h.in
+ - add necessary defines for multibyte include files and functions
+
+configure.in
+ - add call to BASH_CHECK_MULTIBYTE
+
+config-bot.h
+ - add code to define HANDLE_MULTIBYTE if prerequisites are met
+
+lib/sh/xstrchr.c
+ - new file, xstrchr() is strchr(3) that handles multibyte characters
+
+bashhist.c
+ - first_line_saved -> current_command_first_line_saved; variable is
+ now global
+
+bashhist.h
+ - extern declaration for current_command_first_line_saved
+
+ 11/30
+ -----
+bashhist.c
+ - break the code that actually calls add_history out of
+ bash_add_history into a new function, really_add_history;
+ bash_add_history now calls really_add_history
+ - check_add_history takes a second `force' argument telling it
+ whether to call bash_add_history (force == 0) or really_add_history
+ (force != 0)
+
+builtins/history.def
+ - in push_history, call delete_last_history if the current command
+ has more than one line, the first line was saved, and
+ command-oriented history is active. This takes care of deleting
+ the right history element if `history -s' is used within a
+ compound or multiline command
+ - in push_history, call check_add_history with second argument of 1
+ to skip check of current_command_line_count and add the arguments
+ to history -s as a single separate history entry
+
+ 12/3
+ ----
+lib/readline/complete.c
+ - append a slash to completed names which are symlinks to directories
+ if the new variable _rl_complete_mark_symlink_dirs is non-zero
+
+lib/readline/rlprivate.h
+ - extern declaration for _rl_complete_mark_symlink_dirs
+
+lib/readline/bind.c
+ - new bindable variable, `mark-symlinked-directories', mirrors the
+ value of _rl_complete_mark_symlink_dirs
+
+doc/bash.1, lib/readline/doc/{readline.3,rluser.texinfo}
+ - documented new `mark-symlinked-directories' variable
+
+ 12/4
+ ----
+variables.[ch]
+ - set_pipestatus_array now takes a second argument with the number
+ of processes in the array
+ - changed set_pipestatus_array to just modify the value in place if
+ the existing array has one element and the new array has one
+ element, and to modify existing values in place if new array has
+ more elements than existing array
+
+variables.c, jobs.c
+ - changed set_pipestatus_array callers
+
+jobs.c
+ - moved call to setjstatus() from set_job_status_and_cleanup to
+ wait_for, since set_job_status_and_cleanup is part of the SIGCHLD
+ signal handler call path, and race conditions accessing the
+ PIPESTATUS array will result for things like
+
+ while true; do date; done | cat > /dev/null
+
+ 12/5
+ ----
+xmalloc.h
+ - don't redefine xmalloc, xrealloc, and xfree if DISABLE_MALLOC_WRAPPERS
+ is #defined
+
+config.h.in
+ - #undef for DISABLE_MALLOC_WRAPPERS
+
+configure.in
+ - define DISABLE_MALLOC_WRAPPERS if the --with-purify option is
+ supplied
+
+lib/malloc/trace.c
+ - new function, malloc_trace_bin(N), traces allocations and frees
+ to bucket N (uses the same type of bitmap as `busy')
+
+lib/malloc/table.c
+ - fix wraparound search problem in find_entry when searching for a
+ free entry when the table is full
+
+ 12/6
+ ----
+lib/malloc/table.c
+ - keep an `overflow bucket' around to use when the table is full,
+ so find_entry always returns a valid pointer when FIND_ALLOC
+ is set
+ - new static variable to keep a count of the number of MT_ALLOC
+ entries in the mem_table
+
+lib/sh/{oslib,clktck}.c
+ - if HAVE_LIMITS_H is defined, include <limits.h>
+
+lib/sh/oslib.c
+ - new function, getmaxgroups() returns max number of simultaneous
+ groups
+ - new function, getmaxchild(), returns max number of simultaneous
+ user processes
+
+general.c
+ - removed forest of #defines for getmaxgroups()
+
+externs.h
+ - new extern declaration for getmaxgroups()
+ - new extern declaration for getmaxchild()
+ - new extern declaration for isnetconn()
+
+lib/sh/netconn.c,shell.c
+ - new file, isnetconn() from shell.c moved here
+
+Makefile.in, lib/sh/Makefile.in
+ - necessary changes for netconn.c
+
+builtins/ulimit.def
+ - changed getmaxuprc() to just call getmaxchild() and massage the
+ return value appropriately
+
+{jobs,nojobs}.c
+ - use the value returned by getmaxchild() in
+ mark_dead_jobs_as_notified instead of static CHILD_MAX
+
+jobs.c
+ - new function, compact_jobs_list, removes some number of jobs from
+ the jobs table and reallocates the table, copying the jobs that
+ are left from the old table to the new. Compaction happens from
+ the beginning of the list and removes dead jobs, and we make sure
+ to keep the last CHILD_MAX jobs as POSIX.2 requires
+ - call compact_jobs_list from stop_pipeline if we're in a subshell,
+ there are no free jobs in the jobs table, and the jobs table is
+ at or above some maximum limit
+
+execute_cmd.c
+ - change eval_arith_for_expr to set this_command_name to `((' before
+ calling evalexp, since it might be changed by evaluating the
+ loop body between evalexp calls
+
+trap.c
+ - change reset_signal to turn off the SIG_TRAPPED flag for the
+ given signal, so shell builtins and functions running in command
+ substitutions don't run the signal handlers (traps are not supposed
+ to be inherited by command substitutions)
+
+parse.y
+ - changed parse_string_to_word_list to turn off alias expansion
+ while parsing the array assignment
+
+ 12/9
+ ----
+alias.c
+ - fix add_alias so that redefining an alias's value also resets the
+ EXPANDNEXT flag
+
+ 12/10
+ -----
+parse.y
+ - new function, token_is_assignment, called to check whether the text
+ before `=' makes up a valid assignment token before trying to parse
+ a compound assignment statement
+ - new function, parse_compound_assignment, to parse a compound
+ assignment statement instead of using parse_matched_pair; handles
+ comments and error reporting in the parser instead of waiting until
+ expansion time
+ - changed parse_compound_assignment and parse_string_to_word_list to
+ allow reserved words in compound array assignments
+
+lib/readline/doc/rltech.texinfo
+ - changed the documentation for rl_callback_read_char and
+ rl_callback_handler_remove to say what happens to the terminal
+ settings and what needs to be done to reset them
+
+ 12/11
+ -----
+bashline.c
+ - add emacs_edit_and_execute_command, bound to C-xC-e, like vi-mode
+ `v' command
+ - add bindable command name `edit-and-execute-command', bound to
+ run emacs_edit_and_execute_command()
+
+lib/glob/strmatch.c
+ - add support for ksh93-like [:word:] character class (isalnum + `_')
+
+doc/{bash.1,bashref.texi}
+ - add note to section describing lists to clarify that a sequence of
+ one or more newlines may be used to delimit a command, equivalent
+ to a semicolon
+ - document new [:word:] pattern matching character class
+
+doc/bash.1, lib/readline/doc/rluser.texinfo
+ - document `edit-and-execute-command' and its default emacs-mode
+ binding
+
+include/chartypes.h
+ - add defines for TOCTRL and UNCTRL if they're not already defined
+
+lib/readline/chardefs.h
+ - #undef UNCTRL if it's defined to avoid cpp redefinition warnings
+
+lib/sh/strtrans.c
+ - add \cX (Control-X) escape for $'...' to ansicstr()
+ - change ansic_quote() to allocate at least four chars for each char
+ in the string argument, to account for \0xx octal values
+ - change ansic_quote() to no longer call sprintf for non-printable
+ characters; just translate the string to octal directly
+
+print_cmd.c
+ - change xtrace_print_word_list to call ansic_quote() if
+ ansic_shouldquote() indicates that there are nonprinting characters
+ in a word
+
+builtins/type.def
+ - changed deprecated long option parsing to just replace the word
+ in the list with the equivalent short option (-type -> -t) instead
+ of removing words from the list
+ - changed describe_command to take a single flags argument instead
+ of two int args; changed caller
+ - type now has two new options: -f suppresses function lookup (like
+ command), and -P forces a PATH search for the name(s)
+
+builtins/common.h
+ - flags for describe_command are here
+ - changed extern declaration of describe_command
+
+builtins/command.def
+ - changed call to describe_command to use flags from common.h, and
+ the right number of arguments
+
+doc/{bash.1,bashref.texi}
+ - documented new -f and -P options to `type'
+
+ 12/12
+ -----
+lib/readline/rldefs.h
+ - fixed prototype for _rl_strnicmp
+
+execute_cmd.c
+ - select_query now takes a new argument, an int flag saying whether
+ or not to print the menu the first time through the loop. An
+ empty line in response to the prompt will always cause the menu
+ to be reprinted
+ - changed execute_select_command to cause select_query to reprint
+ the menu only if REPLY is set to NULL, if KSH_COMPATIBLE_SELECT
+ is defined
+
+config-top.h
+ - define KSH_COMPATIBLE_SELECT, with a comment about its meaning
+
+lib/readline/readline.c
+ - change rl_insert_comment to toggle if given an explicit numeric
+ argument: if the first characters on the line don't specify a
+ comment, insert one; if they do, delete the comment text
+
+doc/bash.1, lib/readline/doc/{readline.3,rluser.texinfo}
+ - documented new behavior of insert-comment with a numeric argument
+
+ 12/13
+ -----
+lib/malloc/watch.c
+ - new file, implements watchpoint functions
+
+lib/malloc/watch.h
+ - new file, define some `events' for watchpoints and extern function
+ and variable declarations for watchpoint code
+
+lib/malloc/imalloc.h
+ - #define MALLOC_WATCH if MALLOC_DEBUG is defined
+ - add __P define as in include/stdc.h if not already defined
+
+lib/malloc/malloc.c
+ - remove __P define, now in imalloc.h
+ - include watch.h if MALLOC_WATCH is defined
+ - added calls to _malloc_ckwatch in internal_malloc, internal_free,
+ and internal_realloc
+
+include/stdc.h
+ - augment __P define to allow prototypes if PROTOTYPES is defined
+
+lib/readline/rlstdc.h
+ - augment PARAMS define to allow prototypes if PROTOTYPES is defined
+
+lib/malloc/Makefile.in, Makefile.in
+ necessary changes to include watch.c in libmalloc
+
+lib/readline/readline.c
+ - fix rl_delete_text to make sure that the starting position is >= 0
+ - _rl_init_line_state (called by readline via readline_initialize)
+ now sets rl_mark to 0
+ - rl_get_{next,previous}_history set rl_mark to 0 if rl_point is at
+ the end of the line and rl_end otherwise in emacs mode
+
+lib/readline/kill.c
+ - rl_yank_nth_arg_internal and rl_paste_clipboard now set the mark
+ at point before calling rl_insert_text, like rl_yank
+ - rl_kill_full_line now resets rl_mark to 0
+ - rl_kill_line and rl_backward_kill_line now set rl_mark to the
+ point after the kill in emacs mode
+ - rl_kill_word and rl_backward_kill_word now set rl_mark to the
+ point after the kill in emacs mode
+ - rl_unix_word_rubout and rl_unix_line_discard now set rl_mark to
+ the point after the kill in emacs mode
+
+lib/readline/search.c
+ - noninc_search saves and restores the mark, since it can be changed
+ while reading the search string
+ - noninc_dosearch sets the mark at the end of the line, making the
+ region bound the `inserted' text since rl_point is set to 0
+ - rl_history_search_internal sets the mark at the end of the line,
+ for the same reason
+
+lib/readline/isearch.c
+ - rl_search_history now saves and restores the mark
+ - if no matching lines are found at all when doing an isearch, leave
+ point where it was instead of moving it to the end of the line
+
+ 12/17
+ -----
+lib/readline/rlmbutil.h
+ - new file, place for multi-byte character defines and extern
+ declarations
+
+lib/readline/{bind.c,readline.c,rlprivate.h}
+ - new bindable variable, `byte-oriented', tracks value of
+ rl_byte_oriented variable
+
+lib/readline/mbutil.c
+ - new file, with multibyte char utility functions
+
+lib/readline/{complete,display,readline,util,vi_mode}.c
+ - new code for multibyte characters, derived from IBM patch
+
+ 12/18
+ -----
+lib/sh/tmpfile.c
+ - include posixtime.h for time() extern declaration
+
+support/bashversion.c
+ - include <unistd.h> if it's available
+
+lib/readline/{histexpand,input,isearch,search}.c
+ - new code for multibyte characters, derived from IBM patch
+
+lib/readline/readline.h
+ - include rltypedefs.h
+
+ 12/19
+ -----
+lib/readline/complete.c
+ - slight change to mark-directories code to avoid adding a slash if
+ point is at the end of the line (rl_line_buffer[rl_point] == '\0')
+ and the previous character was a slash
+ - change printable_part to not return empty pathnames, which could
+ happen when completing filenames and a filename with a trailing
+ slash was passed as the argument. If the portion following the
+ trailing slash is NULL, ignore it and look for a previous slash.
+ If there's no previous slash, just return the filename argument
+ - new variable, rl_completion_mark_symlink_dirs, mirrors the value
+ of (user-settable with a variable) _rl_complete_mark_symlink_dirs
+ but may be modified by application-specific completion functions
+ when appropriate (set in rl_complete_internal and rl_menu_complete)
+
+lib/readline/readline.h
+ - extern declaration for rl_completion_mark_symlink_dirs
+
+pcomplete.c
+ - if one of the actions is CA_DIRECTORY, set
+ rl_completion_mark_symlink_dirs to indicate that we want the
+ trailing slash (might have to relax this)
+
+lib/readline/doc/rltech.texinfo
+ - documented rl_completion_mark_symlink_dirs variable
+
+lib/readline/doc/rluser.texinfo, doc/bash.1
+ - documented the fact that `complete -d' and `complete -o dirnames'
+ force readline to append a slash to symlinks to directories
+
+builtins/enable.def
+ - changed enable_shell_builtin to disallow enabling disabled
+ builtins in a restricted shell
+
+doc/{bash.1,bashref.texi}
+ - documented new enable behavior in restricted shells
+
+doc/Makefile.in
+ - new rule to make an `RBASH' file documenting the restrictions
+ imposed by a restricted shell
+
+expr.c
+ - broke the code that evaluates variables and returns results out
+ of readtok() into a new function: expr_streval()
+ - expr_streval() now performs the standard unset variable error
+ behavior if `set -u' has been executed and it's asked to look
+ up an unset variable
+ - broke the code that frees up the expression context stack into
+ a new function: expr_unwind()
+
+variables.c
+ - fixed bind_int_variable so it handles array element assignment,
+ so expressions like `b[7]++' and `b[0] = 42' work right
+ - new function, get_variable_value, returns the string value of
+ the SHELL_VAR * passed as an argument
+ - get_string_value now calls get_variable_value with a non-null
+ result from find_variable
+
+ 12/20
+ -----
+lib/readline/rlmbutil.h, mbutil.c
+ - combined _rl_find_next_mbchar and _rl_find_next_nonzero_mbchar into
+ a single function
+ - combined _rl_find_prev_mbchar and _rl_find_prev_nonzero_mbchar into
+ a single function
+
+lib/readline/{display,readline,vi_mode}.c
+ - changed callers of _rl_find_next_mbchar and
+ _rl_find_next_nonzero_mbchar
+
+lib/readline/{complete,display,histexpand,readline,vi_mode}.c
+ - changed callers of _rl_find_prev_mbchar and
+ _rl_find_prev_nonzero_mbchar
+
+ 12/20
+ -----
+lib/sh/mktime.c
+ - new file, from glibc/gawk, compiled in if system doesn't have a
+ working mktime(3)
+
+lib/sh/strftime.c
+ - new file, from gawk, compiled in if system doesn't have a
+ working strftime(3)
+
+lib/sh/Makefile.in, Makefile.in
+ - changes for mktime.c, strftime.c
+
+configure.in
+ - call AC_FUNC_MKTIME, AC_STRUCT_TM, AC_STRUCT_TIMEZONE
+ - call AC_REPLACE_FUNC(strftime)
+
+config.h.in
+ - add defines for TM_IN_SYS_TIME, HAVE_TZSET, HAVE_TM_ZONE,
+ HAVE_STRUCT_TM_TM_ZONE, HAVE_STRFTIME
+
+externs.h
+ - provide an extern declaration for strftime if HAVE_STRFTIME is
+ not defined and NEED_STRFTIME_DECL is
+
+lib/tilde/tilde.h
+ - header files should not include <config.h>
+
+parse.y
+ - replace code in decode_prompt_string that chops up value returned
+ by ctime(3) with calls to strftime -- as a result, the expansion
+ of \@ has changed slightly (since it depends on the locale)
+ - added new \D{format} prompt string escape; `format' is passed to
+ strftime(3). Empty format is the same as `%X' (locale-specific
+ representation of the current time)
+ - combined cases for '\\', '\a', '\e', and '\r' in same case branch
+ in decode_prompt_string
+
+doc/{bash.1,bashref.texi}
+ - documented new \D{format} prompt string expansion
+
+builtins/printf.def
+ - use ISO C PRIdMAX instead of INTMAX_CONV
+ - pass length of format modifiers to mklong instead of computing it
+ with strlen()
+
+lib/sh/{fmtulong,fmtullong}.c
+ - changes from Paul Eggert to make more general
+
+arrayfunc.c
+ - when converting a variable to an array, make sure to unset the
+ dynamic_value and assign_func members of the struct variable,
+ since they're not valid anymore
+
+ 12/27
+ -----
+configure.in
+ - use AC_HELP_STRING in AC_ARG_WITH and AC_ARG_ENABLE
+ - remove AC_ARG_ENABLE for largefile, since AC_SYS_LARGEFILE adds
+ one
+
+ 1/2/2002
+ --------
+{alias,bashline,execute_cmd,general,shell,subst,variables,arrayfunc}.c,general.h
+ - changed some calls to strchr to calls to xstrchr for multibyte
+ characters
+
+include/shmbutil.h
+ - add extern declaration for xstrchr to avoid including externs.h
+ where it's not appropriate
+
+{braces,make_cmd,pathexp,subst,arrayfunc}.c, lib/sh/xstrchr.c
+ - include shmbutil.h
+
+{stringlib,subst}.c, {externs,subst}.h
+ - moved substring() from subst.c to stringlib.c, moved declaration
+ from subst.h to externs.h
+
+lib/sh/xmbsrtowcs.c
+ - new file, replacement function for mbsrtowcs
+
+lib/sh/Makefile.in
+ - add entries for xmbsrtowcs.c
+
+Makefile.in
+ - add dependencies on shmbutil.h to appropriate object files
+
+lib/glob/strmatch.c
+ - break character-class testing out into separate function:
+ is_cclass, in prep for multibyte changes
+
+{braces,make_cmd}.c
+ - changes for multibyte characters
+
+builtins/printf.def
+ - changes from Paul Eggert to just use intmax_t everywhere an
+ int/long/quad is needed and print with "%ld" if the number
+ fits in a long and %PRIdMAX otherwise
+ - remove getlong, getulong, getllong, getullong, since they're
+ no longer needed
+ - use a new type `floatmax_t' to print floating point numbers, the
+ widest-available floating point type (like `intmax_t'); new
+ function `getfloatmax' that calls strtold or strtod as appropriate
+ - remove getdouble, getldouble, since they're no longer needed
+
+lib/sh/fmtumax.c
+ - new file, string-to-[u]intmax_t conversion, just includes
+ fmtulong.c with the right defines
+
+Makefile.in, lib/sh/Makefile.in
+ - additions for fmtumax.c
+
+bashtypes.h
+ - include <inttypes.h> if it's available
+
+expr.c
+ - arithmetic is now in intmax_t instead of long
+
+externs.h
+ - extern declaration for fmtumax
+ - change extern declarations for evalexp, itos, inttostr,
+ uitos, uinttostr since they now return or use intmax_t instead
+ of long
+
+{execute_cmd,general,mailcheck,subst,variables}.c, parse.y
+{array,general,subst,test,variables}.h
+lib/sh/{itos,netopen}.c
+builtins/{bashgetopt,common}.c, builtins/common.h
+builtins/{break,fc,history,jobs,let,printf,pushd,read,shift,wait}.def
+ - changes for intmax_t shell arithmetic conversion
+
+doc/{bashref.texi,bash.1}
+ - documented long->intmax_t shell arithmetic conversion
+
+sig.c
+ - in initialize_terminating_signals, if we've already trapped a
+ terminating signal, don't reset the signal handler for it
+
+ 1/3
+ ---
+{arrayfunc,pathexp}.c, parse.y
+ - changes for multibyte chars
+
+parse.y, lib/sh/strtrans.c
+ - moved ansiexpand from parse.y to lib/sh/strtrans.c
+
+parse.y, locale.c
+ - moved mk_msgstr and localeexpand from parse.y to locale.c
+
+parse.y
+ - new function, yy_input_name, returns name of input file from
+ bash_input.name
+ - broke the code that parses ((...)) constructs out of read_token
+ into a new function, parse_dparen()
+
+externs.h
+ - new extern declaration for ansiexpand(), mk_msgstr(), and
+ localeexpand()
+
+input.h
+ - new extern declaration for yy_input_name()
+
+{error,locale}.c
+ - use yy_input_name for error and other messages
+
+execute_cmd.c
+ - change shell_execve to make sure that the file is executable
+ before looking at the interpreter to find out why the execve()
+ failed (avoids misleading error message)
+
+lib/glob/glob.c
+ - move code that matches leading `.' and skips those filenames into
+ a separate function: skipname(), so there can be unibyte and
+ multibyte versions of that function
+
+ 1/7
+ ---
+subst.c
+ - more changes for multibyte characters
+
+print_cmd.c
+ - change semicolon() so it doesn't output a `;' immediately after a
+ newline, since that results in a null command, which is a syntax
+ error
+
+variables.c
+ - fix indirection_level_string to turn off set -x while evaluating
+ PS4
+
+ 1/8
+ ---
+builtins/set.def
+ - make -o options into one struct, instead of separate structs for
+ option names corresponding to flags and non-flag option names.
+ This has the side effect of sorting the option names in output
+
+lib/glob/glob.c
+ - new function, mbskipname(), multibyte char version of skipname()
+ - removed all #ifndef SHELL code, this will never be used outside
+ the shell
+
+include/posixdir.h
+ - move REAL_DIR_ENTRY define here from lib/glob/glob.c
+
+lib/glob/glob_loop.c
+ - new file, included in glob.c for unibyte and multibyte versions of
+ glob_pattern_p
+ - added some forward static function declarations with prototypes
+ - more changes for multibyte character handling
+
+lib/glob/Makefile.in
+ - make glob.c depend on glob_loop.c
+ - changes for xmbsrtowcs.[co]
+
+lib/glob/xmbsrtowcs.c
+ - moved here from lib/sh, since the matching functions use it, and
+ libglob.a is linked after libsh.a
+
+ 1/9
+ ---
+lib/glob/smatch.c
+ - new file, with strmatch (now xstrmatch) and associated functions,
+ with changes for multibyte chars
+
+lib/glob/sm_loop.c
+ - new file, included by smatch.c, with `generic' versions of matching
+ functions that are compiled twice: once each for single-byte and
+ multibyte characters
+
+lib/glob/strmatch.c
+ - strip out everything except strmatch(), which either calls fnmatch
+ (if HAVE_LIBC_FNM_EXTMATCH is defined) or xstrmatch
+
+lib/glob/collsyms.c
+ - changes for multibyte chars
+
+lib/glob/Makefile.in, Makefile.in
+ - changes for new source files
+
+ 1/10
+ ----
+lib/readline/complete.c
+ - new function, rl_completion_mode (rl_command_func_t *func), returns
+ the appropriate value to pass to rl_complete_internal depending on
+ FUNC and the value of `show-all-if-ambiguous'. This allows
+ application completion functions to present the same interface as
+ rl_complete
+
+lib/readline/readline.h
+ - new extern declaration for rl_completion_mode()
+
+lib/readline/doc/rltech.texinfo
+ - documented rl_completion_mode
+
+lib/readline/readline.[ch]
+ - bumped the version number to 4.3, changing the relevant cpp defines
+
+configure.in
+ - require that an installed readline version be at least readline-4.3
+
+bashline.c
+ - converted bash-specific completion functions to use
+ rl_completion_mode instead of passing TAB unconditionally
+
+builtins/bashgetopt.c
+ - the `#' option specifier now means a required numeric argument,
+ not an optional one
+
+builtins/type.def
+ - when converting [-]-{path,type,all} to -[pta], don't bother
+ freeing and reallocating the option string; just change opt[1]
+ and null opt[2]
+
+lib/sh/snprintf.c
+ - support %ls/%S and %lc/%C for wide strings and characters,
+ respectively, if HANDLE_MULTIBYTE is defined
+
+mailcheck.c
+ - don't print a message about new mail if the file has not grown,
+ even if the access time is less than the modification time
+
+ 1/14
+ ----
+lib/readline/readline.c
+ - new function, rl_replace_line, to replace the readline line buffer
+ with the text supplied as an argument
+ - new function, rl_replace_from_history, replaces readline line
+ buffer with text from history entry passed as argument (undocumented,
+ not in readline.h because it requires a definition of
+ HIST_ENTRY for the prototype)
+
+lib/readline/readlne.h
+ - new extern declaration for rl_replace_line
+
+lib/readline/doc/rltech.texinfo
+ - documented rl_replace_line
+
+lib/readline/{isearch,readline,search}.c
+ - use rl_replace_line and rl_replace_from_history where appropriate
+
+lib/readline/readline.c
+ - broke the code that sets point after moving through the history
+ (_rl_history_preserve_point and _rl_history_saved_point) out
+ into a separate function, _rl_history_set_point()
+
+lib/readline/{complete.c,rlprivate.h}
+ - find_completion_word -> _rl_find_completion_word
+ - free_match_list -> _rl_free_match_list
+
+lib/readline/complete.c
+ - postprocess_matches and _rl_free_match_list now return immediately
+ if passed a null match list
+
+variables.c
+ - new function, find_local_variable, finds a local variable by name
+ at the current variable context
+ - in find_variable_internal, call find_local_variable before searching
+ any of the temporary environments if variable_context > 0 (meaning
+ we're in a shell function). This lets a local variable
+ override a variable whose value was passed in the `function
+ environment'
+
+ 1/15
+ ----
+variables.h, execute_cmd.c
+ - declare variables describing the temporary environments in
+ variables.h instead of in C files
+
+findcmd.c, builtins/setattr.def
+ - instead of calling find_tempenv_variable, use find_variable_internal
+ and check whether the returned SHELL_VAR * has the tempvar
+ attribute
+
+variables.c
+ - tentative change to lookup order in find_variable_internal so that
+ function local variables are found before variables in
+ function_env when executing a shell function
+ - change make_local_variable to handle making a local variable when
+ a variable with the same name already appears in one of the
+ temporary environments
+ - broke the body of make_var_array out into a new function:
+ static char **make_env_array_from_var_list (SHELL_VAR **vars)
+ - new function, make_var_array_internal, takes a hash table to look
+ in and a pointer to a mapping function and returns a char **
+ environment-style list
+ - make_var_array now just calls make_var_array_internal
+ - new mapping function, local_and_exported, returns all local variables
+ in the current variable context with the export attribute set
+ - new function, make_local_export_array, returns an environment-style
+ char ** array of exported local variables in current context
+ - change environment creation order in maybe_make_export_env to
+ add variables to the environment in opposite order that
+ find_variable_internal uses. This means that local variables in
+ shell functions override variables with the same name in the
+ function_env
+ - change make_local_variable to set the initial value of the
+ variable it creates to NULL to make the `is set' and `is null'
+ tests that the expansion code does work right
+ - change make_local_variable to inherit the value of a variable with
+ the same name from the temporary enviroment
+
+ 1/16
+ ----
+Makefile.in
+ - link bashversion with buildversion.o instead of version.o, for
+ cross-compiling. version.o is for the target system;
+ buildversion.o is for the build system
+
+error.c
+ - add line numbers to internal_error() messages if the shell is
+ not interactive and running a shell script or a -c command
+ - report_error now prints non-zero line numbers for non-interactive
+ shells
+
+test.c
+ - test_syntax_error now calls builtin_error() instead of printing
+ its own messages
+
+builtins/common.c
+ - builtin_error now prints line numbers if a non-interactive shell
+ is running a shell script or a -c command
+
+print_cmd.c
+ - in cprintf, remove free_argp, since it's not used
+
+builtins/history.def
+ - make `history -n' increment the number of history lines in this
+ session by the number of lines read from the history file
+
+arrayfunc.c
+ - fix array_value_internal to expand the subscript even if the
+ variable is unset, so side effects produced by the arithmetic
+ evaluation will take place
+
+lib/readline/doc/{rluser,rltech}.texinfo
+ - some fixes for printing in @smallbook format from Brian
+ Youmans
+
+ 1/17
+ ----
+jobs.h
+ - new PRUNNING, PSTOPPED, PDEADPROC defines for PROCESSes, analogous
+ to RUNNING, STOPPED, and DEADJOB defines for jobs
+
+jobs.c
+ - use PS_RUNNING, PS_DONE, PS_STOPPED values for `running' field
+ of a PROCESS
+ - find_pipeline and find_job now take an additional flags argument
+ that, if non-zero, means to find only running processes; changed
+ all callers
+ - changed calls to find_pipeline and find_job made from waitchld
+ to find only running processes
+ - find_pipeline takes a third argument: an int *. If it looks in
+ the jobs list to find the pid, and the arg is non-null, it passes
+ the job index back to the caller. Used to avoid calls to
+ find_pipeline immediately followed by find_job with the same PID
+
+nojobs.c
+ - a couple of changes to make sure that set_pid_status is never
+ called with a pid argument of 0 or -1
+
+trap.c
+ - change trap_handler to longjmp to wait_intr_buf (set by wait_builtin)
+ if a signal is received for which a trap has been set during
+ execution of the wait builtin (need to include builtins.h and
+ builtins/builtext.h and declare some extern variables for the
+ right things to check)
+ - new variable to keep track of which signal caused the longjmp to
+ wait_intr_buf, set by trap_handler (wait_signal_received)
+
+builtins/wait.def
+ - set the return value of wait when a longjmp(wait_intr_buf, 1) is
+ done to 128 + wait_signal_received
+
+{jobs,nojobs}.c
+ - set wait_signal_received to SIGINT in wait_sigint_handler before
+ the longjmp(wait_intr_buf, 1)
+
+ 1/18
+ ----
+bashline.c
+ - turn off rl_filename_completion_desired when completing a command
+ name with a single match only if the first char of that match is
+ not a `/'
+ - if there are multiple identical matches for a command name in
+ attempt_shell_completion, turn off rl_filename_completion_desired
+ if the first char is not a `/' to avoid readline appending a
+ slash if there's a directory with the same name in the current
+ directory
+
+ 1/22
+ ----
+lib/readline/complete.c
+ - new variable, _rl_page_completions, to control whether we want to
+ run the internal pager when listing completions (defaults to 1)
+
+lib/readline/rlprivate.h
+ - extern declaration for _rl_page_completions
+
+lib/readline/bind.c
+ - new bindable variable, `page-completions', controls value of
+ _rl_page_completions
+
+lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
+ - documented `page-completions' variable
+
+Makefile.in
+ - use $(INSTALL_SCRIPT) instead of $(INSTALL_PROGRAM) to install
+ `bashbug'
+
+aclocal.m4
+ - fix small quoting problem in RL_LIB_READLINE_VERSION macro
+
+lib/readline/terminal.c
+ - fetch and save terminal's `vs' and `ve' cursor control attributes
+ - fetch and save terminal's `kI' attribute (string sent by Insert)
+ - new function, _rl_set_cursor, sets cursor to normal (insert mode)
+ or very visible (overwrite mode)
+
+lib/readline/readline.c
+ - new global variable, rl_insert_mode
+ - new function to toggle overwrite mode, rl_overwrite_mode
+ - each new line starts in insert mode
+ - switching to vi mode or emacs mode resets to insert mode
+ - reset cursor to normal before returning line
+ - _rl_replace_text now returns the number of characters inserted,
+ the return value from rl_insert_text
+ - new function, _rl_insert_or_replace_text (const char *string, int insert),
+ either inserts STRING or replaces the number of chars in STRING
+ with STRING starting at rl_point, depending on value of INSERT
+ - renamed rl_insert to _rl_insert_char, rl_insert just calls
+ _rl_insert_char with the same arguments when in insert mode
+ - new function, _rl_overwrite_char, handles self-insert in overwrite
+ mode. Does multibyte chars by reading an entire multibyte character
+ before entering overwrite loop
+ - new function, _rl_overwrite_rubout, handles RUBOUT when in
+ overwrite mode, called from rl_rubout
+ - new function, _rl_rubout_char, old body of rl_rubout; rl_rubout
+ calls this when not in overwrite mode
+
+lib/readline/readline.h
+ - extern declarations for rl_insert_mode and rl_overwrite_mode()
+
+lib/readline/rldefs.h
+ - define constants for values of rl_insert_mode
+
+lib/readline/rlprivate.h
+ - extern declarations for _rl_set_cursor and _rl_set_insert_mode
+ - change type of _rl_replace_text to return int
+ - extern declarations for _rl_insert_char, _rl_rubout_char
+
+lib/readline/funmap.c
+ - new bindable name `overwrite-mode', bound to rl_overwrite_mode
+
+lib/readline/rlconf.h
+ - define CURSOR_MODE if you want the cursor to show insert or
+ overwrite mode (only available if both `vs' and `ve' capabilities
+ are present)
+
+lib/readline/{complete,parens,readline,search,vi_mode}.c
+ - change calls to rl_insert to _rl_insert_char
+
+lib/readline/{readline,search}.c
+ - change calls to rl_rubout to _rl_rubout_char to avoid overwrite
+ mode problems
+
+lib/readline/vi_mode.c
+ - fix rl_vi_overstrike to just call _rl_overwrite_char, which
+ handles multibyte chars
+
+lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
+ - document new `overwrite-mode' command
+
+ 1/23
+ ----
+lib/readline/readline.c
+ - return 0 immediately from rl_insert_text if the string to insert
+ is NULL or ""
+
+bashline.c
+ - if a numeric argument is given to one of the bash-specific glob
+ pattern completion functions (including TAB), append a `*' to
+ the word before generating matches
+ - in attempt_shell_completion, when doing glob completion, only
+ set the match list to NULL if rl_completion_type == TAB and
+ there is more than one completion. This permits listing completions
+ with double tabs and displaying ambiguous completions
+ - new function, bash_glob_complete_word, appends a `*' to the word
+ to be completed and then globs it. It uses a new filename
+ quoting function (bash_glob_quote_filename) to avoid quoting
+ globbing characters in the filename if there are no matches or
+ multiple matches
+
+lib/readline/complete.c
+ - set completion_changed_buffer to 0 in rl_complete_internal if
+ no matches were produced by the completion generator function
+ - new variable, rl_completion_suppress_append, suppresses appending
+ of rl_completion_append_character. Settable by application
+ completion functions, always 0 when application completion
+ functions are called (set to 0 by rl_complete_internal and
+ rl_menu_complete)
+ - broke the code that assigns default values to readline completion
+ variables out of rl_complete_internal and rl_menu_complete into
+ a new function, set_completion_defaults (int what_to_do)
+
+lib/readline/readline.h
+ - extern declaration for rl_completion_suppress_append
+
+lib/readline/doc/rluser.texinfo, doc/bash.1
+ - documented behavior of glob-expand-word and glob-list-expansions
+ when supplied a numeric argument
+ - documented glob-complete-word
+
+lib/readline/doc/rltech.texinfo
+ - documented rl_completion_suppress_append
+
+ 1/24
+ ----
+lib/readline/text.c
+ - new file, text and character handling functions from readline.c
+
+lib/readline/misc.c
+ - new file, miscellanous bindable functions and their supporting
+ code from readline.c
+
+Makefile.in, lib/readline/Makefile.in
+ - changes for text.c, misc.c
+
+lib/readline/bind.c
+ - change ISKMAP case of rl_invoking_keyseqs_in_map to output
+ ESC as "\M-" instead of "\e" -- it's closer to the documentation
+ - change _rl_get_keyname to output ESC as \e instead of \C-[
+ (it's easier to understand)
+
+pcomplete.h
+ - new flag, COPT_NOSPACE
+
+builtins/complete.def
+ - new `-o nospace' option for complete and compgen (though it doesn't
+ really do anything for compgen, since that doesn't hand anything
+ off to readline)
+
+bashline.c
+ - if a programmable completion specifies COPT_NOSPACE, set
+ rl_completion_suppress_append = 1
+
+lib/readline/doc/rluser.texinfo
+ - documented new `-o nospace' option to complete and compgen
+
+doc/{bash.1,bashref.texi}
+ - documented $'\cX' escape sequence (forgot to before)
+
+ 1/28
+ ----
+variables.c
+ - make_new_variable now takes the HASH_TABLE * as its second
+ argument; changed callers
+ - new function, bind_variable_in_table, takes the HASH_TABLE * as
+ its third paramter; bind_variable calls bind_variable_in_table
+ with shell_variables as third argument
+
+variables.h
+ - new struct var_context, variable context (per-scope -- global,
+ function local, etc.)
+
+variables.[ch],builtins/common.[ch]
+ - moved functions that push and pop a variable context from
+ builtins/common.c to variables.c; move extern function
+ declarations to variables.h
+ - new function, all_local_variables
+ - variable_in_context is now static, used only by all_local_variables
+
+variables.[ch],execute_cmd.c
+ - push_context now takes the function name as an argument for
+ future use
+ - push_context takes an indication of whether or not the function is
+ executing in a subshell and saves the positional parameters only
+ if not in a subshell
+ - new functions for managing a stack of variable contexts and
+ scopes: new_var_context, dispose_var_context, push_var_context,
+ pop_var_context, push_scope, pop_scope
+
+builtins/declare.def
+ - call all_local_variables instead of map_over (...) in declare_internal
+ - don't call make_local_variable if we're looking at functions
+ ((flags_on & att_function) != 0), since it's wasted
+ - make sure VAR is set to NULL if check for variable_context fails
+ and we didn't just create or fetch a local variable in
+ declare_internal
+ - in non-function branch of declare_internal, only call find_variable
+ if VAR is NULL -- if it's not null, we just created or fetched a
+ local variable and don't need to do it again
+
+ 1/29
+ ----
+variables.[ch]
+ - the temporary environments (temporary_env, builtin_env, function_env)
+ are now HASH_TABLEs instead of argv-style arrays of strings (this
+ is an intermediate step on the way to the new lcc-inspired symbol
+ table scope structure)
+ - new internal attribute for variables: att_propagate. This means
+ to propagate the value out of the temporary environment up the
+ (for now implicit) chain of variable scopes when the containing
+ temporary environment is deleted
+
+variables.c
+ - assign_in_env now adds to the HASH_TABLE temporary_env instead
+ of making environment-style strings in an array of strings
+ - changed the way the temporary environments are merged into the
+ shell variable table to account for the new HASH_TABLE temp
+ environments
+ - changed the way the export environment is created due to the new
+ structure of the temporary environments
+ - new function, bind_variable_internal (name, value, table), binds
+ NAME to have VALUE in TABLE without searching the temporary
+ environments
+ - removed: shell_var_from_env_string, bind_name_in_env_array
+ - variable_in_context now checks the att_local attribute and makes
+ sure the variable is not invisible
+ - local_and_exported now makes sure the variable is not invisible
+
+execute_cmd.c
+ - we no longer need to copy the temporary environment to function_env
+ or builtin_env, we can simply use variable assignments
+
+{findcmd,subst,variables}.c, builtins/{declare,setattr}.def
+ - since variables from the temporary environments are no longer turned
+ into SHELL_VARs on the fly, don't dispose the SHELL_VAR returned
+ by find_variable or find_variable_internal
+ - need to savestring() the value returned by find_variable if it has
+ the tempvar attribute before calling bind_variable on it, because
+ bind_variable will search and bind into the temporary environments
+ and will free the old value before binding the new. For temporary
+ environments, these two pointers will be the same, and
+ bind_tempenv_variable will end up using freed memory
+
+builtins/{declare,setattr}.def
+ - set the att_propagate attribute when exporting or making readonly
+ variables from the temp environment (i.e., `var=value declare -x var'
+ or `var=value export var' sets the propagate attribute on the entry
+ for `var' in the temporary environment HASH_TABLE)
+
+lib/readline/isearch.c
+ - ^W when reading isearch string yanks the current word out of the
+ current line into the search string, skipping the portion already
+ matched
+ - ^Y when reading isearch string yanks the rest of the current line
+ into the search string, skipping the portion already matched
+
+ 1/30
+ ----
+{print_cmd,variables}.c
+ - moved indirection_level_string() from variables.c to print_cmd.c
+
+{externs,variables}.h
+ - moved extern declaration of indirection_level_string to externs.h
+
+{general,variables}.c
+ - moved assignment() from variables.c to general.c
+
+{general,variables}.h
+ - moved extern declaration of assignment() to general.h
+
+{externs,input}.h
+ - moved extern declaration of decode_prompt_string to externs.h
+
+print_cmd.c
+ - include flags.h, don't include stdc.h
+
+variables.c
+ - moved some functions around to group functions better
+ - changed new_shell_variable to explicitly initialize each member
+ of the created struct variable instead of calling bzero()
+ - make_new_variable now just calls new_shell_variable instead
+ of duplicating what it does
+ - removed some code in bind_function that duplicated what
+ new_variable does on the newly-created SHELL_VAR
+ - since there are no local function variables (functions are always
+ made at the global scope), kill_all_local_variables() doesn't
+ need to consider functions
+
+ 1/31
+ ----
+variables.c
+ - sort the array of special variables
+ - short-circuit the search in stupidly_hack_special_variables if
+ the passed name can't be found in the rest of the array
+ (that is, if name[0] < special_vars[i].name[0])
+
+lib/readline/history.c
+ - unstifle_history() was returning values exactly opposite of
+ the documentation
+
+lib/readline/doc/{hsuser.texinfo,history.3}
+ - clarified the unstifle_history() documentation a little
+
+ 2/4
+ ---
+variables.c
+ - in bind_variable, don't call bind_tempenv_variable after a
+ find_tempenv_variable succeeds -- just change the value inline.
+ There's no reason to look it up twice
+ - change makunbound to only call stupidly_hack_special_variables
+ if we're not unsetting a function
+
+variables.[ch]
+ - new function, unbind_function, like makunbound but doesn't mess
+ with previous contexts or calling stupidly_hack_special_variables
+
+builtins/set.def
+ - change unset_builtin to call either unbind_func or unbind_variable
+
+builtins/getopts.def
+ - call unbind_variable(name) instead of makunbound(name, shell_variables)
+
+ 2/5
+ ---
+lib/glob/sm_loop.c
+ - use malloc instead of xmalloc in BRACKMATCH and handle failures
+
+error.c
+ - add extern declaration of executing_line_number with prototype,
+ since execute_cmd.h can't be included without including other
+ files
+
+lib/readline/parens.c
+ - include <unistd.h>
+
+lib/malloc/stats.c
+ - include <unistd.h>
+ - add extern declaration of malloc_free_blocks() with prototype
+
+pathexp.c
+ - added some forward declarations with prototypes for static functions
+
+lib/readline/rlprivate.h
+ - removed declarations of rl_untranslate_keyseq, rl_discard_argument,
+ rl_stop_output, rl_alphabetic since they appear in readline.h
+
+ 2/6
+ ---
+{arrayfunc,execute_cmd,pcomplete,shell}.c
+ - change calls to makunbound(name, shell_variables) to
+ unbind_variable (name)
+
+ 2/7
+ ---
+builtins/getopt.c
+ - don't defer incrementing of OPTIND when an invalid option is
+ encountered until the next call to sh_getopt() -- what if OPTIND
+ is reset before that next call? This means that OPTIND is always
+ incremented to the next option to be handled when an option is
+ returned, whether it's valid or not. This is what POSIX-2002
+ says to do.
+
+syntax.h
+ - new #define, CSUBSTOP
+
+mksyntax.c
+ - add "-=?+" with value CSUBSTOP to the syntax table. These are the
+ valid expansion operators OP in ${param[:]OPword}
+
+subst.c
+ - use table lookup for CSUBSTOP in VALID_PARAM_EXPAND_CHAR
+ - new flags for the string extraction functions: EX_NOALLOC. This
+ indicates that the functions are being used only to skip over
+ strings and the result won't be used, so the substring shouldn't
+ be allocated, copied, and freed
+ - new flag for string_extract: EX_VARNAME. This serves the same
+ purpose as the old `varname' parameter. parameter_brace_expand()
+ changed appropriately
+ - extract_delimited_string and extract_dollar_brace_string now take
+ an additional `flags' argument, which may include EX_NOALLOC
+ - changed callers of extract_delimited_string and
+ extract_dollar_brace_string appropriately
+ - string_extract now understands EX_NOALLOC; callers changed
+ - some smaller code cleanups
+ - converted char_is_quoted(), unclosed_pair(), and skip_to_delim()
+ to understand multibyte characters
+
+ 2/11
+ ----
+variables.[ch]
+ - moved to a symbol organization inspired by lcc. The basic structure
+ is no longer a HASH_TABLE, but a VAR_CONTEXT, which includes a hash
+ table as one of its members. VAR_CONTEXTs are linked together to do
+ variable scoping. One nice thing about this is that the entire
+ symbol table doesn't need to be searched at function scope exit to
+ remove local variables. Fixes problems with only one instance of
+ builtin_env and function_env, even though it really is a stack
+ - shell_variables is now a VAR_CONTEXT *, with a global_variables
+ variable that points to the bottom of the stack for fast access
+ - function-scope local variables (assignments specified on the command
+ line before a function call) and function-local variables (declared
+ with the `local' builtin) have been unified in the same variable
+ context, replacing function_env
+ - assignment statements preceding the `.' and `eval' builtins are now
+ a separate variable scope VAR_CONTEXT, replacing builtin_env
+ - temporary_env (a HASH_TABLE) is now the only separate environment
+ - changes to export environment creation, variable binding, variable
+ lookup, local variable propagation all changed to work with the
+ new symbol table/scope structure
+ - a SHELL_VAR no longer has a `prev_context' member; it's not needed
+
+execute_cmd.c
+ - changes to push_context calls to include any temporary variables in
+ temporary_env; pop_context takes care of propagating any temporary
+ variables if necessary
+ - calls to push_scope if `eval' or `.' is called with a list of
+ preceding variable assignments, and pop_scope called at end of
+ builtin's execution. pop_scope takes care of merging temporary
+ variables into the shell environment when appropriate
+
+builtins/{setattr,declare}.def
+ - changes to account for variable assignments preceding `local',
+ `export', `readonly', `declare', etc. to work with the new
+ variable scoping implementation
+
+shell.c
+ - since shell_variables is now a VAR_CONTEXT, call
+ delete_all_contexts() when the shell is reinitializing instead of
+ delete_all_variables()
+
+builtins/common.c
+ - new function, get_job_by_name(), used by execute_simple_command()
+ for the `auto_resume' stuff and get_job_spec()
+
+builtins/common.h
+ - new set of #defined constants for flags argument to
+ get_job_by_name()
+
+ 2/12
+ ----
+command.h
+ - new redirection operator: r_reading_string for `here strings'
+
+parse.y
+ - new token, LESS_LESS_LESS, for new redirection `here string'
+ operator: [N]<<< word
+ - recognize LESS_LESS_LESS and create the appropriate redirection
+
+{dispose_cmd,copy_cmd,make_cmd,print_cmd}.c
+ - recognize r_reading_string and do the right thing (dispose_redirects,
+ copy_redirect, print_redirection, and make_redirection, respectively)
+
+redir.c
+ - here_document_to_fd now takes the redirection operator as its
+ second argument
+ - new function, write_here_string, expands a here string and writes it
+ to the here document file descriptor
+ - here_document_to_fd calls write_here_string for r_reading_string
+ operator
+ - handle r_reading_string in do_redirection_internal() and
+ stdin_redirection()
+
+ 2/18
+ ----
+doc/{bash.1,bashref.texi}
+ - documented here strings
+
+{configure,Makefile}.in
+ - bumped version number up to bash-2.05b and the release status
+ to alpha1
+
+expr.c
+ - make expr_streval understand that variables with the `invisible'
+ attribute are really unset, and accessing such a variable when
+ `set -u' is set should be an error
+
+variables.h
+ - new accessor macros: var_isset(var) and var_isnull(var), test
+ whether var->value is NULL
+
+{eval,subst,variables}.c, builtins/{declare,setattr}.def
+ - be more consistent about using value_cell(var) instead of
+ directly referencing var->value
+ - use var_isset and var_isnull where appropriate
+
+builtins/help.def
+ - augmented a couple of help strings with pointers to `info' and
+ `man -k'
+
+ 2/14
+ ----
+variables.h
+ - new macros to use when setting variable values directly instead of
+ through bind_variable and its siblings
+
+{arrayfunc,variables}.c
+ - use var_setarray and other lvalue macros instead of assigning to
+ var->value directly
+
+builtins/setattr.def
+ - change show_var_attributes to show function definitions separately
+ from function attributes. This allows the output of `declare -f'
+ (with other flags), `export -f', and `readonly -f' to be reused as
+ shell input, instead of the old
+
+ declare -f[flags] func()
+ {
+ foo
+ }
+
+ which has syntax errors. When in posix mode, `export -fp' and
+ `readonly -fp' still don't print function definitions
+
+ 2/16
+ ----
+parse.y
+ - comment out calls to discard_parser_constructs; no need to call
+ empty functions
+
+ 2/18
+ ----
+lib/sh/memset.c
+ - replacement function for memset(3)
+
+lib/sh/Makefile.in, Makefile.in
+ - additions for memset.c
+
+configure.in,config.h.in
+ - check for memset, define HAVE_MEMSET if found, add memset.o to
+ LIBOBJS if not
+
+lib/malloc/malloc.c
+ - removed zmemset(), replaced with calls to memset(3)
+
+{subst,execute_cmd,lib/sh/netopen}.c
+ - replaced calls to bzero with calls to memset
+
+subst.c
+ - word_split() now takes a second argument: the value of $IFS, so
+ it doesn't have to look up IFS every time
+ - word_list_split() now calls getifs() and passes the result to
+ each call to word_split() as its second arg
+ - do a quick scan for CTLNUL in remove_quoted_nulls before allocating
+ new string, copying old string to it, copying over original string
+ and freeing new string
+
+eval.c
+ - don't bother calling dispose_used_env_vars if temporary_env is NULL
+
+execute_cmd.c
+ - fix fix_assignment_words to only look up the builtin corresponding
+ to the first word if one of the words in the list is marked as
+ W_ASSIGNMENT
+
+hashlib.c
+ - renamed hash_string to hash_bucket, which better reflects what it
+ does
+ - extracted the portion of hash_bucket that computes the hash out
+ into a new hash_string()
+ - made new body of hash_bucket into a macro HASH_BUCKET; function
+ just calls the macro
+ - calls to hash_bucket in this file now call HASH_BUCKET macro
+ - in add_hash_item, just add a new item at the front of the appropriate
+ bucket list instead of at the end
+
+hashcmd.h
+ - reduced FILENAME_HASH_BUCKETS to 53 from 107
+
+ 2/19
+ ----
+hashlib.[ch]
+ - find_hash_item, remove_hash_item, add_hash_item all take a new
+ third `flags' argument
+ - add_hash_item doesn't call find_hash_item if HASH_NOSRCH passed in
+ flags arg
+ - find_hash_item will create a new hash table entry if HASH_CREATE is
+ passed in flags arg
+ - new function, hash_walk, takes a pointer to a function and a table
+ and calls the function for each item in the table. If the function
+ returns < 0, the walk is terminated
+ - fixed flush_hash_table to set table->nentries to 0 after freeing
+ all entries
+ - BUCKET_CONTENTS now has a new `khash' member, what key hashes to;
+ set by HASH_BUCKET macro (which calls hash_string), assigned in
+ find_hash_item (HASH_CREATE) and add_hash_item
+ - find_hash_item and remove_hash_item check `khash' against the
+ hash of the string argument before calling strcmp
+
+{alias,hashlib,hashcmd,pcomplib,variables}.c
+ - changed all calls to {find,remove,add}_hash_item
+
+builtins/hash.def
+ - return immediately from print_hashed_commands if there are no
+ entries in the hash table (this eliminates need for `any_printed'
+ variable)
+ - change print_hashed_commands to use hash_walk
+
+alias.c
+ - short-circuit all_aliases and map_over_aliases if
+ HASH_ENTRIES(aliases) == 0
+ - simplify map_over_aliases by just allocating enough room in the
+ returned list for all entries in the aliases hash table, instead
+ of doing the check and xrealloc
+ - add_alias now calls add_hash_item with HASH_NOSRCH argument
+
+pcomplete.h
+ - sh_csprint_func_t is no more; use hash_wfunc instead
+
+pcomplib.c
+ - short-circuit print_all_compspecs if HASH_ENTRIES(prog_completes)
+ is 0
+ - print_all_compspecs now takes a `hash_wfunc *' argument
+ - print_all_compspecs now just calls hash_walk
+
+builtins/complete.def
+ - new function, print_compitem, takes a BUCKET_CONTENTS *, extracts
+ the right info, and calls print_one_completion
+
+variables.c
+ - short-circuit map_over_funcs if HASH_ENTRIES(shell_functions) == 0
+ - short-circuit flatten if the passed table has no entries
+ - bind_variable_internal takes a new fourth argument: `hflags',
+ to pass to hash table functions
+ - make_new_variable now passes HASH_NOSRCH flag to add_hash_item
+ - set_if_not now calls bind_variable_internal and passes
+ HASH_NOSRCH as flags argument
+ - bind_function now calls add_hash_item with HASH_NOSRCH argument
+ - fixed make_local_variable: old_var == 0 && was_tmpvar can never
+ be true
+ - if we didn't find an old variable in make_local_variable, call
+ bind_variable_internal with HASH_NOSRCH argument
+ - fix push_temp_var to reset variable context to 0 if binding into
+ global_variables->table
+
+parse.y
+ - fix to parse_compound_assignment to avoid core dumps on empty
+ compound array assignments
+
+subst.c
+ - getifs() is now global so read_builtin can call it
+
+subst.h
+ - extern declaration for getifs()
+
+ 2/20
+ ----
+hashlib.c
+ - changed hash_string to use a better hash function
+ - changed HASH_BUCKET to use masking rather than modulus to hash a
+ string to a bucket -- HASH TABLES MUST NOW BE SIZED BY POWERS
+ OF TWO
+
+hashlib.h
+ - DEFAULT_HASH_BUCKETS is now 64
+
+hashcmd.h
+ - FILENAME_HASH_BUCKETS is now 64
+
+pcomplib.c
+ - COMPLETE_HASH_BUCKETS is now 32
+
+variables.c
+ - TEMPENV_HASH_BUCKETS is now 4
+
+alias.c
+ - new define, ALIAS_HASH_BUCKETS, set to 16, used to size alias table
+
+hashlib.c
+ - removed initialize_hash_table; folded code into make_hash_table
+ - fixed copy_bucket_array to copy the `khash' member of an item
+ - renamed functions to be more systematic and easier for me:
+ make_hash_table -> hash_create
+ hash_table_nentries -> hash_size
+ copy_hash_table -> hash_copy
+ find_hash_item -> hash_search
+ remove_hash_item -> hash_remove
+ add_hash_item -> hash_insert
+ flush_hash_table -> hash_flush
+ dispose_hash_table -> hash_dispose
+ print_table_stats -> hash_pstats
+ get_hash_bucket -> hash_items
+ - changed hash_search to short-circuit if table->nentries == 0 and
+ HASH_CREATE has not been passed in the flags argument
+
+{alias,variables,hashcmd,pcomplib}.c
+ - renamed calls to all renamed functions from hashlib.c
+
+builtins/kill.def
+ - don't drop a leading `-' in a pid argument
+ - call kill_pid with an explicit third argument of 1 if the pid
+ argument to kill is < -1, rather than rely on the behavior of
+ kill(2)
+
+ 2/21
+ ----
+subst.c
+ - quoted_strchr is no longer declared `inline'
+ - skip_double_quoted is no longer declared `inline'
+ - string_extract_double_quoted is no longer declared `inline'
+
+lib/readline/input.c
+ - rl_gather_tyi is now an `int' valued function; returns the number
+ of characters read (0 or 1) or -1 on error
+ - if rl_gather_tyi() returns -1 to rl_read_key(), set rl_done to 1
+ and return a newline; something is wrong with the input fd
+
+ 2/25
+ ----
+variables.[ch]
+ - IFS is now a special variable
+ - new special var function, sv_ifs(), called when IFS is set or unset
+ - call setifs() when IFS is first set in initialize_shell_variables
+ - call setifs() from make_local_variable and assign_in_env if
+ appropriate
+ - if assign_in_env() is called with a var assignment like `VAR=',
+ make the value in the new SHELL_VAR created be "" like
+ do_assignment_internal does, since certain parts of the shell use
+ a NULL value as evidence that the variable is unset (though
+ attributes may have been assigned)
+ - if push_temp_var pushes something up to the global_variables table,
+ make sure that the context is set to 0
+ - new function dispose_temporary_env, called by both
+ dispose_used_env_vars and merge_temporary_env with different `free
+ func' function pointers; calls sv_ifs after disposing the temporary
+ environment
+ - push_exported_var now calls bind_variable_internal instead of
+ bind_variable
+ - pop_scope and pop_context now call sv_ifs
+
+subst.[ch]
+ - new global variables used to keep track of IFS state, to avoid
+ having to call find_variable("IFS") all the time:
+
+ ifs_var the SHELL_VAR for IFS
+ ifs_value ifs_var ? value_cell (ifs_var) : " \t\n"
+ ifs_cmap bitmap of characters in ifs_value
+ ifs_firstc first character in ifs_value
+
+ - new function setifs(), sets the aforementioned ifs variables each
+ time IFS is set or unset, and at nested scope exit
+ - instead of calling getifs() from inside subst.c, use ifs_value
+ - getifs() now just returns ifs_value
+ - use ifs_firstc in string_list_dollar_star()
+ - only call member() in issep() if separators is more than one char
+ - don't cache a bitmap every time expand_word_internal() is called;
+ use ifs_cmap instead
+ - new macro, isifs(c), checks whether C is in ifs_cmap
+
+builtins/read.def
+ - use issep() and isifs() macros instead of looking at $IFS directly
+
+syntax.h
+ - make sure macros that access sh_syntaxtab cast the argument to
+ `unsigned char' before array access
+ - new macros: issyntype(c, type) and notsyntype(c, type), check
+ sh_syntaxtab[c] for a particular flag value `type'
+
+ 2/26
+ ----
+hashlib.h
+ - the `data' member of a `BUCKET_CONTENTS' is now a PTR_T
+
+{hashlib,alias,variables,hashcmd,pcomplib}.c
+ - removed some casts when assigning to and using `data' member of a
+ `BUCKET_CONTENTS'
+
+subst.c
+ - in split_at_delims, call make_word_list instead of allocating and
+ initializing a WORD_LIST * directly
+
+make_cmd.[ch]
+ - add_string_to_list is now just a macro that calls make_word_list
+ - make_simple_command now calls make_word_list instead of allocating
+ a WORD_LIST * directly
+
+ 2/27
+ ----
+copy_cmd.c
+ - copy_word now calls make_bare_word to allocate the copy
+ - copy_word_list now calls make_word_list to allocate the copy
+
+shell.h
+ - include `ocache.h' for simple object caching
+ - call cmd_init() to initialize the WORD_DESC and WORD_LIST object
+ caches
+
+{make,dispose}_cmd.c
+ - allocate WORD_DESC * and WORD_LIST * vars from their respective
+ ocaches, and return them to the cache when disposing
+
+jobs.c
+ - renamed old `waiting_for_job' variable to `queue_sigchld', which
+ better reflects its intent: sigchld_handler does not call waitchld
+ if `queue_sigchld' is non-zero, it simply increments the count of
+ waiting children
+ - cleanup_dead_jobs now just sets and clears queue_sigchld instead of
+ blocking and unblocking SIGCHLD; it calls waitchld at the end if
+ `sigchld' is non-zero, but that's not really necessary
+ - in setjstatus, only call xrealloc if `statsize' is less than the
+ number of processes passed -- no reason to do it if they're the
+ same
+
+ 2/28
+ ----
+sig.[ch]
+ - reinitialize_signals is no more; initialize_signals takes an
+ argument saying whether or not we are reinitializing
+
+builtins/exec.def
+ - reinitialize_signals() -> initialize_signals(1)
+
+test.c
+ - fix filecomp() to work right when one file has a non-positive
+ timestamp and the other file does not exist
+
+doc/{bash.1,bashref.texi}
+ - document what happens for test's -nt and -ot operators when one
+ file operand exists and the other does not
+
+jobs.c
+ - if we haven't messed with SIGTTOU, just manipulate queue_sigchld
+ in notify_of_job_status instead of calling sigprocmask()
+ - list_one_job now calls pretty_print_job directly instead of going
+ through print_job
+ - pretty_print_job now must be called with SIGCHLD blocked or held
+ instead of blocking SIGCHLD itself
+ - changed start_job so that it doesn't call UNBLOCK_CHILD and then
+ immediately call BLOCK_CHILD again (explicitly or via last_pid()),
+ call find_last_pid instead of last_pid and then UNBLOCK_CHILD
+ - changed wait_for_job the same way
+ - find_last_pid now takes a second argument: block; uses BLOCK_CHILD
+ if `block' is 1, not otherwise. Changed existing calls:
+ find_last_pid(j) -> find_last_pid(j, 0)
+ last_pid(j) -> find_last_pid(j, 1)
+ `last_pid()' is now gone
+ - rewrote wait_for_background_pids(); it was a little strange
+
+copy_cmd.c
+ - copy_if_command: don't copy null false_case commands
+ - copy_simple_command: don't copy a null redirection list
+
+subst.c
+ - in get_word_from_string and list_string, just check for " \t\n"
+ directly rather than calling strcmp
+ - in get_word_from_string and strip_trailing_ifs_whitespace, use
+ isifs() instead of issep(), since they're never called with
+ separators != $IFS
+ - change issep() to call isifs if separators is longer than one
+ character, since it's never called with anything but "", " ",
+ or $IFS
+
+ 3/1
+ ---
+sig.h
+ - enclose the BLOCK_SIGNAL macro in a do {...} while (0) loop, at it
+ should have been all along
+
+lib/readline/doc/rltech.texinfo
+ - document that readline defaults to stdin/stdout if rl_instream/
+ rl_outstream are NULL
+
+lib/readline/terminal.c
+ - if an application is using a custom redisplay function,
+ rl_resize_terminal just calls rl_forced_update_display to tell
+ (*rl_redisplay_func) to update the display, otherwise call
+ _rl_redisplay_after_sigwinch
+
+lib/readline/readline.c
+ - change readline_internal_setup() so the change to vi insertion mode
+ happens even if readline_echoing_p is 0
+ - don't print the prompt to rl_outstream in readline_internal_setup
+ if we're not echoing and the caller has defined a custom redisplay
+ function -- let the redisplay function deal with it
+
+configure.in
+ - new option: --enable-mem-scramble, controls memory scrambling on
+ free() (on by default; only affects use of bash malloc)
+
+config.h.in
+ - new option MEMSCRAMBLE, controlled by --enable-mem-scramble
+
+ 3/5
+ ---
+parse.y
+ - added ksh-like behavior of [...] to read_token_word: if a `[' is
+ seen in an assignment context and the previous characters in the
+ token form a valid identifier, parse the [...] with
+ parse_matched_pair to allow spaces (and newlines) in the subscript
+
+bashline.c
+ - new function bash_servicename_completion_function, for completing
+ service names from /etc/services
+
+bashline.h
+ - new extern declaration for bash_servicename_completion_function
+
+builtins/complete.def
+ - allow new `-s/-A service' option to complete and compgen builtins
+
+pcomplete.h
+ - new CA_SERVICE define, new ITEMLIST variable it_services
+
+pcomplete.c
+ - add callback to bash_servicename_completion_function to generate
+ list of matching service names for completion
+
+doc/bash.1,lib/readline/doc/rluser.texinfo
+ - documented new `-s/-A service' option to complete and compgen
+
+ 3/6
+ ---
+builtins/read.def
+ - change hard-coded `0' to new variable `fd' (initially 0) in
+ preparation for adding `-u fd' option
+
+bashline.c
+ - bash_directory_completion_hook calls expand_prompt_string instead
+ of expand_string (it does the right thing). This keeps expansion
+ errors from causing a longjmp, which shouldn't happen because of
+ completion
+ - command_subst_completion_function was augmented very slightly to
+ do filename completion on a non-command-word in a command
+ substitution
+ - command_subst_completion_function now skips over the lcd that
+ rl_completion_matches puts in matches[0] if there is more than
+ one possible completion
+
+ 3/7
+ ---
+builtins/read.def
+ - only add the unwind_protect to free `rlbuf' if `edit' is non-zero,
+ since we won't be using readline otherwise
+
+lib/sh/zread.c
+ - renamed zread1 -> zreadintr
+
+redir.c
+ - small change to redirection_error() to make a slightly better
+ guess about the invalid file descriptor if the redirection op is
+ r_duplicating_input or r_duplicating_output
+
+include/stdc.h
+ - new macro, SH_VA_START, to encapsulate the difference between
+ stdarg va_start and varargs va_start
+
+{error,pcomplete,print_cmd}.c,builtins/common.c,lib/sh/snprintf.c
+ - use SH_VA_START
+
+ 3/8
+ ---
+builtins/read.def
+ - support for the ksh-like `-u fd' option
+
+general.c
+ - new function sh_validfd(fd), returns 1 if fd is a valid open file
+ descriptor
+
+general.h
+ - extern decl for sh_validfd
+
+bashline.c
+ - don't call posix_readline_initialize() from initialize_readline();
+ sv_strict_posix() should already have taken care of it
+
+ 3/11
+ ----
+{error,pcomplete,print_cmd}.c, builtins/common.c
+ - removed non-varargs versions of functions
+
+builtins/printf.def
+ - if the string argument to %q has non-printing characters, call
+ ansic_quote to quote it rather than sh_backslash_quote
+
+variables.h
+ - new attribute: att_trace (and corresponding trace_p() macro).
+ Functions with this attribute will inherit the DEBUG trap.
+ Currently ignored for variables
+
+builtins/declare.def
+ - new `-t' option to declare/typeset toggle the `att_trace' attribute
+
+builtins/setattr.def
+ - check for att_trace and output `-t' flag in show_var_attributes
+
+execute_cmd.c
+ - if a function is being traced (it has the `-t' attribute set),
+ don't turn off the DEBUG trap when it executes
+
+doc/{bash.1,bashref.texi}
+ - document the new `-t' option to declare/typeset
+
+ 3/12
+ ----
+execute_cmd.c
+ - don't execute the debug trap in the `cm_simple:' case of
+ execute_command_internal; run it in execute_simple_command so we
+ get the line number information right when executing in a shell
+ function
+ - run a DEBUG trap before executing ((...)) arithmetic commands,
+ like ksh93
+ - run a DEBUG trap before executing [[...]] conditional commands,
+ like ksh93
+
+eval.c
+ - add a static forward declaration for alrm_catcher()
+
+general.c
+ - add static forward declarations for bash_special_tilde_expansions,
+ unquoted_tilde_word, initialize_group_array
+
+variables.h
+ - add extern declarations for sh_get_env_value, map_over_funcs,
+ local_exported_variables
+
+variables.c
+ - add static forward declarations for dispose_temporary_env,
+ make_func_export_array
+
+bashhist.c
+ - add static forward declaration for check_history_control
+
+configure.in
+ - add a call to AC_CHECK_DECLS for strcpy
+
+config.h.in
+ - add placeholder for HAVE_DECL_STRCPY define, set by configure
+
+general.h
+ - don't declare strcpy if HAVE_DECL_STRCPY is defined with a non-zero
+ value
+
+sig.h
+ - add prototype to typedef of SigHandler
+
+lib/readline/histlib.h
+ - removed extern declaration of strcpy()
+ - include string.h/strings.h directly in histlib.h instead of source
+ files
+
+lib/readline/{histexpand,histfile,history,histsearch}.c
+ - don't include string.h/strings.h now that histlib.h includes it
+
+lib/tilde/tilde.c
+ - removed extern declaration of strcpy(), rely on string.h/strings.h
+
+command.h
+ - four new redirection types: r_move_input, r_move_output,
+ r_move_input_word, r_move_output_word, for
+ [N]<&word- and [N]>&word- from ksh93
+
+print_cmd.c
+ - changes to print r_move_input[_word] and r_move_output[_word]
+
+copy_cmd.c
+ - changes to copy r_move_input[_word] and r_move_output[_word]
+
+dispose_cmd.c
+ - changes to dispose r_move_input_word and r_move_output_word
+
+make_cmd.c
+ - changes to make r_move_input[_word] and r_move_output[_word] from
+ r_duplicating_{input,output}_word, which is how the new redirs
+ are passed by the parser
+
+redir.c
+ - changes to make r_move_input[_word] and r_move_output[_word] do
+ the right thing when executed
+
+builtins/read.def
+ - print an error message and return failure immediately if zread/zreadc
+ return < 0
+
+doc/{bash.1,bashref.texi}
+ - documented new [n]<&word- and [n]>&word- redirections
+
+ 3/13
+ ----
+lib/readline/isearch.c
+ - enabled code to allow chars bound to rl_rubout to delete characters
+ from the incremental search string
+
+shell.c
+ - add `-l' invocation option to parse_shell_options; equivalent to
+ `--login'
+ - fixed set_login_shell to check first char of base pathname of argv0
+ for `-', like other shells
+ - move the check for make_login_shell after the call to
+ parse_shell_options because the `-l' option might set it
+
+doc/{bash.1,bashref.texi}
+ - documented new `-l' invocation option
+
+array.c
+ - new function, array_shift, shifts an array left by a specified
+ number of elements
+ - array_walk is now compiled in by default
+ - array_to_assignment_string now takes a second argument: int quoted.
+ If non-zero, the result is single-quoted before being returned
+ - quoted_array_assignment_string has been removed
+
+array.[ch]
+ - renamed most of the array functions so that all have an array_
+ prefix and are more systematically named
+ - array_slice now preserves the indicies from the original array
+ - change array_to_assign to use a static buffer for expanding the
+ array indices, instead of malloc/free
+
+{arrayfunc,subst,variables}.c, builtins/read.def
+ - changed calls to various array functions to use new names
+
+lib/sh/stringvec.c, externs.h
+ - renamed all of the functions to have a strvec_ prefix and to have
+ a more sensible name scheme
+ - strvec_search's arguments are now supplied in reverse order, so
+ the char **array is first, like the other functions
+ - new function, strvec_resize, xrealloc for strvecs
+
+{alias,array,bracecomp,braces,bashline,execute_cmd,findcmd,general,pathexp,
+pcomplete,variables}.c
+lib/sh/stringlist.c
+builtins/{bind,complete,exec,getopts,pushd,set}.def
+ - change calls to all functions from lib/sh/stringvec.c
+ - use strvec_resize where appropriate
+
+externs.h
+ - only declare dup2() if HAVE_DUP2 is undefined or DUP2_BROKEN is
+ defined
+
+lib/readline/{macro,readline,util}.c, lib/readline/rlprivate.h
+ - _rl_defining_kbd_macro is gone, use RL_ISSTATE(RL_STATE_MACRODEF)
+
+lib/readline/readline.h
+ - new struct readline_state, encapsulates most of readline's internal
+ state in case you need reentrancy or nested calls to readline()
+ - extern declarations for rl_save_state, rl_restore_state
+
+lib/readline/readline.c
+ - add (undocumented) int rl_save_state (struct readline_state *),
+ int rl_restore_state (struct readline_state *)
+
+ 3/14
+ ----
+array.[ch]
+ - new function, array_rshift, shifts an array right by a specified
+ number of elements, optionally inserting a new element 0
+
+examples/bashdb/bashdb
+ - new single-file version of bash debugger, originally modified from
+ version in bash-2.04 by Gary Vaughan (the old debugger still
+ appears in examples/obashdb). This version has a more gdb-like
+ command set
+
+examples/bashdb/bashdb.el
+ - new emacs bashdb debugger mode from Masatake YAMATO <jet@gyve.org>
+
+execute_cmd.c
+ - don't make $LINENO relative to function start unless the shell is
+ currently interactive -- this is what ksh93 does and what I
+ believe to be the intent of POSIX.2 (this required changing some
+ of the test checks because the output has changed)
+ - run the debug trap for each command in an arithmetic for expression,
+ like ksh93 does
+
+lib/readline/vi_mode.c
+ - redid rl_vi_subst (binding func for `s' and `S') in terms of
+ rl_vi_change_to: `S' == `cc' and `s' == `c '. This makes undo
+ work right
+
+ 3/18
+ ----
+hashlib.c
+ - fixed hash_walk to return if the item function returns < 0, instead
+ of breaking out of the current hash chain
+
+array.c
+ - fixed array_walk to return if the item function returns < 0, like
+ hash_walk
+
+lib/sh/stringlist.c, externs.h
+ - new function: strlist_walk, takes a stringlist and a pointer to an
+ item func. Like other _walk funcs, if item func returns < 0 the
+ walk is cancelled
+ - new function: strlist_flush, frees items in the contained list
+ with strvec_flush
+ - renamed functions to have a strlist_ prefix and be more systematic
+
+pcomplib.c,pcomplete.h
+ - removed redundant `progcomp_initialized' variable
+ - renamed functions to have `progcomp_' or `compspec_' prefixes
+ like the hash library
+
+{bashline,pcomplete}.c,builtins/complete.def
+ - fixed calls to stringlist functions to use new names
+ - fixed calls to functions in pcomplib.c to use new names
+
+pcomplete.c
+ - made the debugging code #ifdef DEBUG -- it should be mature enough
+
+builtins/hash.def,parse.y
+ - use REVERSE_LIST(x, t) instead of (t)reverse_list(x)
+
+list.c,{externs,general}.h
+ - renamed the list functions to have a list_ prefix, changed callers
+
+externs.h,{execute_cmd,stringlib,subst}.c,builtins/common.c,lib/sh/stringvec.c
+ - word_list_to_argv -> strvec_from_word_list
+ - argv_to_word_list -> strvec_to_word_list
+ - moved functions to lib/sh/stringvec.c
+
+lib/sh/stringvec.c
+ - changed name of second argument to strvec_from_word_list from `copy'
+ to `alloc' so the use of `copy' between strvec_from_word_list and
+ strvec_to_word_list isn't as confusing
+ - changed name and sense of second argument to
+ strvec_to_word_list from `copy' to `alloc' for the same reason --
+ now both functions agree on semantics of second argument
+
+lib/sh/stringlist.c
+ - ditto for strlist_from_word_list and strlist_to_word_list
+
+subst.c
+ - changed callers of strvec_to_word_list
+
+ 3/19
+ ----
+builtins/hash.def
+ - added `-l' option to list table or individual targets in reusable
+ format
+ - added `-d' option to remove one or more names from the table of
+ hashed commands (provides `unhash' or `unalias -t' functionality)
+
+doc/{bash.1,bashref.texi}
+ - documented new `-l' and `-d' options to `hash'
+
+hashcmd.[ch]
+ - renamed functions to have a `phash_' prefix and follow new naming
+ convention
+ - phash_remove now returns an int: 1 if command not in hash table,
+ 0 if filename removed OK
+
+{findcmd,variables}.c, builtins/{hash,type}.def
+ - changed callers to use new names from hashcmd.c
+
+builtins/common.[ch]
+ - new function, sh_notfound(s), prints standard `not found' message
+ - new function, sh_invalidid(s), prints standard `invalid identifier'
+ message
+ - new function, sh_restricted(s), prints standard `restricted' message
+ for restricted shells
+ - new function, sh_invalidnum(s), prints standard `invalid number'
+ message
+ - renamed bad_option to sh_invalidopt, changed to print
+ `invalid option' instead of `unknown option'
+ - new function, sh_invalidoptname, prints standard `invalid option
+ name' for long options
+ - new function, sh_badjob (s), prints standard `no such job' message
+ - new function, sh_invalidsig (s), prints standard `invalid signal
+ specification' message
+ - new function, sh_nojobs (s), prints standard `no job control' message
+ - new function, sh_needarg (s), prints standard `option requires an
+ argument' message
+ - new function, sh_neednumarg (s), prints standard `numeric
+ argument required' message
+ - new function, sh_badpid(s), prints standard `not a pid...' message
+ - new function, sh_erange (s, desc) prints standard `out of range'
+ message, optionally using `desc' to say what the argument is
+
+builtins/{alias,command,declare,exec,hash,type}.def
+ - call sh_notfound() instead of calling builtin_error directly
+
+builtins/{declare,getopts,read,set,setattr}.def
+ - call sh_invalidid() instead of calling builtin_error directly
+
+builtins/{cd,command,enable,exec,hash,source}.def
+ - call sh_restricted() instead of calling builtin_error directly
+
+builtins/{printf,read,ulimit}.def, builtins/common.c
+ - call sh_invalidnum instead of calling builtin_error directly
+
+builtins/{complete,declare,pushd,set}.def, builtins/bashgetopt.c
+ - call sh_invalidopt instead of bad_option or builtin_error directly
+
+builtins/{complete,set,shopt}.def
+ - call sh_invalidoptname instead of builtin_error directly
+
+builtins/{fg_bg,jobs,kill,wait}.def
+ - call sh_badjob instead of calling builtin_error directly
+
+builtins/common.c, builtins/{kill,signal}.def
+ - call sh_invalidsig instead of calling builtin_error directly
+
+builtins/{fg_bg,suspend,wait}.def
+ - call sh_nojobs instead of calling builtin_error directly
+
+builtins/{common,bashgetopt}.c, builtins/{hash,kill}.def
+ - call sh_neednumarg and sh_needarg where required
+
+builtins/{kill,wait}.def
+ - call sh_badpid where required
+
+builtins/{break,fc,history,pushd,shift,ulimit,umask}.def
+ - call sh_erange where appropriate
+
+builtins/printf.def
+ - new static function, printf_erange, prints standard out-of-range
+ warning message
+
+builtins/set.def
+ - changed so that calls to sh_invalidopt always include the leading
+ `+' or `-'
+
+builtins/shopt.def
+ - changed SHOPT_ERROR macro to shopt_error function
+
+builtins/bind.def
+ - regularized error messages to `bind: object: error string' like
+ other error messages
+
+builtins.h
+ - the `short_doc' member of a `struct builtin' is now of type
+ `const char *'
+ - the strings in `long_doc' array of a struct builtin are now const
+
+builtins/mkbuiltins.c
+ - changes for new `const' members of struct builtin
+
+ 3/20
+ ----
+lib/readline/histfile.c
+ - use pointers instead of indexing into buffer when reading the
+ contents of the history file in read_history_range and
+ history_truncate_file
+
+ 3/21
+ ----
+lib/readline/histfile.c
+ - new file, with code to mmap the history file for reading and
+ writing (depends on HAVE_MMAP, currently nothing checks for that)
+
+ 3/25
+ ----
+error.[ch]
+ - new function, err_badarraysub(s), calls report_error with standard
+ `bad array subscript' message
+ - new function, err_unboundvar(s), calls report_error with standard
+ `unbound variable' message
+ - new function, err_readonly(s), calls report_error with standard
+ `readonly variable' message
+
+{arrayfunc,subst}.c
+ - call err_badarraysub where appropriate
+
+{expr,subst}.c
+ - call err_unboundvar where appropriate
+
+{arrayfunc,variables}.c
+ - call err_readonly where appropriate
+
+shell.c
+ - changed text of bad option error messages to be the same as that
+ printed for builtin errors
+
+builtins/common.c
+ - changed sh_invalidopt to print the invalid option before the rest
+ of the error message (required some tests to be modified)
+ - new function, sh_readonly, calls builtin_error with standard
+ `readonly variable' message
+
+variables.c,builtins/declare.def
+ - call sh_readonly where appropriate
+
+lib/sh/stringvec.c
+ - added strvec_remove (sv, s), removes S from SV and shuffles rest of
+ elements down 1
+
+lib/sh/stringlist.c
+ - added strlist_remove(sl, s), just calls strvec_remove on the
+ component list
+
+externs.h
+ - new extern declarations for strvec_remove and strlist_remove
+ - fixed extern declaration for strvec_search; the arguments were
+ reversed (unimportant, it's not compiled into the shell)
+
+subst.c
+ - change param_expand to call quote_escapes on values retrieved when
+ expanding the positional parameters
+ - change parameter_brace_expand_word to quote escapes on values
+ retrieved when expanding the positional parameters
+ - fix parameter_brace_substring to quote escape characters on unquoted
+ substrings extracted from variable values (needed to separate case
+ VT_VARIABLE from VT_ARRAYMEMBER for this, since, because
+ get_var_and_type calls array_value for VT_ARRAYMEMBER, we need to
+ skip over quoted characters in an already-appropriately-quoted
+ string to find the substring we want)
+ - fix parameter_brace_substring to quote escape characters in the
+ value returned by pos_params when expanding subsets of the
+ positional parameters and not within double quotes (in which case
+ pos_params() quotes the string for us)
+ - fix parameter_brace_substring to quote escape characters in the
+ value returned by array_subrange when expanding subsets of an
+ array and not within double quotes (in which case
+ array_subrange() quotes the string for us)
+ - new function, quoted_strlen(s), does strlen(s) while skipping over
+ characters quoted with CTLESC (#ifdef INCLUDE_UNUSED, since it's
+ not used yet)
+ - changed pos_params() so it always returns a list whose members are
+ quoted strings if (quoted&(Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) != 0
+
+arrayfunc.c
+ - fix array_value to consistently call quote_escapes, even when a
+ non-array variable is being subscripted with element 0, in which
+ case we return the variable value
+
+lib/sh/strtrans.c
+ - make the for_echo parameter to ansicstr a `flags' parameter that
+ has its old `for echo' meaning if flags&1 is non-zero (which is
+ consistent with the old code)
+ - Added code to the `flags' parameter to ansicstr so that if flags&2
+ is non-zero, CTLESC and CTLNUL are escaped with CTLESC in the
+ expanded string
+ - change ansiexpand() to call ansicstr with a `flags' parameter of 2
+
+ 3/26
+ ----
+lib/readline/histfile.c
+ - when reading and writing the history file, use malloc instead of
+ xmalloc and handle failures gracefully, so the application doesn't
+ abort if the history file or history list is too big
+
+ 3/27
+ ----
+arrayfunc.c
+ - changed array_value_internal to take an additional `int *'
+ parameter, in which is returned the type of array indexing
+ performed (array[@] vs. array or array[index])
+ - changed array_value and get_array_value to take a corresponding
+ extra parameter and pass it to array_value_internal
+ - changed array_value_internal to no longer return newly-allocated
+ memory or quote CTLESC and CTLNUL in the returned string if
+ `simple' array indexing (subscript not `@' or `*') is being
+ performed. This makes it more like a variable lookup
+
+arrayfunc.h
+ - changed prototypes for array_value and get_array_value
+
+expr.c
+ - added new parameter to call to get_array_value in expr_streval
+ - don't need to free memory returned by get_array_value any more
+
+subst.c
+ - quote_escapes now works with multibyte characters
+ - dequote_string now works with multibyte characters
+ - dequote_escapes is now needed, so it's compiled in, and it
+ now works with multibyte characters
+ - remove_quoted_escapes now just calls dequote_escapes and copies the
+ result over the argument string
+ - remove_quoted_nulls now returns its char * argument, parallels
+ remove_quoted_escapes
+ - parameter_brace_expand_word now passes the new argument to
+ array_value and quotes CTLESC and CTLNUL in the result if it's a
+ `simple' array expansion by calling quote_escapes
+ - get_var_and_type now returns VT_ARRAYMEMBER for references like
+ ${array} where `array' is an array variable (just like ${array[0]}).
+ Documented (in comment) that a VT_VARIABLE return value means that
+ quote_escapes has been called at some point
+ - changed callers of get_var_and_type to no longer free value if
+ VT_ARRAYMEMBER is returned as type
+ - changed parameter_brace_substring and parameter_brace_patsub to
+ call dequote_escapes on the value from get_var_and_type if the
+ type is VT_VARIABLE, since the substring and pattern substitution
+ code doesn't understand CTLESC quoting
+ - parameter_brace_substring no longer needs to call quoted_substring
+ for the VT_ARRAYMEMBER case
+ - changed parameter_brace_patsub to call quote_escapes on the result
+ of pat_subst for the VT_VARIABLE and VT_ARRAYMEMBER cases, and to
+ quote the returned string in the VT_ARRAYVAR and VT_POSPARAMS cases
+ if the `MATCH_QUOTED' flag isn't set (if it is, the pattern
+ substitution functions perform any necessary quoting)
+ - quoted_substring is no longer used; it's now #ifdef INCLUDE_UNUSED
+
+lib/malloc/mstats.h
+ - new member in _malstats: u_bits32_t bytesreq, the total number of
+ bytes requested by the caller via calls to malloc() and realloc()
+
+lib/malloc/stats.c
+ - print bytesreq member in _print_malloc_stats
+ - don't print statistics for buckets for which nmal == 0 (no mallocs)
+
+lib/malloc/malloc.c
+ - modified internal_malloc, internal_realloc to keep running total of
+ number of bytes requested by calling application
+
+shell.c
+ - sh_exit is now compiled in; exit_shell calls sh_exit
+
+error.c
+ - changed fatal_error, report_error, parser_error to call sh_exit
+
+ 3/28
+ ----
+subst.[ch]
+ - changed Q_NOQUOTE to Q_PATQUOTE; it makes the intent more clear
+
+subst.c
+ - moved code from parameter_brace_expand into a new function that
+ dispatches for pattern substitution: parameter_brace_remove_pattern
+ - changed structure of parameter_brace_remove_pattern to be like
+ parameter_brace_patsub and its ilk: call get_var_and_type to
+ isolate the variable name, move the pattern isolation code out of
+ the various *_remove_pattern functions into
+ parameter_brace_remove_pattern and pass the results to the various
+ functions, use a switch on the return value from get_var_and_type
+ to decide which function to call, regularized the arguments to the
+ separate pattern removal functions
+ - parameter_brace_remove_pattern now properly quotes escape chars in
+ the returned value
+ - changed get_var_and_type to call dequote_escapes on the `value'
+ parameter for case VT_VARIABLE and return the result in *valp,
+ so the calling functions don't have to do it themselves; changed
+ callers appropriately
+ - fixed getpattern() where it broke posix compliance: if you enclose
+ a pattern removal spec in double quotes, the outer double quotes
+ have no effect on the pattern (POSIX.1-200x 2.6.2). This uncovered
+ a bug in the test suite (!)
+
+pathexp.c
+ - fixed a problem with quote_string_for_globbing where it would change
+ consecutive CTLESC chars all to \ instead of changing every other
+ quoted char
+
+ 3/31
+ ----
+lib/malloc/{malloc,stats}.c
+ - moved declaration of _mstats to malloc.c so stats.o doesn't get
+ linked into the shell if the stats functions aren't called
+
+ 4/2
+ ---
+lib/glob/smatch.c
+ - introduce `XCHAR' define, which is the type of arguments passed to
+ strcoll/strcmp/strlen and their wide-character equivalents, added
+ appropriate casts
+ - static arrays in single-byte version of rangecmp() are `char', not
+ `unsigned char', so compilers don't complain about calls to strcoll
+
+lib/glob/sm_loop.c
+ - casts for `XCHAR' and `XCHAR *' arguments to libc functions
+ - use prototype declaration for BRACKMATCH if `PROTOTYPES' is defined
+ to avoid problems with type promotion (unsigned char -> int)
+
+lib/glob/collsyms.h
+ - `name' member of struct _COLLSYM is now of type `XCHAR *', since
+ some compilers don't like `unsigned char *' initializers from
+ constant strings
+
+[bash-2.05b-alpha1 released]
+
+ 4/3
+ ---
+builtins/{evalstring.c,common.h}
+ - new flag for parse_and_execute, SEVAL_NOFREE, means to not free
+ the argument string when finished
+
+lib/readline/text.c
+ - fixed a trivial typo in _rl_insert_char when reading multibyte
+ char sequences
+ - replace calls to ding() with rl_ding()
+
+include/chartypes.h
+ - remove SIGN_EXTEND_CHAR and TOASCII macros; they're unused
+
+make_cmd.c
+ - include dispose_cmd.h for extern function declarations
+
+lib/glob/glob.c
+ - include `shmbutil.h' and `xmalloc.h' for extern function declarations
+
+lib/glob/smatch.c
+ - include `xmalloc.h' for extern function declarations
+
+shell.c
+ - fix maybe_make_restricted to use its argument instead of global
+ `shell_name'
+
+version.c
+ - update copyright message to include this year
+
+lib/readline/display.c
+ - fixes from Jiro SEKIBA <jir@yamato.ibm.com> to fix autowrapping
+ when using multibyte characters
+
+lib/glob/sm_loop.c
+ - fixed a problem in BRACKMATCH where not enough memory was allocated
+ to hold a multibyte character when parsing POSIX.2 char class names
+
+support/config.{guess,sub}
+ - updated via patch from Paul Eggert with latest GNU additions
+
+variables.c
+ - var_lookup should use its `vcontext' argument instead of
+ unconditionally using `shell_variables'
+
+ 4/4
+ ---
+builtins/bind.def,doc/{bash.1,bashref.texi}
+ - changed the usage summary and help text to make it clear that any
+ readline command that may appear in ~/.inputrc may be supplied as
+ one of the non-option arguments to `bind'
+
+builtins/mkbuiltins.c
+ - added support for `-H' option, which means to write long documentation
+ for each builtin to a separate file in the `helpfiles' directory
+
+builtins/Makefile.in
+ - new target `helpdoc', just creates long doc files in helpfiles
+ directory
+
+lib/sh/zcatfd.c
+ - new file, with zcatfd(int fd, int ofd, char *fn); dumps data from
+ FD to OFD
+
+Makefile.in,lib/sh/Makefile.in
+ - added zcatfd.c, zcatfd.o member of libsh.a
+
+builtins/evalstring.c
+ - changed cat_file to call zcatfd(fd, 1, fn)
+
+builtins/{shopt,colon}.def
+ - removed the $DOCNAME directive for `shopt', `true', and `false';
+ just use the names
+ - changed $DOCNAME for `:' to just be `colon' instead of
+ `colon_builtin'
+
+builtins/reserved.def
+ - added help entries for ((, [[, `for (('
+
+builtins/let.def
+ - add id++, id--, ++id, --id, ** to help text
+
+ 4/8
+ ---
+builtins/bashgetopt.[ch]
+ - changed to allow options beginning with `+', enabled by a leading
+ `+' in the option string
+ - new variable, list_opttype, set to `-' or `+'
+
+builtins/{common.c,{builtin,eval,exit,fg_bg,let,printf,pushd,return,source,wait}.def
+ - changes to allow a `--' option for every builtin that accepts
+ operands but not options, as per posix.1-2001
+
+builtins/{declare,setattr}.def
+ - use internal_getopt for parsing options, now that it supports `+'
+
+builtins/set.def
+ - use internal_getopt for initial option parse, now that it supports
+ a leading `+'
+
+
+{configure,Makefile}.in, builtins/{Makefile.in,help.def,mkbuiltins.c}
+ - support for a new configure option, ``--enable-separate-helpfiles'',
+ moves the `long' help text to separate help files, installed by
+ default into ${datadir}/bash, one file per builtin. Off by
+ default -- it saves 47K, but it's only 47K, and it's in the text
+ segment
+
+flags.c
+ - build internal_getopt() option string argument from flags array at
+ runtime in shell.c
+
+shell.c
+ - new variable to control writing malloc stats at exit:
+ malloc_trace_at_exit, 0 by default
+
+lib/malloc/malloc.c
+ - heavily updated:
+ o partial page allocated on first call to malloc to make
+ subsequent sbrks page-aligned no longer wasted
+ o begin and end range guards are now the same value: the chunk
+ requested
+ o coalescing code was changed to attempt to coalesce first two
+ adjacent blocks on the free list; enabled by default
+ o blocks of size 32 are now candidates for larger block
+ splitting, since 32 is the most popular size
+ o blocks of size 32 are now candidates for smaller block
+ coalescing
+ o the IN_BUCKET check was changed to just make sure that the
+ size isn't too big for the bucket, since the `busy block'
+ checking code may increase the bucket by one or more,
+ meaning that the old check would fail and cause a panic when
+ a chunk allocated in such a way was freed
+ o bin sizes are now precomputed and looked up in an array
+ rather than being computed at runtime
+ o moved the _mstats declaration here to avoid the stats code
+ being linked in even when no stats functions were called
+ (only matters if MALLOC_DEBUG is defined)
+ o malloc now keeps track of the address of the top of the heap
+ and will return large chunks to the system with calls to
+ sbrk with a negative argument when freeing the top chunk.
+ Two thresholds: LESSCORE_FRC means to unconditionally return
+ memory to the system; LESSCORE_MIN means to return memory if
+ there's at least one block already on the free list
+
+lib/malloc/mstats.h
+ - stats struct now keeps track of number of block coalesces by bin,
+ and the number of times memory was returned to the system by bin
+
+lib/malloc/stats.c
+ - trace_malloc_stats now takes a second argument: the name of the file
+ to write to. The first `%p' in the template file name is replaced
+ by the pid
+
+ 4/9
+ ---
+lib/malloc/imalloc.h
+ - added some macros derived from dlmalloc and glibc malloc to inline
+ memcpy and memset if the requested size is <= 32 bytes
+
+lib/malloc/malloc.c
+ - use MALLOC_MEMSET instead of memset in internal_{malloc,free}
+
+include/ocache.h
+ - use OC_MEMSET (variant of MALLOC_MEMSET) in ocache_free
+
+configure.in, config.h.in
+ - check for getservent(), define HAVE_GETSERVENT if found
+
+bashline.c
+ - punt immediately from bash_servicename_completion_function if
+ HAVE_GETSERVENT is not defined (cygwin seems to not define it)
+ - include "input.h" for extern save_token_state() and
+ restore_token_state() declarations
+ - change bash_execute_unix_command to call parse_and_execute with
+ SEVAL_NOHIST flag so the command doesn't get saved on the history
+ list
+ - change bash_execute_unix_command to save and restore the current
+ command line count and the token state (last_read_token, etc.).
+ Everything else is saved by either parse_and_execute directly or
+ the call it makes to push_stream(). The shell_input_line stuff
+ doesn't need to be saved and restored; it's not computed until
+ readline() returns
+
+ 4/10
+ ----
+lib/glob/glob.[ch]
+ - glob_filename and glob_vector now take an additional `flags' arg
+ - define GX_MARKDIRS as possible flag value for glob_filename and
+ glob_vector
+
+lib/sh/snprintf.c
+ - fixed some bugs with handling of `g' and `G' formats
+ - make sure numtoa returns the fractional part correctly when passed 0
+ - implemented thousands grouping for `'' flag character
+
+lib/sh/rename.c
+ - a few changes to make it more bulletproof
+
+ 4/11
+ ----
+lib/glob/glob.c
+ - added the couple of dozen lines of code to glob_dir_to_array to
+ finish implementing GX_MARKDIRS
+
+builtins/set.def
+ - changed unset builtin so that it no longer considers unsetting an
+ unset variable or function to be an error
+
+lib/readline/display.c
+ - fix to rl_redisplay for a problem which caused display to be messed
+ up when the last line of a multi-line prompt (possibly containing
+ invisible characters) was longer than the screen width
+
+ 4/15
+ ----
+aclocal.m4
+ - use AC_DEFINE_UNQUOTED in BASH_SYS_DEFAULT_MAIL_DIR instead of
+ enumerating all of the possible values and using AC_DEFINE
+
+ 4/16
+ ----
+Makefile.in, {builtins,support}/Makefile.in
+ - new variables, CFLAGS_FOR_BUILD and CPPFLAGS_FOR_BUILD, substituted
+ by `configure'
+ - changed CCFLAGS_FOR_BUILD to BASE_CCFLAGS, removing $(CPPFLAGS);
+ CCFLAGS and CCFLAGS_FOR_BUILD now include $(BASE_CCFLAGS) with
+ (possibly) different values for CPPFLAGS and CFLAGS
+ - GCC_LINT_CFLAGS now includes $(BASE_CCFLAGS) and $(CPPFLAGS)
+ instead of CCFLAGS_FOR_BUILD
+ - new variable, LDFLAGS_FOR_BUILD, right now equivalent to LDFLAGS
+ - remove $(CPPFLAGS) from recipes for buildversion, mksignames, and
+ mksyntax
+
+configure.in
+ - compute and substitute CFLAGS_FOR_BUILD, CPPFLAGS_FOR_BUILD, and
+ LDFLAGS_FOR_BUILD
+ - changed qnx to use LOCAL_LDFLAGS and LOCAL_LIBS instead of putting
+ everything in LOCAL_LDFLAGS
+
+builtins/Makefile.in
+ - remove $(PROFILE_FLAGS) from recipe for building `mkbuiltins'
+ - use LDFLAGS_FOR_BUILD instead of LDFLAGS in recipe for building
+ `mkbuiltins'
+
+Makefile.in
+ - use $(CC_FOR_BUILD) and $(CCFLAGS_FOR_BUILD) to build auxiliary
+ test programs (printenv, recho, zecho)
+
+support/Makefile.in
+ - use CC_FOR_BUILD and CCFLAGS_FOR_BUILD in recipe for building
+ `man2html'
+
+lib/tilde/Makefile.in
+ - substitute PROFILE_FLAGS, use PROFILE_FLAGS in $(CCFLAGS)
+
+ 4/25
+ ----
+Makefile.in, configure.in
+ - moved RELSTATUS to configure.in; configure substitutes it into
+ the generated Makefile
+
+lib/sh/snprintf.c
+ - fix wchars() to deal with systems where MB_CUR_MAX is not a
+ constant expression
+
+ 5/2
+ ---
+lib/sh/shquote.c
+ - add `,' to list of chars that are backslash-quoted. It doesn't
+ hurt normal usage and prevents filenames with commas from being
+ inappropriately split by brace expansion after using
+ complete-into-braces
+
+ 5/6
+ ---
+lib/sh/xstrchr.c
+ - we only need the check of MB_CUR_MAX and the slow code for a
+ few encodings, and even then only for a subset of the charset
+
+arrayfunc.c
+ - some speedups for skipsubscript and multibyte chars from Bruno Haible
+
+locale.c
+ - changed set_lang to call setlocale(LC_ALL, ...) if LC_ALL doesn't
+ already have a value, but doesn't change any shell variables
+
+include/shmbutil.h
+ - major speedups from Bruno Haible, mostly concerned with reducing
+ the number of strlen(3) calls
+
+subst.c
+ - change callers of macros in shmbutil.h to add extra argument as
+ necessary
+ - skip_single_quoted and skip_double_quoted take another argument:
+ the length of the string; mostly useful when using multibyte chars
+ - many speedups from precomputing string lengths at function start
+ - fixed a small bug in de_backslash in the midst of rewriting for
+ better efficiency
+
+{braces,make_cmd,pathexp}.c
+ - change callers of macros in shmbutil.h to add extra argument as
+ necessary
+
+pathexp.c
+ - fix a one-too-far problem with multibyte chars in
+ unquoted_glob_pattern_p
+
+braces.c
+ - brace_gobbler takes a new argument, the length of the passed string
+ - expand_amble takes a new argument, the length of the passed string
+
+ 5/7
+ ---
+subst.c
+ - modified remove_quoted_nulls to eliminate the memory allocation and
+ do the copy in place using the same strategy as de_backslash
+
+lib/readline/{rldefs.h,complete.c}
+ - new define RL_QF_OTHER_QUOTE, so _rl_find_completion_word can note
+ that it found a quoting character other than \'" that appears in
+ rl_completer_quote_characters
+
+ 5/9
+ ---
+jobs.c
+ - save and restore old value of jobs_list_frozen when calling trap
+ handlers from set_job_status_and_cleanup to avoid seg faults when
+ running recursive trap handlers
+
+ 5/10
+ ----
+builtins/common.h
+ - new #defines to use for value of changed_dollar_vars (provides
+ information about the caller who wants to blow away the old dollar
+ variables)
+
+builtins/common.c
+ - changed set_dollar_vars_changed to set changed_dollar_vars to one
+ of the ARGS_* values depending on the caller and environment
+
+builtins/source.def
+ - source restores the positional parameters unless the `set' builtin
+ was called to specify a new set while not executing a shell function
+
+ 5/13
+ ----
+POSIX
+ - new file, was in CWRU/POSIX.NOTES
+
+doc/{Makefile.in,Makefile}
+ - changed `posix' rule to modify ../POSIX
+
+doc/mkposix
+ - write to `POSIX' by default
+
+lib/sh/strtrans.c
+ - when ansicstr is parsing a format string for `echo -e' (or the
+ equivalent xpg_echo option is enabled), obey the POSIX-2001/SUSv3
+ standard and accept 0-3 octal digits after a leading `0'
+
+doc/{bash.1,bashref.texi}
+ - updated `echo' description to note that up to three octal digits
+ are now accepted following `\0'
+
+ 5/16
+ ----
+doc/Makefile.in
+ - remove the generated documentation on `make distclean' if the
+ build directory and source directory are not the same
+
+Makefile.in
+ - descend into `support' subdirectory on a `make clean' and
+ `make distclean'
+ - remove parser-built, y.tab[ch] on a `make distclean' if the build
+ directory and source directory are not the same
+
+support/Makefile.in
+ - support various `clean' targets and remove man2html.o and man2html
+
+{configure,Makefile}.in
+ - move values for DEBUG and MALLOC_DEBUG into configure.in; on by
+ default for development versions; off by default for releases
+ (off for profiling, too)
+
+ 5/21
+ ----
+parse.y
+ - modified the grammar to allow a simple_list followed by yacc_EOF
+ to terminate a command. This fixes problems with things like
+ a backslash-newline at the end of an `eval'd string
+ - change handle_eof_input_unit() to reset the token state before
+ calling prompt_again(), in case the prompt to be evaluated contains
+ a command substitution
+
+ 5/23
+ ----
+lib/readline/vi_mode.c
+ - fix `r' command (rl_vi_change_char) when HANDLE_MULTIBYTE is defined
+ but MB_CUR_MAX == 1
+
+ 5/24
+ ----
+lib/malloc/watch.c
+ - don't try to print `file' argument to _watch_warn if it's null
+
+lib/malloc/malloc.c
+ - changed guard checking code in internal_{malloc,free,realloc} to
+ access memory as (char *) and copy into a union instead of
+ casting and dereferencing a pointer to u_bits32_t, since that
+ results in unaligned accesses which will cause Sparcs to upchuck
+
+ 5/30
+ ----
+[bash-2.05b-beta1 released]
+
+lib/readline/text.c
+ - fixed a problem with rl_transpose_chars on systems supporting
+ multibyte characters with a locale that doesn't have any multibyte
+ chars
+
+ 6/4
+ ---
+expr.c
+ - fix a/=0 and a%=0 to throw evaluation errors rather than core dumps
+
+lib/readline/display.c
+ - fix core dump when line wrapping a multibyte character (line
+ accidentally dropped from the original patch)
+
+lib/readline/mbutil.c
+ - fix reversed return value from _rl_is_mbchar_matched; fixes problem
+ with backward-char-search
+
+ 6/10
+ ----
+lib/sh/getenv.c
+ - fix getenv to not free value returned by find_tempenv_variable
+ - add setenv, putenv, unsetenv for completeness
+
+ 6/12
+ ----
+shell.c
+ - change init_noninteractive to init expand_aliases to the value of
+ posixly_correct
+ - don't initialize expand_aliases to posixly_correct anywhere else.
+ This allows the -O expand_aliases invocation option to work correctly
+
+general.c
+ - fix move_to_high_fd to not try the dup2 unless the fd loop results
+ in an fd > 3; just return the passed file descriptor otherwise
+ - use HIGH_FD_MAX, defined in general.h, instead of hard-coded 256
+ as highest file descriptor to try
+
+subst.c
+ - in process_substitute, call move_to_high_fd with `maxfd' parameter
+ of -1 instead of 64, so move_to_high_fd will use its maximum
+
+ 6/21
+ ----
+lib/malloc/malloc.c
+ - don't bother calling MALLOC_MEMSET if the requested size is 0
+
+builtins/setattr.def
+ - note in short doc that export and readonly can take assignment
+ statements as arguments
+
+error.c
+ - new function, error_prolog(), to capture common error message
+ prefix code (except for parser errors)
+
+ 6/25
+ ----
+aclocal.m4
+ - add tests for standard-conforming declarations for putenv and
+ unsetenv in system header files
+
+{configure,config.h}.in
+ - call BASH_FUNC_STD_PUTENV and BASH_FUNC_STD_UNSETENV, define
+ HAVE_STD_GETENV and HAVE_STD_UNSETENV, respectively, if they
+ succeed
+
+lib/sh/getenv.c
+ - change putenv and unsetenv to take differing prototypes in
+ stdlib.h into account
+
+ 6/27
+ ----
+[bash-2.05b-beta2 released]
+
+ 6/28
+ ----
+builtins/common.c
+ - fix get_job_spec so that %N works when N is the size of the jobs
+ list (%8 means job 8, but the 7th member of the jobs array, so
+ it's OK if N == job_slots because the function returns N-1)
+
+ 7/1
+ ---
+shell.c
+ - turn off line editing if $EMACS is set to `t'
+
+ 7/10
+ ----
+builtins/set.def
+ - remove mention of `-i' from long help doc, since it has no effect
+
+ 7/17
+ ----
+[bash-2.05b released]
+
+ 7/18
+ ----
+
+lib/malloc/malloc.c
+ - make sure that the `free_return' label has a non-empty statement
+ to branch to
+
+ 7/19
+ ----
+locale.c
+ - only call setlocale() from set_lang() if HAVE_SETLOCALE is defined;
+ otherwise just return 0
+
+lib/readline/mbutil.c
+ - only try to memset `ps' in _rl_get_char_len if it's non-NULL. Ditto
+ for _rl_adjust_point
+
+ 7/23
+ ----
+execute_cmd.c
+ - fix for executing_line_number() when compiling without conditional
+ commands, dparen arithmetic or the arithmetic for command
+
+
+ 7/24
+ ----
+support/Makefile.in
+ - fix maintainer-clean, distclean, mostlyclean targets
+
+builtins/common.c
+ - fix bug in sh_nojobs where it doesn't pass the right number of args
+ to builtin_error
+
+bashline.c
+ - when using command completion and trying to avoid appending a slash
+ if there's a directory with the same name in the current directory,
+ use absolute_pathname() instead of just checking whether the first
+ char of the match is a slash to catch things like ./ and ../
+
+examples/complete/bashcc-1.0.1.tar.gz
+ - a package of completions for Clear Case, from Richard S. Smith
+ (http://www.rssnet.org/bashcc.html)
+
+input.c
+ - fix check_bash_input to call sync_buffered_stream if the passed fd
+ is 0 and the shell is currently reading input from fd 0 -- all it
+ should cost is maybe an additional read system call, and it fixes
+ the bug where an input redirection to a builtin inside a script
+ which is being read from stdin causes the already-read-and-buffered
+ part of the script to be thrown away, e.g.:
+
+ bash < x1
+
+ where x1 is
+
+ hostname
+ read Input < t.in
+ echo $Input
+ echo xxx
+
+execute_cmd.c
+ - in initialize_subshell(), call unset_bash_input (0) to not mess with
+ fd 0 if that's where bash thinks it's reading input from. Fixes
+ bug reported by jg@cs.tu-berlin.de on 17 July 2002. Should be a way
+ to check whether or not the current fd 0 at the time of the call has
+ not been redirected, like in the bug report. Also might eventually
+ want to throw in a sync_buffered_stream if bash is reading input
+ from fd 0 in a non-interactive shell into a buffered stream, so the
+ stream is sync'd -- might be necessary for some uses
+
+ 7/25
+ ----
+lib/readline/signals.c
+ - make sure rl_catch_sigwinch is declared even if SIGWINCH is not
+ defined, so the readline state saving and restoring functions in
+ readline.c are always the same size even if SIGWINCH is not defined,
+ and undefined references don't occur when SIGWINCH is not defined
+
+ 7/30
+ ----
+bashline.c
+ - augment patch from 7/24 to not disable rl_filename_completion_desired
+ if the first char of the match is `~'
+
+lib/readline/bind.c
+ - when creating `shadow' keymaps `bound' to ANYOTHERKEY, don't bind
+ a key whose type is ISFUNC but whose function is the `fake'
+ rl_do_lowercase_version (fixes debian bash bug #154123)
+
+lib/readline/readline.c
+ - don't call _rl_vi_set_last from _rl_dispatch_subseq if
+ key == ANYOTHERKEY (when truncated to `sizeof(char)', it will be 0,
+ which strchr will find in `vi_textmod')
+
+ 7/31
+ ----
+lib/readline/input.c
+ - fix rl_gather_tyi to only slurp up one line of available input, even
+ if more than one line is available (fixes debian bash bug #144585)
+
+ 8/3
+ ---
+bashline.c
+ - better fix for command completion problem -- test for directory
+ explicitly with test_for_directory before turning off
+ rl_filename_completion_desired, since that's the case we're trying
+ to protect against
+
+ 8/5
+ ---
+include/shmbutil.h
+ - fix ADVANCE_CHAR macro to advance the string pointer if mbrlen
+ returns 0, indicating that the null wide character (wide string
+ terminator) was found (debian bash bug #155436)
+
+lib/readline/mbutil.c
+ - fix _rl_adjust_point to increment the string pointer if mbrlen
+ returns 0
+
+support/shobj-conf
+ - fix for the `-install_name' value in SHLIB_XLDFLAGS assignment for
+ Darwin from the fink folks
+
+ 8/6
+ ---
+builtins/exit.def
+ - broke code that runs ~/.bash_logout out into a separate function:
+ bash_logout()
+
+builtins/common.h
+ - extern declaration for bash_logout()
+
+eval.c
+ - call bash_logout() from alrm_catcher(), so timed-out login shells
+ run ~/.bash_logout before processing the exit trap
+
+lib/sh/strtrans.c
+ - implemented $'\x{hexdigits}' expansion from ksh93
+
+configure.in
+ - define RECYCLES_PIDS in LOCAL_CFLAGS for cygwin; don't bother to
+ link with -luser32
+
+examples/loadables/strftime.c
+ - new loadable builtin, interface to strftime(3)
+
+ 8/7
+ ---
+parse.y
+ - parse_arith_cmd now takes a second argument, a flag saying whether
+ or not to add double quotes to a parsed arithmetic command; changed
+ callers
+ - changed parse_dparen so it tells parse_arith_cmd to not add the
+ double quotes and therefore doesn't need to remove them
+ - change parse_dparen to add W_NOGLOB|W_NOSPLIT|W_QUOTED flags to word
+ created when parsing (( ... )) arithmetic command, since the double
+ quotes are no longer added
+
+make_cmd.c
+ - in make_arith_for_expr, set the flags on the created word to
+ W_NOGLOB|W_NOSPLIT|W_QUOTED
+
+execute_cmd.c
+ - change execute_arith_command to expand the expression with
+ expand_words_no_vars, like the arithmetic for command code does
+ - fix execute_arith_command to handle the case where the expanded
+ expression results in a NULL word without crashing
+
+tests/{arith-for,cprint}.tests
+ - change expected output to account for no longer adding quotes to
+ ((...)) commands
+
+ 8/8
+ ---
+print_cmd.c
+ - take out the space after printing the `((' and before printing the
+ `))' in print_arith_command, print_arith_for_command, and
+ xtrace_print_arith_cmd
+
+tests/{arith-for,cprint}.tests
+ - change expected output to account for no longer adding leading and
+ trailing spaces when printing ((...)) and arithmetic for commands
+
+ 8/17
+ ----
+subst.c
+ - fix issep() define to handle case where separators[0] == '\0', in
+ which case it always returns false
+
+lib/readline/histexpand.c
+ - fix off-by-one error in history_expand_internal when using the `g'
+ modifier that causes it to skip every other match when matching a
+ single character (reported by gjyun90@resl.auto.inha.ac.kr)
+
+doc/{bash.1,bashref.texi}
+ - make sure that the name=word form of argument to declare/typeset,
+ export, and readonly is documented in the description
+
+ 8/30
+ ----
+lib/readline/histexpand.c
+ - make history_expand_internal understand double quotes, because
+ single quotes are not special inside double quotes, according to
+ our shell-like quoting conventions. We don't want unmatched
+ single quotes inside double-quoted strings inhibiting history
+ expansion
+ - make `a' modifier equivalent to `g' modifier for compatibility with
+ the BSD csh
+ - add a `G' modifier that performs a given substitution once per word
+ (tokenized as the shell would do it) like the BSD csh `g' modifier
+
+ 8/31
+ ----
+braces.c
+ - when compiling for the shell, treat ${...} like \{...} instead of
+ trying to peek backward when we see a `{'. This makes it easier
+ to handle things like \${, which should be brace expanded because
+ the $ is quoted
+
+ 9/7
+ ---
+aclocal.m4
+ - redirect stdin from /dev/null in BASH_CHECK_DEV_FD before testing
+ the readability of /dev/fd/0, so we're dealing with a known quantity
+
+ 9/11
+ ----
+[prayers for the victims of 9/11/01]
+
+shell.c
+ - fix maybe_make_restricted to handle a restricted login shell with a
+ base pathname of `-rbash' and skip over any leading `-'
+
+ 9/13
+ ----
+builtins/evalstring.c
+ - in parse_and_execute, make sure we don't try to run unwind-protects
+ back to `pe_dispose' after a longjmp back to top_level if the
+ pe_dispose frame hasn't been initialized
+
+lib/readline/display.c
+ - fix problem with prompt overwriting previous output when the output
+ doesn't contain a newline in a multi-byte locale. This also should
+ fix the problem of bash slowing down drastically on long lines when
+ using a multi-byte locale, because it no longer tries to rewrite the
+ entire line each time. Patch from Jiro SEKIBA <jir@yamato.ibm.com>
+
+parse.y
+ - move the typedef for alias_t that is compiled in if ALIAS is not
+ defined up before the prototype for push_string, since that takes
+ an alias_t * parameter
+
+lib/readline/terminal.c
+ - bind the termcap description's left and right arrow keys to
+ rl_backward_char and rl_forward_char, respectively, instead of
+ rl_forward and rl_backward (which are just there for backwards
+ compatibility)
+
+aclocal.m4
+ - when testing readability of /dev/stdin, redirect stdin from /dev/null
+ to make sure it's a readable file
+
+ 9/17
+ ----
+config-bot.h
+ - don't test __STDC__ when deciding whether or not to use stdarg.h;
+ just use it if it's present
+
+tests/read2.sub
+ - redirect from /dev/tty when using `read -t'
+
+ 9/20
+ ----
+builtins/history.def
+ - when reading `new' entries from the history file with `history -n',
+ fix increment of history_lines_this_session by taking any change
+ in history_base into account
+
+lib/sh/pathphys.c
+ - changes to sh_physpath to deal with pathnames that end up being
+ longer than PATH_MAX without dumping core
+
+lib/readline/doc/{history.3,hsuser.texinfo},doc/ bash.1
+ - documented new `a' and `G' history modifiers
+
+ 9/25
+ ----
+lib/readline/misc.c
+ - when traversing the history list with arrow keys in vi insertion
+ mode, put the cursor at the end of the line (like in emacs mode)
+
+mksyntax.c
+ - don't try to use \a and \v unless __STDC__ is defined; use the
+ ascii integer equivalents otherwise
+ - include "config.h" in the generated syntax.c file for a possible
+ definition of `const'
+
+doc/{bash.1,bashref.texi}
+ - document the meaning of a null directory in $PATH
+
+ 9/26
+ ----
+parse.y
+ - fix set_line_mbstate to handle case where mbrlen() returns 0,
+ indicating the null wide character
+ - fix set_line_mbstate so we don't directly compare a char variable
+ to EOF, since char can (and is) unsigned on some machines
+
+bashline.c
+ - change bash_execute_unix_command to save a little bit more state:
+ last_shell_builtin, this_shell_builtin, last_command_exit_value
+
+ 9/27
+ ----
+execute_cmd.c
+ - tentative change to execute_simple_command to avoid freeing freed
+ memory in the case where bash forks early but still ends up calling
+ execute_disk_command, without passing newly-allocated memory to
+ make_child. This may fix the core dumps with the linux-from-scratch
+ folks
+
+ 9/28
+ ----
+Makefile.in,{builtins,lib/sh}/Makefile.in
+ - fix up dependencies, mostly on ${BUILD_DIR}/version.h, so that
+ parallel makes work with GNU and BSD makes
+
+shell.h
+ - new struct to save partial parsing state when doing things like
+ bash_execute_unix_command and other operations that execute
+ commands while a line is being entered and parsed
+
+parse.y
+ - new functions, save_parser_state() and restore_parser_state(), to
+ save and restore partial parsing state
+
+bashline.c
+ - change bash_execute_unix_command to call {save,restore}_parser_state
+
+builtins/jobs.def
+ - change execute_list_with_replacements to eliminate a run_unwind_frame
+ in favor of calling the cleanup explicitly and discarding the frame
+
+execute_cmd.c
+ - change execute_for_command to avoid a run_unwind_frame in the case
+ where the loop variable is readonly or otherwise not assignable
+ - change execute_select_command and execute_simple_command to use
+ discard_unwind_frame by running the cleanup code explicitly, instead
+ of using run_unwind_frame
+ - make sure execute_select_command decreases loop_level even on error
+
+ 9/30
+ ----
+doc/{bash.1,bashref.texi}
+ - fixed description of `unset' now that unsetting a previously-unset
+ variable is no longer an error
+
+ 10/3
+ ----
+{configure,config.h}.in
+ - augment check for strtold with additional check to detect the
+ horribly broken hp/ux 11.x implementation that returns `long_double';
+ defines STRTOLD_BROKEN if so
+
+builtins/printf.def
+ - define floatmax_t as `double' if STRTOLD_BROKEN is defined
+
+ 10/5
+ ----
+lib/readline/keymaps.c
+ - don't automatically bind uppercase keys to rl_do_lowercase_version
+ in rl_make_bare_keymap
+
+lib/readline/readline.c
+ - explicitly check for ANYOTHERKEY binding to rl_do_lowercase_version
+ and dispatch to lowercase of key when a prefix is not matched
+
+ 10/12
+ -----
+bashline.c
+ - set COMP_WORDBREAKS in enable_hostname_completion to the value
+ of rl_completer_word_break_characters
+
+variables.c
+ - new special variable COMP_WORDBREAKS, controls the value of
+ rl_completer_word_break_characters
+
+variables.h
+ - new extern declaration for sv_comp_wordbreaks()
+
+subst.c
+ - change split_at_delims to behave more like shell word splitting if
+ the passed value for the delimiters is NULL, indicating that the
+ function is to use $IFS to split
+
+{execute_cmd,jobs,test,findcmd,input,make_cmd,redir,shell}.c
+builtins/mkbuiltins.c,builtins/{fc,history,source,umask}.def
+lib/sh/netconn.c
+lib/termcap/termcap.c
+lib/readline/histfile.c
+ - make sure all inclusions of <sys/file.h> are protected by
+ HAVE_SYS_FILE_H
+
+bashline.c
+ - don't turn off rl_filename_completion_desired in
+ attempt_shell_completion if the partial pathname contains a slash.
+ This still doesn't solve the problem of partial pathname completion
+ starting with a directory in the current directory without a
+ leading `./'. There's no way to tell the difference between that
+ and a file found in $PATH (which may contain `.') at the point that
+ attempt_shell_completion acts
+
+ 10/18
+ -----
+locale.c
+ - don't set lc_all to the default locale when LC_ALL is being unset
+ - new function, reset_locale_vars(), called to recompute the correct
+ locale variable values when LC_ALL is unset
+ - changed set_lang to not set LC_ALL, which it never should have been
+ doing in the first place, and to maintain a local variable `lang'
+ corresponding to $LANG
+ - change get_locale_var to use the precedence posix.2 specifies:
+ LC_ALL overrides individual variables; LANG, if set, is the default
+ - change set_locale_var to call get_locale_var to get the appropriate
+ value for the variable being set or unset
+ - call get_locale_var instead of using passed value in set_locale_var
+ to get the defaulting and precedence right
+
+lib/readline/nls.c
+ - new function, _rl_get_locale_var(), which does the same thing as
+ locale.c:get_locale_var(), with the right precedence and defaulting,
+ using sh_get_env_value to get the right bash variable values
+ - if HAVE_SETLOCALE is defined, _rl_init_eightbit first calls
+ _rl_get_locale_var to get the right value for LC_CTYPE, and uses
+ that in the call to setlocale. If _rl_get_locale_var returns NULL,
+ call setlocale() to get the current international environment, and,
+ finally, if that returns null, call setlocale with a second argument
+ of "" to force the implementation's `native' environment
+
+pcomplete.c
+ - change gen_wordlist_completions to dequote the text before comparing
+ it against the expanded word list
+ - changed gen_matches_from_itemlist to do the same thing
+
+bashline.c
+ - new global function, bash_dequote_word, calls bash_dequote_filename
+ on the text passed. Used by the programmable completion code
+
+lib/readline/histfile.c
+ - make sure that whenever read_history_range returns a non-zero value
+ that it sets errno to some useful value
+
+ 10/19
+ -----
+variables.c
+ - COMP_WORDBREAKS is now a dynamic variable, mirroring value of
+ rl_completer_word_break_characters. Makes sure that the variable
+ always points to dynamic memory if it's not null or the readline
+ default
+
+bashline.c
+ - change enable_hostname_completion to manage a dynamic value of
+ rl_completer_word_break_characters, since assignments to
+ COMP_WORDBREAKS can change its value unpredictably
+
+lib/readline/{complete.c,readline.h}
+ - rl_completer_word_break_characters no longer has `const' attribute
+
+bashline.c
+ - clean up necessary places due to rl_completer_word_break_characters
+ no longer being `const'
+
+doc/{bash.1,bashref.texi}
+ - document new COMP_WORDBREAKS variable
+
+ 10/21
+ -----
+print_cmd.c
+ - fix indirection_level_string to handle the case where the decoded
+ $PS4 is null without seg faulting
+
+ 10/22
+ -----
+builtins/shift.def
+ - make sure that there is actually an argument when reporting a shift
+ count that exceeds the number of positional paramters and
+ shift_verbose is enabled
+
+lib/readline/rltty.c
+ - change SET_SPECIAL to call a new function, set_special_char, since
+ it contains a block. It's called infrequently, so the performance
+ impact of making it a function should be negligible, and it helps
+ debugging
+
+ 10/29
+ -----
+bashline.c
+ - make sure the editor in VI_EDIT_COMMAND and EMACS_EDIT_COMMAND is
+ quoted; it might contain spaces (e.g., `emacs -nw')
+
+aclocal.m4
+ - cache ac_cv_rl_version in RL_LIB_READLINE_VERSION macro
+
+configure.in
+ - change logic that sets RL_INCLUDEDIR so that it doesn't try to set
+ a bogus include path if the argument to --with-installed-readline
+ is `yes' -- helps with cross-compiling
+
+lib/readline/histexpand.c
+ - fix history_tokenize_word so that it handles <( and >( better
+
+ 10/30
+ -----
+redir.c
+ - fix write_here_string so it handles the case where `herestr' expands
+ to NULL without seg faulting
+
+ 10/31
+ -----
+mailcheck.c
+ - reverse logic flip from bash-2.05 that handled systems that don't
+ change the atime when the mailbox is accessed; make sure the file
+ is bigger before we report new mail. This is the case in the vast
+ majority of cases. Reported by jim@jtan.com
+
+ 11/5
+ ----
+parse.y
+ - change action for `for x; { list; }' and corresponding `select'
+ production to use \"$@\" instead of just $@, as it is with all the
+ other actions
+
+ 11/9
+ ----
+parse.y
+ - new flag for parse_matched_pair: P_DQUOTE, indicating that the
+ pair of characters being matched is between double quotes
+ - parse_matched_pair now passes P_DQUOTE down to recursive calls:
+ if the open char to be matched is a `"' or the passed-in flags
+ include P_DQUOTE, set the local `rflags' variable to P_DQUOTE and
+ pass `rflags' down to recursive calls
+ - if `rflags' includes P_DQUOTE, don't try to ansiexpand $'...' or
+ locale expand $"..."; consistent with other quoting constructs
+
+ 11/11
+ -----
+doc/{bash.1,bashref.texi}
+ - explicitly note that variables referenced in arithmetic expressions
+ without using `$' evaluate to 0 if they are null or unset
+ - note that a null variable value evaluates to 0 when used in an
+ arithmetic context, like when a variable with the `-i' attribute is
+ assigned a null value
+ - document the ${!prefix@} expansion as equivalent to ${!prefix*}
+
+ 11/12
+ -----
+doc/{bash.1,bashref.texi}
+ - note that the value of an arithmetic expression is as in C
+ - change the wording to note that `arithmetic evaluation' (not
+ arithmetic expansion, which has a different meaning) is performed
+ on the value assigned to a variable whose integer attribute is set
+
+ 11/13
+ -----
+execute_cmd.c
+ - fix execute_disk_command so it calls exit() after printing the error
+ message in a restricted shell context if the shell has already forked
+ (nofork != 0 && there are no pipes)
+
+ 11/19
+ -----
+builtins/type.def
+ - don't report on aliases unless expand_aliases is set and the parser
+ is performing alias expansion; changed tests/type.tests and
+ tests/type.right accordingly
+
+ 11/25
+ -----
+general.c
+ - fix for full pathnames including drive letters on cygwin from
+ Corinna (convert to posix-style paths, which the rest of the
+ code handles much better)
+
+lib/readline/text.c
+ - fixes to overwrite mode from jimmy@is-vn.bg:
+ o in _rl_overwrite_char, do the overwrite mode self-insert
+ as one group, even when overwriting more than 1 char
+ o in _rl_overwrite_char, do the insert before the delete so
+ that an undo positions the cursor on the character restored,
+ not to the right of it
+ o in _rl_overwrite_rubout, don't do rl_insert_char(' ') unless
+ rl_point < rl_end. Since overwrite-mode self-insert acts as
+ in insert-mode when at eol, make rubout behave like
+ insert-mode rubout
+
+ 11/30
+ -----
+lib/readline/misc.c
+ - call rl_replace_line with `1' as second parameter if we're going to
+ immediately overwrite the undo list
+
+lib/readline/search.c
+ - in make_history_line_current, use _rl_replace_text to make the line
+ replacement an undoable operation. Affects all non-incremental
+ search functions.
+
+parse.y
+ - make behavior introduced on 11/9 dependent on extended_quote
+ variable, controllable by extquote shopt option. Default setting is
+ on for backwards compatibility
+
+builtins/shopt.def
+ - new `extquote' option to control extended_quote variable
+
+ 12/3
+ ----
+jobs.c
+ - change message printed when attempting to put a background job in
+ the background with `bg' to include the job id and make the
+ statement declarative
+
+ 12/10
+ -----
+bashhist.h
+ - define explicit flag values for history_control
+
+variables.c
+ - change sv_history_control to use new flag values
+ - change sv_history_control to parse $HISTCONTROL as a colon-separated
+ list of values for the history_control variable
+
+bashhist.c
+ - change check_history_control to use new flag values and restructure
+ to remove case statement
+ - new function hc_erasedups(line); removes all entries matching LINE
+ from the history list
+ - call hc_erasedups() from check_add_history after we've determined
+ that we're saving the line
+
+doc/{bash.1,bashref.texi}
+ - documented new options available for $HISTCONTROL and that it can
+ be a colon-separated list of history control options
+
+ 12/11
+ -----
+subst.c
+ - fix pat_subst() to not increment `e' (pointer to the end of the
+ matched portion of the string) until after we're sure we're going
+ around the loop again; fixes problem with empty replacements for
+ a pattern that doesn't match (bug reported by Don Coleman
+ <don@coleman.org>)
+
+ 12/17
+ -----
+lib/readline/display.c
+ - fixes to multibyte redisplay from jir@yamato.ibm.com (Jiro SEKIBA):
+ o speed up calculation of first difference between old and new
+ lines in the common case
+ o don't try to see if we're in the middle of a multbyte char
+ in update_line (we'll see how this one works out)
+
+ 12/18
+ -----
+doc/bashref.texi
+ - make it clear that the `command-list' function definition may be
+ terminated by an ampersand before the closing brace
+
+ 12/28
+ -----
+redir.c
+ - set `expanding_redir' flag when expanding words in a redirection
+
+subst.c
+ - new function, exp_jump_to_top_level(), to do any word expansion
+ cleanup before a call to jump_to_top_level from within that file;
+ sets expanding_redir back to 0 before jump_to_top_level
+
+variables.c
+ - in find_variable(), don't call find_variable_internal with a second
+ parameter of 1 if expanding_redir is non-zero
+ - in find_variable_internal(), don't search the temporary env if
+ subshell_environment includes SUBSHELL_FORK (indicating a simple
+ command) and expanding_redir is non-zero
+
+parse.y
+ - increment line_number when we read a \<newline> pair
+
+array.c
+ - added array_unshift_element and array_shift_element (which just call
+ array_shift and array_rshift, respectively), for bash debugger
+ support
+
+ 1/4/2003
+ --------
+doc/{bash.1,bashref.texi}
+ - note in the section describing the execution environment passed to
+ children that subshells inherit shell functions marked for export
+ - note in the section describing shell functions the possibility
+ that exported functions may result in two entries in the environment
+ with the same name
+
+parse.y
+ - when pushing an alias expansion onto the pushed_string list, append
+ a space to the expanded definition to make the parser's lookahead
+ work without using the `mustpop' hack in shell_getc
+
+ 1/8
+ ---
+shell.c
+ - change calls to exit() with EX_USAGE as a parameter to use
+ EX_BADUSAGE instead, since EX_USAGE is defined as 258 and is
+ technically out of range
+
+ 1/14
+ ----
+aclocal.m4
+ - check for the termcap functions in libc first: if we don't have
+ to link in another library, let's not do it
+ - change the test for mbstate_t to use AC_TRY_COMPILE instead of
+ AC_TRY_RUN
+
+doc/{bash.1,bashref.texi}
+ - document that bash turns line editing off if environment variable
+ EMACS is set to `t' when it starts up
+
+doc/bash.1
+ - minor change to give the ftp url for the latest version of bash in
+ the bug reports section
+
+lib/readline/histexpand.c
+ - in get_history_event, cast a couple of `const char *' variables to
+ `char *' in function call parameter lists to avoid compiler warnings
+
+ 1/21
+ ----
+builtins/cd.def
+ - change `cd -' so it prints the current working directory after a
+ successful chdir even when the shell is not interactive
+
+ 1/31
+ ----
+lib/readline/doc/rltech.texinfo
+ - clarified exactly what is meant by the term `application-specific
+ completion function', made its use consistent, and documented
+ what variables are changed before such a function is called
+
+lib/readline/input.c
+ - new function, _rl_pushed_input_available(), returns non-zero if
+ there are characters in the input queue managed by rl_get_char
+ and _rl_unget_char
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_pushed_input_available
+
+lib/readline/callback.c
+ - change rl_callback_read_char to check _rl_pushed_input_available
+ and loop if there's something there, so characters don't languish
+ until more keyboard input is read
+
+execute_cmd.c
+ - new variable, last_command_exit_signal, non-zero if
+ last_command_exit_value result from wait_for was result of a signal
+
+nojobs.c
+ - keep track of whether or not a given pid was killed by a signal with
+ a new flag in the pid_list array
+ - new function int find_termsig_by_pid(pid_t pid) to get the
+ terminating signal, if any, for a particular pid
+ - new function int get_termsig(WAIT status) returns the terminating
+ signal corresponding to status
+ - set last_command_exit_signal in wait_for and the various wait_for_xx
+ functions
+
+jobs.c
+ - new functions, process_exit_signal and job_exit_signal, return the
+ signal that killed a given process or job, if a signal caused its
+ death
+ - set last_command_exit_signal in wait_for by calling job_exit_signal
+ or process_exit_signal appropriately
+
+subst.c
+ - don't resend SIGINT to ourselves unless last_command_exit_signal is
+ SIGINT and last_command_exit_value == 128 + SIGINT. This fixes the
+ $(exit 130) bug reported by Paul Jarc
+
+expr.c
+ - new function, expr_bind_variable, calls bind_int_variable and
+ then stupidly_hack_special_variables. This fixes the
+ `let OPTIND=1' bug
+
+bashline.c
+ - change history_and_alias_expand_line and shell_expand_line to call
+ history_expand_line_internal so calls to pre_process_line are
+ localized
+ - change history_expand_line_internal and cleanup_expansion_error to
+ temporarily turn off hist_verify before calling pre_process_line
+ to avoid the effects described by teirllm@dms.auburn.edu
+
+parse.y
+ - don't unconditionally turn off PST_ALEXPNEXT in push_string. This
+ fixes the multiple alias expansion bug reported by Paul Jarc.
+
+lib/readline/vi_mode.c
+ - change rl_vi_subst to push `l' instead of ` ' -- it should be
+ equivalent, but this has been reported to fix a problem in multibyte
+ locales
+
+lib/readline/readline.h
+ - new state flag value RL_STATE_TTYCSAVED, indicates that save_tty_chars
+ has been called. Since it's only used and visible internally, it's
+ undocumented
+
+lib/readline/rltty.h
+ - changed all of the members of _rl_tty_chars struct to `unsigned char'
+
+lib/readline/rltty.c
+ - set the RL_STATE_TTYCSAVED after save_tty_chars is called
+ - new function, rl_tty_unset_default_bindings(), resets bindings for
+ everything rl_tty_set_default_bindings() messes with back to
+ rl_insert, so rl_tty_set_default_bindings can be called again with
+ possible changes
+ - new function that does the bulk of the work for
+ rltty_set_default_bindings: _rl_bind_tty_special_chars()
+ - change prepare_terminal_settings so that it can track changes to the
+ terminal special chars made by stty(1): unset the bindings with
+ rl_tty_unset_default_bindings before calling save_tty_chars, and
+ _rl_tty_set_default_bindings after, with the new values from
+ get_tty_settings(). This implements a long-standing request, most
+ recently made by Tim Waugh of Red Hat.
+
+lib/readline/readline.h
+ - extern declaration for rl_tty_unset_default_bindings()
+
+lib/readline/readline.c
+ - new function, reset_default_bindings, calls
+ rl_tty_unset_default_bindings() to reset the terminal special chars
+ back to rl_insert and then read the new ones
+
+lib/readline/doc/rltech.texinfo
+ - documented rl_tty_unset_default_bindings()
+
+ 2/1
+ ---
+[prayers and condolences to the families of the space shuttle crew members]
+
+aclocal.m4
+ - add checks for mbrtowc and mbrlen in BASH_CHECK_MULTIBYTE
+ - new check, BASH_FUNC_CTYPE_NONASCII, checks whether or not the ctype
+ functions handle non-ascii characters correctly
+
+config.h.in
+ - add HAVE_MBRTOWC and HAVE_MBRLEN
+ - add NO_MULTIBYTE_SUPPORT for new configure argument
+ - add CTYPE_NON_ASCII
+
+config-bot.h, lib/readline/rlmbutil.h
+ - make sure that mbrtowc, mbrlen, and wcwidth are all present before
+ turning on HANDLE_MULTIBYTE
+ - turn off multibyte chars if NO_MULTIBYTE_SUPPORT is defined
+
+configure.in
+ - new argument --enable-multibyte (enabled by default), allows
+ multibyte support to be turned off even on systems that support it
+
+lib/readline/chardefs.h
+ - define NON_NEGATIVE as 1 if CTYPE_NON_ASCII is defined
+
+ 2/3
+ ---
+config.h.in
+ - add HAVE_WCTOMB
+
+aclocal.m4
+ - check for wctomb in BASH_CHECK_MULTIBYTE
+
+ 2/4
+ ---
+lib/readline/vi_mode.c
+ - in _rl_vi_change_mbchar_case, make sure the result from wctomb()
+ is NULL-terminated before trying to insert it with rl_insert_text()
+
+ 2/5
+ ---
+lib/readline/display.c
+ - fix to update_line to avoid problems on systems with multibyte
+ characters when moving between history lines when the new line
+ has more glyphs but fewer bytes (twaugh@redhat.com)
+
+lib/readline/vi_mode.c
+ - use wcrtomb() instead of wctomb() in _rl_vi_change_mbchar_case
+
+pcomplete.c
+ - fix init_itemlist_from_varlist to handle the case where the
+ `varlist' is NULL
+
+doc/{bash.1,bashref.texi}
+ - clarified when a simple command may fail without the shell exiting
+ when -e is set
+
+ 2/13
+ ----
+parse.y
+ - when bash is started with --nolineediting, ignore \[ and \] when
+ decoding the prompt string
+
+subst.c
+ - fix remove_quoted_nulls so that a string with a CTLESC appearing
+ after a CTLNUL (which was removed) does not leave characters in
+ the string inappropriately
+
+ 2/14
+ ----
+builtins/common.h
+ - new flag value for parse_and_execute(): SEVAL_RESETLINE, which
+ allows the caller to specify whether or not the internal idea
+ of the line number should be reset to 1
+
+builtins/evalstring.c
+ - parse_and_execute() now tells push_string to reset the line
+ number only if the SEVAL_RESETLINE flag is set by the caller
+
+ 2/15
+ ----
+builtins/evalfile.c
+ - pass SEVAL_RESETLINE from _evalfile() to parse_and_execute()
+
+subst.c
+ - if the shell is currently interactive, pass SEVAL_RESETLINE to
+ parse_and_execute() when doing command substitution
+
+jobs.c
+ - add SEVAL_RESETLINE to parse_and_execute while running SIGCHLD trap
+
+command.h
+ - add `line' members to case_com, for_com, select_com
+ - rearranged order of members in some of the command structs, so
+ `flags' and `line' are first
+ - added a `source_file' member to the function_def struct; keeps
+ track of where the function was defined
+
+doc/Makefile.in
+ - add some new suffix rules: .dvi.ps
+
+doc/{bash.1,bashref.texi}
+ - added text to the description of the `trap' builtin tightening up
+ the language describing when the ERR trap will be run
+
+error.c
+ - if $BASH_SOURCE (internally-maintained) exists, use BASH_SOURCE[0]
+ in get_name_for_error if the shell is not interactive
+
+array.h
+ - new convenience defines: array_push and array_pop
+
+variables.c
+ - change get_funcname to return this_shell_function->name only if
+ arrays have not been compiled into the shell
+ - change init_funcname_var to initialize FUNCNAME as an array variable
+ if we have arrays
+ - new function: get_self(SHELL_VAR *self), a degenerate `dynamic_value'
+ function for dynamic variables
+ - new function: init_dynamic_array_var(), a generic dynamic array
+ variable initializer to handle the common case
+ - use init_dynamic_array_var() instead of explicit init_dirstack_var()
+ - use init_dynamic_array_var() instead of explicit init_groups_var()
+ - new dynamic array variables: BASH_ARGC, BASH_ARGV, BASH_SOURCE,
+ BASH_LINENO, initialized with init_dynamic_array_var
+
+shell.c
+ - initialize BASH_LINENO, BASH_SOURCE, FUNCNAME in open_shell_script
+
+{execute_cmd,trap}.c
+ - take out trap_line_number, since parse_and_execute doesn't reset the
+ line number any more when running the trap commands
+
+make_cmd.c
+ - augment make_function_def to get source file name and call
+ bind_function_def to save the entire FUNCTION_DEF
+
+variables.c
+ - new hash table: shell_function_defs, keeps table of shell function
+ definitions including source file and line number info corresponding
+ to shell_functions table
+ - new functions: find_function_def and bind_function_def to manage
+ the shell_function_defs hash table
+ - new function: unbind_function_def to remove a function definition
+ from the shell_function_defs table (right now uncalled)
+
+variables.h
+ - extern declaration for bind_function_def, find_function_def
+ - new extern declaration for unbind_function_def
+
+execute_cmd.c
+ - in function prologue and epilogue, push and pop FUNCNAME,
+ BASH_SOURCE, and BASH_LINENO information
+
+dispose_cmd.c
+ - broke the code that disposes a FUNCTION_DEF out into two new
+ functions: dispose_function_def and dispose_function_def_contents
+
+dispose_cmd.h
+ - new extern declarations for dispose_function_def_contents and
+ dispose_function_def
+
+copy_cmd.c
+ - move body of copy_function_def (other than allocating a new
+ FUNCTION_DEF) to copy_function_def_contents
+ - make sure to copy the new source_file member of a function_def in
+ copy_function_def_contents
+ - copy_function_def is no longer static, copy_function_def_contents
+ is not either
+
+command.h
+ - new extern declaration for copy_function_def_contents and
+ copy_function_def
+
+parse.y
+ - keep a stack of line numbers where case, select, and for commands
+ start, with a maximum nesting level of 128; increment when reading
+ word after `for', `select' or `case' in read_token_word; decrement
+ in grammar actions after parsing a complete for, arith_for, select,
+ or case command
+ - create for, case, arith_for, and select commands with an extra
+ line number (word_lineno[word_top]) argument
+
+make_cmd.c
+ - make_for_or_select, make_for_command, make_case_command, and
+ make_select_command all take an extra `line_number' argument
+
+make_cmd.h
+ - corresponding changes to extern declarations for those functions
+
+ 2/16
+ ----
+{execute_cmd,shell,variables}.c
+ - follow each call to remember_args with a call to push_args or
+ pop_args to manage the BASH_ARGV and BASH_ARGC arrays. Only set
+ when the shell is started to run shell script or runs a shell
+ function. Doesn't handle `set' or `shift' yet, nor `source'.
+
+execute_cmd.c
+ - keep track of the level of subshells with a new variable, manipulated
+ in execute_in_subshell
+ - set currently_executing_command in execute_command_internal(),
+ even if we're running a trap
+ - better line number management when executing simple commands,
+ conditional commands, for commands in execute_command_internal()
+ and the various functions that implement the commands
+ (execute_cond_command, execute_for_command, execute_etc.)
+
+variables.c
+ - new dynamic variable BASH_SUBSHELL, with new get_subshell and
+ assign_subshell functions to manipulate it
+ - new functions push_args (WORD_LIST *list) and pop_args (void) to
+ manage the BASH_ARGC and BASH_ARGV dynamic array variables
+
+variables.h
+ - new extern declarations for push_args and pop_args
+
+builtins/evalfile.c
+ - in _evalfile, do appropriate things to the FUNCNAME, BASH_ARGV,
+ BASH_ARGC, BASH_SOURCE, and BASH_LINENO variables
+
+support/mksignames.c
+ - add another fake signal for `trap'; make NSIG+2 == `RETURN'
+
+trap.c
+ - _run_trap_internal now returns an int: the exit value of the command
+ run as the result of the trap
+ - run_debug_trap now returns an int: the exit value of the command
+ run as the result of the trap
+ - RETURN is a new special trap
+ - new function: set_return_trap(char *command) interface for the rest
+ of the shell, like set_{debug,error}_trap
+ - new function: run_return_trap()
+ - command substitution and other child processes don't inherit the
+ return trap
+
+trap.h
+ - new extern declaration for set_return_trap() and run_return_trap
+ - new defines for RETURN_TRAP; increment BASH_NSIG
+ - change extern declaration for run_debug_trap() since it now returns
+ an int
+
+shell.c
+ - new invocation long option: --debugger, turns on debugging and
+ sets internal `debugging_mode' variable
+
+execute_cmd.c
+ - new code to save return trap when executing a shell function, so
+ shell functions don't inherit it
+ - run debug trap before binding the variable and running the action
+ list in a `for' command
+ - run debug trap before binding the selection variable and running
+ the query in a `select' command
+ - run debug trap before running matcher in a `case' command
+
+builtins/set.def
+ - new `set -o functrace' (set -T), causes DEBUG trap to be inherited
+ by shell functions
+ - new `set -o errtrace' (set -E), causes ERR trap to be inherited
+ by shell functions
+
+flags.c
+ - new flags -E and -T, control error_trace_mode and
+ function_trace_mode respectively
+
+flags.h
+ - new extern declarations for error_trace_mode and function_trace_mode
+
+ 2/17
+ ----
+doc/bashref.texi
+ - changed the `dircategory' as per Karl Berry's suggestion
+
+doc/texinfo.tex
+ - update to version of 2003/02/04 from texinfo.org
+
+support/texi2dvi
+ - update to version 1.14 from texinfo-4.5 distribution
+
+ 2/20
+ ----
+support/config.{guess,sub}
+ - update to versions of 2002/11/30
+
+lib/readline/doc/manvers.texinfo
+ - renamed to version.texi to match other GNU software
+ - UPDATE-MONTH variable is now `UPDATED-MONTH'
+
+lib/readline/doc/{hist,rlman,rluserman}.texinfo
+ - include version.texi
+
+doc/version.texi
+ - new file, with standard stuff matching other GNU distributions
+
+{doc,lib/readline/doc}/Makefile.in
+ - include right stuff for `version.texi'
+
+lib/readline/doc/{rluserman,rlman,hist}.texinfo
+ - use @copying and @insertcopying and @ifnottex instead of @ifinfo
+ - add FDL as an appendix entitled `Copying This Manual'
+
+lib/readline/doc/{rltech,rluser,hstech,hsuser}.texi
+ - changed the suffix from `texinfo' to `texi'
+
+lib/readline/doc/{rlman,rluserman}.texinfo, doc/bashref.texi
+ - include rltech.texi,rluser.texi,hstech.texi, and hsuser.texi
+
+lib/readline/doc/Makefile.in,doc/Makefile.in
+ - made appropriate changes for {{rl,hs}tech,{rl,hs}user}.texi
+
+lib/readline/doc/{rlman,rluserman}.texinfo
+ - changed the suffix from `texinfo' to `texi'
+
+lib/readline/doc/hist.texinfo
+ - renamed to history.texi
+
+ 2/25
+ ----
+pathnames.h.in
+ - moved pathnames.h here so value of DEBUGGER_START_FILE can be
+ substituted by configure
+
+aclocal.m4
+ - added AM_PATH_LISPDIR for debugger
+
+configure.in
+ - added some variables: `bashvers', `relstatus' to use info in more
+ than one place
+ - call AM_PATH_LISPDIR
+ - new option: --enable-debugger, sets DEBUGGER cpp option
+ - new option with AC_ARG_VAR: DEBUGGER_START_FILE
+ - make `pathnames.h' a file generated by configure
+
+Makefile.in
+ - add rule to create pathnames.h
+
+builtins/declare.def
+ - added extra line number and source file name to `declare -F' output
+ if `--debugger' is used at startup
+
+builtins/evalfile.c
+ - call run_return_trap from source_file before returning the result
+ from _evalfile()
+
+execute_cmd.c
+ - call run_return_trap in execute_function before restoring the old
+ context
+
+builtins/source.def
+ - arrange to save and restore DEBUG traps when sourcing files if
+ function_trace_mode (set -o functrace) is not set
+
+print_cmd.c
+ - broke print_for_command, print_select_command, print_case_command
+ into two functions each: one to print the `header' and one for
+ the body
+ - print_cond_command is no longer static
+ - print_arith_command now takes a WORD_LIST *, since it doesn't
+ actually do anything with the ARITH_COM it's passed except print
+ the enclosed WORD_LIST
+ - print_arith_command is no longer static
+
+externs.h
+ - extern declarations for print_{for,select,case}_command_head,
+ print_cond_command, print_arith_command
+
+{.,builtins,lib/sh}/Makefile.in
+ - corrected dependencies on pathnames.h, since it's now created in
+ the build directory
+
+ 3/5
+ ---
+lib/glob/glob.c
+ - handle alloca() failing (it's supposed to return NULL)
+ - use malloc() (with its attendent bookkeeping) instead of alloca()
+ in glob_filename()
+
+subst.c
+ - check whether shell_glob_filename returns NULL in
+ glob_expand_word_list
+ - change parameter_brace_expand_rhs to handle cases like
+ ${a[2]:=value} by properly creating the array element instead of a
+ variable named `a[2]' (reported by <opengeometry@yahoo.ca>)
+
+variables.c
+ - change bind_int_variable to use valid_array_reference instead
+ of looking for `['
+
+lib/readline/vi_mode.c
+ - check for `a' in _rl_vi_done_inserting so the text inserted by an
+ `a' command can be reinserted with a `.'
+
+lib/readline/readline.c
+ - when entering vi insertion mode in readline_internal_setup(), make
+ sure that _rl_vi_last_key_before_insert is set to `i' so that undo
+ groups and redo work better (reported by <opengeometry@yahoo.ca>)
+
+lib/glob/sm_loop.c
+ - handle ?(...) in a pattern immediately following a `*', instead of
+ ignoring the `(' and treating the `?' as a single-char match, as
+ long as FNM_EXTFLAG is set (reported by <anderson110@poptop.llnl.gov>)
+
+aclocal.m4
+ - new test for presence of struct timezone, BASH_STRUCT_TIMEZONE
+
+config.h.in
+ - add HAVE_STRUCT_TIMEZONE
+
+configure.in
+ - call BASH_STRUCT_TIMEZONE
+
+execute_cmd.c
+ - don't try to use `struct timezone' in calls to gettimeofday unless
+ HAVE_STRUCT_TIMEZONE is defined; use (void *)NULL otherwise
+
+ 3/20
+ ----
+execute_cmd.c
+ - new variable, the_printed_command_except_trap, saves the command
+ being executed before a trap is executed, for the debugger
+
+trap.c
+ - if in debugging mode, let command substitutions and other child
+ processes inherit the DEBUG and ERR traps if the `functrace'
+ (which is really a bad name, given this semantic) or `errtrace'
+ options, respectively, have been set
+
+shell.c
+ - local_pending_command renamed to command_execution_string; no longer
+ static
+
+variables.c
+ - new dynamic variable, BASH_COMMAND, set to the command string
+ currently executing, or the one that caused a trap to execute
+ (mapped to the_printed_command_except_trap)
+ - new variable, BASH_EXECUTION_STRING, set to the argument to the
+ -c invocation option, if the shell was started that way
+
+ 3/22
+ ----
+execute_cmd.c
+ - changed execute_for_command, eval_arith_for_expr,
+ execute_select_command, execute_arith_command, execute_cond_command,
+ execute_simple_command to implement new DEBUG trap semantics
+ for the debugger: if the DEBUG trap commands return a non-zero
+ status and debugging_mode is non-zero, we skip the command to be
+ executed
+
+trap.c
+ - change run_debug_trap for the debugger: if we're in the debugger
+ and the DEBUG trap returns 2 while we're in a function or sourced
+ script, we force a `return'
+
+shell.c
+ - new function, start_debugger(), that sources the debugger start file
+ and turns the debugger on
+
+builtins/shopt.def
+ - new settable option, `extdebug', turns on debugging_mode, as if
+ --debugger had been supplied at invocation (but does not source
+ debugger startup file)
+
+trap.c
+ - make sure that run_exit_trap arranges for `returns' to come back
+ there, too, so a `return' executed by an `exit' invoked within a
+ shell function behaves correctly
+
+support/shobj-conf
+ - change darwin/MacOS X stanza based on advice from mac os x developers
+
+lib/sh/mailstat.c
+ - set the atime member of the synthesized stat struct to 0 if `cur/'
+ is empty, rather than leaving it undefined
+
+ 3/24
+ ----
+builtins/caller.def
+ - new builtin to provide a call stack for the debugger
+
+builtins/evalfile.c
+ - added a second `flags' argument to source_file()
+ - new flag value for flags argument to _evalfile(): FEVAL_NOPUSHARGS.
+ If included in flags arg, it means to not manipulate the BASH_ARGV
+ and BASH_ARGC arrays
+
+builtins/common.h
+ - change prototype for source_file()
+
+builtins/source.def
+ - add flag value to call to source_file(): set to 1 if we replaced
+ the positional parameters
+ - add call to push_args if additional arguments supplied to the
+ source builtin
+ - add call to pop_args in maybe_pop_dollar_vars
+
+execute_cmd.c
+ - run the debug trap in execute_function so the debugger can stop
+ before the first command in a function body is executed
+ - modify subshell_level before executing a builtin or function in a
+ subshell
+ - print `for', `select', `case' command heads when set -x is enabled
+
+print_cmd.c
+ - `xtrace_print_word_list' now takes an additional flags argument,
+ which, if non-zero, says to print indirection_level_string()
+ - new functions to print for, select, and case command heads when
+ set -x is enabled
+ - add spaces after `((' and before `))' in xtrace_print_arith_command
+
+externs.h
+ - changed extern declaration for xtrace_print_word_list
+ - new declarations for xtrace_print_{for,case,select}_command_head()
+
+subst.c
+ - modify subshell_level when executing a command substitution
+
+ 3/25
+ ----
+execute_cmd.c
+ - use `line_number' in executing_line_number instead of looking into
+ the current command if it's a simple command; rearrange code to
+ make this simpler to compile in and out
+ - need to save and restore value of currently_executing_command around
+ calls to debug trap and return trap in execute_function
+
+make_cmd.c
+ - make sure make_arith_for_command() disposes the WORD_LIST * it is
+ passed, since nothing else does and it's not used directly
+
+ 3/28
+ ----
+Makefile.in
+ - fixed dependencies for `error.o' on shell.h and version.h -- makes
+ parallel makes (gmake -j 4) work correctly
+
+doc/{bash.1,bashref.texi}
+ - documented all new features added to support the debugger
+
+ 4/1
+ ---
+lib/sh/shquote.c
+ - make sure CTLESC and CTLNUL characters are escaped with CTLESC
+ by sh_double_quote, sh_backslash_quote and
+ sh_backslash_quote_for_double_quotes
+ Fixes vulnerability reported by svdb@stack.nl
+
+shell.h
+ - new `pipestatus' member of sh_parser_state_t, to save and restore
+ $PIPESTATUS
+
+parse.y
+ - changes to save_parser_state and restore_parser_state to save and
+ restore $PIPESTATUS
+
+builtins/read.def
+ - add a call to word_list_remove_quoted_nulls before assigning the
+ word list read from standard input to an array variable. Fixes
+ bug reported by holzhey@ppprs1.phy.tu-dresden.de
+
+ 4/3
+ ---
+execute_cmd.c
+ - in execute_null_command, if redirections are supplied, make sure
+ things like 3</etc/passwd are undone immediately, since they're
+ being done in the current shell
+ - functions now inherit the RETURN trap only if function tracing is
+ on for that function or globally
+
+lib/readline/misc.c
+ - in rl_replace_from_history, don't force rl_replace_line to clear
+ the undo_list, since it might point directly at an undo list
+ from a history entry (to which we have no handle)
+
+ 4/4
+ ---
+trap.c
+ - initialize RETURN_TRAP stuff appropriately in initialize_traps()
+ - let command substitutions inherit the RETURN trap if we're in
+ the debugger and function tracing has been enabled
+
+redir.c
+ - do_redirections and do_redirection_internal now take a single
+ flags argument instead of multiple boolean flags
+
+redir.h
+ - new #defines for flags argument to do_redirection{s,_internal}
+
+execute_cmd.c
+ - change all calls to do_redirection to use new flag values
+
+parse.y
+ - new function, free_pushed_string_input(), an external interface to
+ clear the pushed_string list (alias expansion)
+ - new define SHOULD_PROMPT to say when it's OK to call prompt_again
+ (if the shell is currently interactive and is reading input from
+ the terminal or readline)
+ - make sure shell_getc and read_secondary_line only call prompt_again
+ if SHOULD_PROMPT evaluates to true
+ - prompt_again shouldn't do anything if the shell is currently in the
+ middle of expanding a multiline alias, since we won't be printing a
+ prompt anyway
+
+externs.h
+ - new extern declaration for free_pushed_string_input()
+
+execute_cmd.c
+ - command_substitute and process_substitute now call
+ free_pushed_string_input because they shouldn't deal with any
+ partial alias expansion the parent shell may have started
+
+ 4/5
+ ---
+braces.c
+ - added {x..y} brace expansion, shorthand for {x,x+1,x+2,...,y}:
+ x, y can be integers or single characters; the sequence can be
+ ascending or descending; increment is always 1. Beware that
+ something like {a..A} can lead to non-letters.
+
+ 4/7
+ ---
+subst.c
+ - change extract_delimited_string and extract_dollar_brace_string to
+ return NULL on an expansion error when no_longjmp_on_fatal_error
+ is set, so the calling functions don't assume that the expansion
+ was successful (primarily the prompt expansion and completion code)
+
+doc/{bash.1,bashref.texi}
+ - documented new sequence generation feature of brace expansion
+
+ 4/8
+ ---
+lib/sh/strstr.c
+ - replacement for strstr(3), in case the C library doesn't provide it
+
+configure.in
+ - check for strstr, add to LIBOBJS if not found
+
+array.c
+ - array_walk now takes a third void * argument; it's passed to `func'
+ as its second argument
+
+array.h
+ - change sh_ae_map_func_t prototype to add void * second argument
+
+ 4/10
+ ----
+array.c
+ - new function: array_keys_to_word_list, returns a list of indices for
+ a given array
+
+array.h
+ - new extern declaration for array_keys_to_word_list
+
+arrayfunc.c
+3 - new function: char *array_keys(), returns a string with keys for a
+ given array, with the appropriate quoting
+
+arrayfunc.h
+ - new extern declaration for array_keys
+
+subst.c
+ - code to implement ksh93-like ${!array[@]} expansion (array[*] works,
+ too), which expands to all the keys (indices) of ARRAY
+
+doc/{bash.1,bashref.texi}
+ - documented new ${!array[@]} expansion
+
+ 4/19
+ ----
+builtins/setattr.def
+ - remove any mention of the `-n' option from readonly builtin's short
+ and long documentation
+
+pcomplib.c
+ - fix progcomp_insert to increase the refcount on the `cs' argument
+ before calling hash_insert -- fixes the problem of multiple calls
+ to progcomp_insert with the same compspec
+
+doc/bash.1
+ - add mention of characters that inhibit history expansion when found
+ immediately following an unquoted `!'
+
+bashline.c
+ - convert the code conditionally compiled in by the NO_FORCE_FIGNORE
+ #define to something runtime-tunable with the `force_fignore'
+ variable (opposite sense). force_fignore is 1 by default
+
+builtins/shopt.def
+ - new tunable `shopt' option: `force_fignore', controls force_fignore
+ variable and behavior of FIGNORE handling
+
+lib/readline/complete.c
+ - new variable, _rl_complete_show_unmodified, causes completer to list
+ possible completions if more than one completion and partial
+ completion cannot be done
+ - new value for what_to_do argument to rl_complete_internal, `@',
+ indicating that we want the show-unmodified behavior
+ - change rl_completion_type to return `@' when appropriate
+
+lib/readline/bind.c
+ - new bindable variable, show-all-if-unmodified, which controls value
+ of _rl_complete_show_unmodified
+
+lib/readline/rlprivate.h
+ - extern declaration for _rl_complete_show_unmodified
+
+lib/readline/doc/rluser.texi
+ - documented show-all-if-unmodified
+
+lib/readline/doc/rltech.texi
+ - documented new `@' value for second argument to rl_complete_internal
+ - documented new return value from rl_completion_type
+
+ 4/22
+ ----
+lib/readline/signals.c
+ - in rl_set_signal, set sa_flags to SA_RESTART for SIGWINCH, if we
+ have POSIX signals -- this is what most applications expect, and
+ they're not prepared to deal with EINTR
+
+ 4/25
+ ----
+bashline.c
+ - take out attempts to suppress readline filename completion when
+ attempting command completion and there is a directory with the
+ same name in the current directory. #if 0'd for now; maybe make
+ it conditional later
+
+error.c
+ - new variable, gnu_error_format, causes non-interactive errors with
+ line numbers to be printed in the `gnu style' (filename:lineno:)
+ instead of the `shell style' (filename: line lineno:) by
+ error_prolog and parser_error
+
+version.h,support/mkversion
+ - don't put extern function declarations into created version.h any
+ more
+
+version.c,externs.h
+ - add extern declarations for show_shell_version() and
+ shell_version_string(), since they're no longer in version.h
+ (this backs out change from 9/10/2001)
+
+shell.h
+ - don't include version.h
+
+Makefile.in
+ - remove unneeded dependencies on version.h -- only version.o
+ needs it now
+
+builtins/shopt.def
+ - new option `gnu_errfmt', changes error messages with line numbers
+ to use the `standard' gnu format
+
+pcomplete.h
+ - new COPT_BASHDEFAULT and COPT_PLUSDIRS defines
+
+bashline.c
+ - if the COPT_BASHDEFAULT flag is set, try the rest of the bash
+ default completions if a compspec with that flag set generates
+ no matches
+ - broke bash completions out into separate function:
+ bash_default_completion(const char *text, int start, int end,
+ int qc, int in_command_position); change attempt_shell_completion
+ to call it
+
+bashline.h
+ - new extern declaration for bash_default_completion
+
+builtins/complete.def
+ - added code to compgen to call bash_default_completion if a compspec
+ with the COPT_BASHDEFAULT flag set generates no matches from the
+ programmable completion options
+
+doc/{bash.1,bashref.texi}
+ - document new `gnu_errfmt' shopt option
+
+doc/bash.1,lib/readline/doc/rluser.texi
+ - document new `-o bashdefault' option to complete and compgen
+
+ 4/26
+ ----
+pcomplete.c
+ - if a compspec has the COPT_PLUSDIRS flag set, generate any
+ directory name completions and add them to the set of possible
+ completions as the last thing in gen_compspec_completions
+
+builtins/complete.def
+ - add new `-o plusdirs' option to complete and compgen; means to
+ do directory name completion in addition to other actions
+ specified by the compspec, and do it last
+
+ 5/12
+ ----
+copy_cmd.c
+ - fix copy_{for,select,case}_command to copy the line member
+
+ 5/13
+ ----
+lib/readline/rlmbutil.h,include/shmbutil.h
+ - new #define MB_INVALIDCH, evaluates to true if return value from
+ mbrtowc or mbrlen denotes an invalid multibyte character
+ - new #define MB_NULLWCH, evaluates to true if return value from
+ mbrtowc or mbrlen denotes a null multibyte character
+
+lib/readline/complete.c
+ - new function, fnwidth(), returns printed length of a filename,
+ correctly handling multibyte characters
+ - new function, fnprint(), displays a filename on rl_outstream
+ correctly handling multibyte characters
+ - use fnwidth() instead of simple strlen() for length calculations
+ in display_matches
+
+lib/readline/{display,mbutil}.c
+ - use MB_INVALIDCH and MB_NULLWCH as appropriate
+
+ 5/21
+ ----
+configure.in
+ - turn off the builtin malloc on GNU/FreeBSD systems (GNU userland,
+ FreeBSD kernel)
+
+ 5/24
+ ----
+pcomplete.c
+ - in programmable_completions, copy the compspec before using it to
+ generate the possible completions, allowing the completion for the
+ command to be changed by the compspec itself without causing a
+ core dump because the shell frees freed memory (reported by
+ marcus.harnish@gmx.net)
+
+parse.y
+ - in shell_getc, don't call notify_and_cleanup in an interactive shell
+ unless the shell is currently reading from the terminal and would
+ print a prompt. This fixes programmable completions printing job
+ notifications (reported by r.d.green@lancaster.ac.uk)
+ - use SHOULD_PROMPT macro consistently
+
+shell.c
+ - use get_string_value instead of getenv when looking up $TERM and
+ $EMACS to see whether the shell is running under emacs
+ - check for `TERM=dumb' as well as `EMACS=t' to decide whether or
+ not to turn off command-line editing in emacs shell windows
+ (reported by jik@kamens.brookline.ma.us)
+
+ 5/28
+ ----
+expr.c
+ - save and restore the `evalbuf' context, since evalexp can be
+ called recursively (e.g. a[b[c]])
+
+ 5/29
+ ----
+builtins/common.c
+ - in display_signal_list, when displaying for `kill -l' in posix mode,
+ display signal names without the `SIG' prefix
+
+doc/bashref.texi
+ - documented changed to posix mode behavior of kill -l
+
+builtins/kill.def
+ - changed the error message printed when argument is not a pid or
+ job id
+
+doc/{bash.1,bashref.texi}
+ - fixed a slight inconsistency in the different sections describing
+ the `promptvars' option
+
+doc/Makefile.in
+ - new rule to create `bash.info' from `bashref.info' by running sed
+ to change the internal references. This makes the installed
+ bash.info work right
+ - make the install target install bash.info after it's been modified
+ from bashref.info
+
+ 5/30
+ ----
+builtins/cd.def
+ - after testing with ferror(), call clearerr if ferror() evaluates
+ to true
+
+execute_cmd.c
+ - call clearerr(stdout) after executing a builtin or function,
+ before restoring any redirections
+
+bashhist.c
+ - initialize history_comment_char in bash_history_initialize
+
+builtins/alias.def
+ - if posix mode is enabled, and the `-p' option is not supplied, don't
+ list aliases with a preceding `alias ', as POSIX.2 specifies
+
+doc/bashref.texi
+ - note new posix mode behavior of displaying alias names and values
+ - note new posix mode behavior of trap builtin not checking first
+ argument to be a possible signal specification
+ - note new posix mode behavior of `kill' not accepting signal names
+ with a leading `SIG'
+
+include/stdc.h,lib/readline/rlstdc.h
+ - don't check the __STRICT_ANSI__ define when deciding whether or not
+ to #undef __attribute__
+
+trap.[ch]
+ - decode_signal and signal_object_p take an additional flags arg to
+ satisfy POSIX.2 signal name translation requirements
+ - change decode_signal to honor the new DSIG_NOCASE (match case-
+ insensitively) and DSIG_SIGPREFIX (allow signal specifications
+ with the `SIG' prefix) flags
+
+builtins/{common.c,{trap,kill}.def}
+ - change calls to decode_signal to add the new argument with
+ appropriate values. For kill, POSIX.2 says case-insensitive without
+ the `SIG' prefix. For trap, POSIX.2 says applications may decode
+ case-insensitively and with the SIG prefix
+
+builtins/trap.def
+ - when in posix mode, don't check for the first argument being a
+ possible signal spec and revert the signal handling to the
+ original disposition
+
+ 6/1
+ ---
+shell.h
+ - new MATCH_STARSUB define, to tell the callers of the various pattern
+ substitution and removal functions that call string_list to treat
+ "$*" and "${array[*]}" appropriately
+subst.c
+ - if get_var_and_type encounters an array variable subscripted by `*'
+ or `$*', return VT_STARSUB or'd into the variable type value
+ - callers of get_var_and_type check for VT_STARSUB in the returned type
+ this will fix problems with ${*...} not being separated with the
+ first character of $IFS when double-quoted
+ - in parameter_brace_patsub, set MATCH_STARSUB if VT_STARSUB is set by
+ get_var_and_type
+ - change pos_params_pat_subst to call string_list_dollar_star if
+ the match flags include MATCH_STARSUB
+ - change parameter_brace_substring to call array_subrange with an
+ additional argument indicating the character indexing the array
+
+array.c
+ - change array_patsub to join the modified array elements with the
+ first character of $IFS if MATCH_STARSUB is set in the match flags
+ passed in
+ - array_subrange now takes an additional argument indicating the
+ index type -- used to separate with first char of $IFS if the
+ index char is `*' and the expression is double-quoted
+
+array.h
+ - change prototype declaration of array_subrange to add additional arg
+
+ 6/2
+ ---
+doc/FAQ
+ - merged in some updates about POSIX from Andrew Josey
+
+ 6/3
+ ---
+bashjmp.h
+ - new value for jump_to_top_level: ERREXIT
+
+{eval,shell,subst,trap}.c,builtins/evalstring.c
+ - ERREXIT is (for now) equivalent to EXITPROG as a value from
+ jump_to_top_level
+
+ 6/9
+ ---
+doc/bash.1,lib/readline/doc/readline.3
+ - documented new `show-all-if-unmodified' readline variable
+
+ 6/14
+ ----
+lib/readline/history.c
+ - new function, histdata_t free_history_entry (HIST_ENTRY *h),
+ frees H and its line, returning the application-specific data
+ - use free_history_entry where appropriate
+
+lib/readline/history.h
+ - extern declaration for free_history_entry()
+
+lib/readline/doc/{history.3,hstech.texi}
+ - document free_history_entry
+
+ 6/16
+ ----
+lib/readline/readline.[ch]
+ - changed varions defines for readline/history library versions to 5.0
+
+subst.c
+ - pass information about whether or not an indirectly-expanded variable
+ contains ${array[@]}, ${array[*]}, $@, or $*
+ - new function, chk_atstar, performs checks for ${array[@]},
+ ${array[*]}, $@, or $* for the parameter_brace_expand* functions and
+ sets flags (passed as args) to the results
+ - call chk_atstar from parameter_brace_expand_indir and
+ parameter_brace_expand
+
+ 6/28
+ ----
+doc/{bash.1,bashref.texi}
+ - clarified that (...) commands are executed in a subshell environment
+
+ 6/30
+ ----
+lib/readline/bind.c
+ - fix a problem with parsing nested if statements in inputrc files
+ (fix from dimakar@yahoo.com)
+
+ 7/3
+ ---
+{jobs,nojobs}.c
+ - fix places that use the return value from strsignal() to check
+ for NULL return values using a new function, j_strsignal()
+
+builtins/kill.def
+ - removed JOB_CONTROL restriction; kill is now available as a builtin
+ when the shell is built without job control
+
+ 7/10
+ ----
+jobs.c
+ - some systems have WIFCONTINUED but not WCONTINUED; separate the
+ #defines
+
+ 7/14
+ ----
+lib/readline/history.h
+ - new `timestamp' member of a HIST_ENTRY
+ - extern declarations for add_history_time and history_get_time
+
+lib/readline/doc/{history.3,hstech.texi}
+ - document add_history_time and history_get_time
+
+lib/readline/history.c
+ - implementations of history_get_time and add_history_time
+ - change add_history to initialize the timestamp information
+ - change free_history_entry to free the timestamp
+ - change replace_history_entry to duplicate the timestamp
+ - change history_total_bytes to add the memory taken by the time
+ stamps
+
+bashhist.c,builtins/history.def
+ - use free_history_entry where appropriate
+
+lib/readline/histfile.c
+ - changes to read_history_range to deal with new history file format
+ including timestamps
+ - changes to history_do_write to write out the timestamp information
+ - changes to history_truncate_file to understand the timestamp
+ information
+
+ 7/22
+ ----
+doc/{bash.1,bashref.texi}
+ - fixed function declaration documentation to specify that any compound
+ command may be used as the function body, not just a group command
+
+ 7/23
+ ----
+lib/readline/histfile.c
+ - don't allocate space for null timestamps in history_do_write, and
+ don't write out null timestamp entries
+
+parse.y
+ - fix CHECK_FOR_RESERVED_WORD to call time_command_acceptable() and
+ return TIME if the token is "time" and `time' is legal in that
+ context
+
+ 7/29
+ ----
+lib/sh/fmtulong.c
+ - include <inttypes.h> for possible definitions of intmax_t, uintmax_t
+ (reported by ro@techfak.uni-bielefeld.de)
+
+ 7/30
+ ----
+parse.y
+ - remove checking for `time' reserved word from special_case_tokens();
+ use regular mechanism in CHECK_FOR_RESERVED_WORD. This allows `time'
+ to be aliased. (Reported by Glenn Morris
+ <gmorris+gmane@ast.cam.ac.uk>)
+
+ 7/31
+ ----
+lib/readline/history.h
+ - extern declaration for history_write_timestamps
+
+lib/readline/histfile.c
+ - don't write timestamps to the history file in history_do_write
+ unless history_write_timestamps is set to non-zero by the application
+ (set to 0 by default)
+
+lib/readline/doc/{hstech.texi,history.3}
+ - document history_write_timestamps
+
+variables.[ch]
+ - new special variable function, HISTTIMEFORMAT; special function
+ sets history_write_timestamps to 1 if HISTTIMEFORMAT is set
+
+ 8/4
+ ---
+builtins/history.def
+ - added support for printing time stamps based on the value of the
+ HISTTIMEFORMAT variable when displaying history entries
+
+doc/{bash.1,bashref.texi}
+ - added description of new HISTTIMEFORMAT variable
+
+ 8/5
+ ---
+config-top.h
+ - remove /usr/ucb from any default paths
+
+mailcheck.c
+ - make_default_mailpath now returns NULL if DEFAULT_MAIL_DIRECTORY
+ is not defined
+ - remember_mail_dates now returns if make_default_mailpath returns
+ NULL
+
+config-bot.h
+ - reorganized the sections; provide an explicit placeholder for
+ builders to #undef any feature defines they don't want that
+ configure creates for them, like the default mail path
+
+ 8/9
+ ---
+config.h.in
+ - add HAVE_REGEX_H, HAVE_REGCOMP, HAVE_REGEXEC for detection of POSIX.2
+ regular expression functions
+ - add COND_REGEXP define to enable and disable the =~ operator for
+ matching extended regular expressions in [[...]] commands
+
+configure.in
+ - new option, --enable-cond-regexp, enables =~ and code to perform
+ regular expression matching in [[...]]
+
+config-bot.h
+ - undef COND_REGEXP if the OS doesn't provide posix regexp support
+
+doc/bashref.texi
+ - documnent new --enable-cond-regexp option to configure
+
+ 8/18
+ ----
+support/shobj-conf
+ - support for shared objects on FreeBSD-gnu (from Robert Millan)
+
+ 8/25
+ ----
+lib/sh/shmatch.c
+ - new file, shell interface to posix extended regular expression
+ matching
+
+externs.h
+ - new extern declarations for functions in shmatch.c
+
+execute_cmd.c
+ - incorporate code into execute_cond_node that does extended regular
+ expression matching for the =~ operator
+
+parse.y
+ - add `=~' to the list of binary operators accepted by the conditional
+ command parser
+
+doc/{bash.1,bashref.texi}
+ - documented =~ conditional binary operator and the BASH_REMATCH
+ variable
+
+ 8/27
+ ----
+lib/readline/display.c
+ - take multibyte characters into account when looking for quoted
+ substrings on which to do completion (fix from jir@yamato.ibm.com)
+
+lib/readline/util.c
+ - fix typo in _rl_strpbrk
+
+lib/readline/rldefs.h
+ - use function version of _rl_strpbrk in multibyte locales, because
+ it understands to skip over special characters in multibyte
+ character sequences
+
+ 8/28
+ ----
+jobs.c
+ - in wait_for, check for window size changes if a job that exits due
+ to a signal or is stopped was in the foreground, not just if it's
+ the current job
+
+ 9/10
+ ----
+support/config.{guess,sub}
+ - add support to recognize FreeBSD running on the amd64
+
+subst.c
+ - if the new `fail_glob_expansion' variable is non-zero, globbing that
+ fails to match anything causes an expansion error
+
+builtins/shopt.def
+ - new `failglob' expansion: if enabled, failed globs cause an error
+
+test/shopt.right
+ - take `failglob' into account
+
+doc/{bash.1,bashref.texi}
+ - documented new `failglob' option and its effects
+
+ 9/12
+ ----
+findcmd.c
+ - fix file_status to treat the mode bits and uid right -- in particular,
+ don't assume the `other' bits always apply. Bug reported by
+ <moseley@hank.org>; fix inspired by <carlo@alinoe.com>
+
+command.h
+ - new word flag: W_NOCOMSUB, meaning to not perform command
+ substitution on a word
+
+subst.c
+ - new flag for param_expand: PF_NOCOMSUB. If non-zero, $(...)
+ command substitutions are not expanded, but returned unchanged
+ - change expand_word_internal to pass through `` command substitutions
+ unchanged if (word->flags & W_NOCOMSUB) != 0
+ - change expand_word_internal to pass PF_NOCOMSUB to param_expand
+ if (word->flags & W_NOCOMSUB) != 0
+
+builtins/shopt.def
+ - rename set_interactive_comments to set_shellopts_after_change, which
+ more accurately reflects its purpose
+
+syntax.h
+ - add a define for isblank() in case the system doesn't provide one
+
+jobs.c
+ - change raw_job_exit_status to understand `pipefail', using the new
+ `pipefail_opt' variable
+
+flags.[ch]
+ - declare pipefail_opt
+ - reset pipefail_opt to 0 in reset_shell_flags
+
+builtins/set.def
+ - add `set -o pipefail' and document it in help output
+
+doc/{bash.1,bashref.texi}
+ - document `set -o pipefail' and the effect of the pipefail option
+
+mksyntax.c,syntax.h
+ - sh_syntaxtab is no longer `const'
+ - new generated variable, sh_syntabsiz, set to number of entries in
+ sh_syntaxtab, written to generated syntax.c
+
+locale.c
+ - new function, locale_setblanks(), sets each member of the current
+ locale's <blank> class to have the CSHBRK flag in sh_syntaxtab
+
+ 9/17
+ ----
+arrayfunc.c
+ - change convert_var_to_array to not set array[0] to a NULL value
+ (if the scalar variable had no value; e.g., after being created
+ with `local arrayvar')
+
+lib/readline/display.c
+ - save and restore the value of prompt_invis_chars_first_line in
+ rl_{save,restore}_prompt, and reinitialize it to 0 before printing
+ something in the message area
+
+lib/readline/bind.c
+ - new functions: rl_bind_keyseq_if_unbound_in_map(ks, func, kmap);
+ binds key sequence KS to function FUNC in keymap KMAP, and
+ rl_bind_keyseq_if_unbound (ks, func); binds key sequence KS to
+ function FUNC in the current keymap
+
+lib/readline/readline.h
+ - extern function declarations for rl_bind_keyseq_if_unbound_in_map and
+ rl_bind_keyseq_if_unbound
+
+lib/readline/{readline,terminal}.c
+ - _rl_bind_if_unbound -> rl_bind_keyseq_if_unbound
+
+lib/readline/{bind.c,rlprivate.h}
+ - remove _rl_bind_if_unbound
+
+ 9/18
+ ----
+lib/readline/doc/rltech.texi
+ - document rl_bind_keyseq_if_unbound and
+ rl_bind_keyseq_if_unbound_in_map
+
+ 9/19
+ ----
+lib/readline/bind.c
+ - new functions rl_bind_key_if_unbound_in_map and
+ rl_bind_key_if_unbound; analogous to (and implemented in terms of)
+ keyseq functions
+ - rl_bind_keyseq_in_map: a new function, equivalent to rl_set_key
+ (which remains for backwards compatibility); changed callers to
+ use it
+ - new function, rl_bind_keyseq, equivalent to rl_bind_keyseq_in_map
+ with a third argument of _rl_keymap
+
+lib/readline/readline.h
+ - extern declarations for rl_bind_key_if_unbound_in_map and
+ rl_bind_key_if_unbound
+ - extern declarations for rl_bind_keyseq_in_map and rl_bind_keyseq
+
+lib/readline/doc/rltech.texi
+ - document rl_bind_keyseq and rl_bind_keyseq_in_map
+
+configure.in
+ - require at least readline-5.0
+
+config-bot.h
+ - define SYS_SIGLIST_DECLARED if it's not defined, but
+ HAVE_DECL_SYS_SIGLIST is, to deal with differences between
+ autoconf versions
+
+bashline.c
+ - use rl_bind_key_if_unbound_in_map when binding bash keybindings in
+ initialize_readline(), so inputrc files can override them
+
+ 9/22
+ ----
+lib/readline/histsearch.c
+ - do better bounds checking for history_offset and history_length in
+ history_search_internal
+
+builtins/history.def
+ - in delete_last_history(), make sure we don't leave the history
+ offset longer than the history length after calling delete_histent
+
+ 9/23
+ ----
+jobs.c
+ - small change to notify_of_job_status so job status messages get
+ printed even if the shell was started to run `-c command'. The
+ old behavior was intentional, but I cannot remember why, so we'll
+ try it the other way for a while (debian bash bug #211693)
+
+ 9/24
+ ----
+jobs.c
+ - slightly modify change from 9/23 so that jobs started to run
+ command substitutions don't print job status messages
+
+ 9/25
+ ----
+lib/readline/search.c
+ - when reading a non-incremental search string from the terminal,
+ use a separate undo list rather than chaining it to the undo list
+ from the rest of the line, since the whole undo list will get
+ freed when the search string is complete
+
+lib/readline/readline.h
+ - changed the defines guarding the stdarg prototype for rl_message to
+ match what's actually used in display.c, where it's defined
+
+ 9/26
+ ----
+[bash-3.0-alpha released]
+
+ 9/29
+ ----
+lib/sh/shmatch.c
+ - fix to build correctly when arrays are not compiled into the shell
+
+subst.c
+ - fix command substitution to run any exit trap defined in the
+ command substitution before returning; the exit trap is not inherited
+ from the calling shell
+
+lib/readline/shell.c
+ - change sh_set_lines_and_columns to free the memory allocated and
+ passed to setenv(), since setenv is specified by POSIX to allocate
+ new memory and copy its arguments
+
+jobs.c
+ - change logic in make_child so that every child process attempts to
+ set the terminal's process group to the pipeline's process group
+ when PGRP_PIPE is defined, just like when it's undefined. This is
+ reported to fix some tricky synchronization problems on Red Hat
+ Enterprise Linux 3. Fix from Ernie Petrides <petrides@redhat.com>.
+
+ 9/30
+ ----
+builtins/printf.def
+ - tescape no longer needs a `trans_squote' argument, since it's the
+ same as the `sawc' argument. The `sawc' argument now means to do
+ the %b argument processing if non-null
+ - fix processing of octal constants for %b arguments (\0 followed by
+ up to three octal digits) and other escape sequences (\ followed by
+ up to three octal digits)
+ - hex constants `\xHHH' are now allowed to contain any positive
+ number of digits; previously they were restricted to two [removed]
+ - allow two new escape sequences: \" and \?, for compatibility with
+ ksh93 and ANSI C
+
+doc/{bash.1,bashref.texi}
+ - documented processing that printf performs for arguments to %b
+ escape sequences
+
+lib/sh/strtrans.c
+ - add \" and \? to escape sequences recognized by `echo -e'
+
+ 10/1
+ ----
+version.c
+ - use snprintf instead of sprintf if configure tells us we have it
+
+ 10/3
+ ----
+subst.c
+ - in list_remove_pattern, take into account the fact that one of the
+ list elements may be NULL, and don't free the result of
+ remove_pattern() without checking
+ - in remove_pattern, return savestring(param) if *param == '\0',
+ since callers expect to free() non-null return values
+
+ 10/4
+ ----
+subst.c
+ - change verify_substring_values to make it clearer that the first
+ offset deals with array indices and the second deals with numbers
+ of elements, when doing array subranges with ${a[@]:e1:e2}
+
+array.c
+ - change array_subrange to make it explicit that the second offset
+ argument is a count of the desired number of elements, not an
+ ending index. This deals with sparse arrays correctly.
+
+ 10/6
+ ----
+variables.c
+ - fix memory leak in assign_in_env
+
+ 10/8
+ ----
+subst.c
+ - in parameter_brace_expand, check that the last characters are `]}'
+ before checking for ${!array[@]}
+
+execute_cmd.c,builtins/source.def
+ - push and pop the args (BASH_ARGV and BASH_ARGC) when executing a
+ shell function or sourcing a script only when in debugging mode
+
+ 10/11
+ -----
+arrayfunc.c
+ - make sure array_variable_name returns values for the SUBP and LENP
+ arguments if they're non-null, since callers expect to use them
+ even if the array subscript is bad
+
+error.c
+ - call exit_shell instead of sh_exit from parser_error and
+ report_error so the right things happen (running exit trap, doing
+ the right interactive cleanup, etc.)
+
+lib/readline/complete.c
+ - new variable, rl_completion_quote_character, set to any quote char
+ readline thinks it finds before any application completion
+ function is called
+ - new variable, rl_completion_suppress_quote, settable by an
+ application-specific completion function. If set to non-zero, the
+ completion code does not append a closing quote in append_to_match
+
+lib/readline/readline.h
+ - extern declarations for rl_completion_quote_character and
+ rl_completion_suppress_quote
+
+bashline.c
+ - set rl_completion_suppress_quote in command_subst_completion_function
+ because that would be inserted before any closing "`" or ")", which
+ is somewhat disconcerting
+
+lib/readline/doc/rltech.texi
+ - documented rl_completion_suppress_quote and
+ rl_completion_quote_character
+
+ 10/13
+ -----
+bashhist.c
+ - use sv_histchars instead of setting history_comment_char directly in
+ bash_initialize_history so assignments to $histchars made in
+ ~/.bashrc are honored
+
+ 10/21
+ -----
+trap.c
+ - make sure run_exit_trap sets `running_trap' appropriately
+ - new variable, trap_saved_exit_value, set to last_command_exit_value
+ before running any trap commands; available to the rest of the
+ shell; use trap_saved_exit_value to replace some function-local
+ variables
+
+builtins/exit.def
+ - if the shell is running the exit trap, and no argument is given
+ to `exit', use trap_saved_exit_value as the exit status instead
+ of the last command exit value (which could be the previous command
+ run in the exit trap), as required by POSIX.2
+
+ 10/25
+ -----
+doc/{bash.1,bashref.texi}
+ - add `alias' to the list of documented `assignment statement' builtins
+
+ 11/1
+ ----
+doc/bash.1
+ - remove the `.' from the sample $PATH value
+
+parse.y
+ - make sure parse_compound_assignment prompts with $PS2 if it reads
+ a newline while parsing the compound assignment statement. Bug
+ reported by Stephane Chazelas
+ - parse_string_to_word_list now takes a new second argument: `int flags'
+ - new parser state flag: PST_COMPASSIGN; indicates that the shell is
+ parsing a compound assignment statement
+ - parse_string_to_word_list turns on PST_COMPASSIGN if `flags' arg
+ has low bit set
+ - turn PST_COMPASSIGN on and off in parse_compound_assignment
+
+externs.h
+ - change prototype declaration for parse_string_to_word_list
+
+arrayfunc.c
+ - change call to parse_string_to_word_list to add new flags arg
+
+general.c
+ - assignment() takes a new `flags' second argument
+ - if `flags' is non-zero, accept `[' as a legal assignment statement
+ starter character (for parsing compound array assignments)
+
+general.h
+ - add new argument to prototype declaration for assignment()
+
+parse.y,{subst,variables}.c, builtins/{setattr,declare}.def
+ - change calls to assignment() (parse.y calls with flags == 1 when
+ parser_state inlcudes PST_COMPASSIGN)
+
+arrayfunc.c
+ - in assign_array_var_from_string(), don't treat an expanded word
+ of the form [ind]=value specially unless the W_ASSIGNMENT flag is
+ set. This means that words that are the result of expansions but
+ happen to have the same format as compound assignment statement
+ words will not be treated as such. For instance
+
+ v='[12]=foobar'
+ a=( $v )
+
+ will result in a[0]='[12]=foobar' instead of a[12]=foobar. This
+ is closer to how `regular' assignment statements are treated and
+ compatible with ksh93. Bug reported by Stephane Chazelas
+
+shell.c
+ - new --protected argument, disables command substitution when used
+ with --wordexp (like --wordexp, it remains undocumented)
+ - change run_wordexp to turn on the W_NOCOMSUB flag in each word
+ to be expanded if protected_mode is set
+
+ 11/7
+ ----
+doc/{bash.1,bashref.texi}
+ - clarified the language concerning inherited signal dispositions and
+ when traps are run
+
+support/shobj-conf
+ - slight changes to the darwin (Mac OS X) stanza for MacOS X 10.3
+ (for the readline shared library builds, which shares this script)
+
+lib/readline/histexpand.c
+ - change to make `^' behave as equivalent to word one, as csh does,
+ and as the documentation states
+
+lib/readline/display.c
+ - in update_line, make sure to use col_lendiff in all calculations
+ where the cursor position is concerned (like when calculating
+ the value of _rl_last_c_pos). Fixes bug reported by Andreas
+ Schwab
+
+ 11/12
+ -----
+trap.c
+ - make _run_trap_internal catch `return' builtin longjmps and clean
+ up before longjmping on to where the return was intended to go
+ (fixes bug with not turning off SIG_INPROGRESS flag when `return'
+ executed in trap command)
+
+ 11/18
+ -----
+builtins/cd.def
+ - in posix mode, set errno to ENOTDIR if canonicalization fails,
+ unless the canonicalization functions leave it set to ENOENT
+
+ 11/25
+ -----
+make_cmd.c
+ - in make_simple_command, don't blindly dereference element.redirect
+
+parse.y
+ - the list_terminator production now has an `int' value so it can be
+ used in other grammar productions
+ - add a rule that makes `time' on a line by itself time a null
+ command (this is iffy)
+
+ 11/28
+ -----
+subst.c
+ - change the pattern substitution code (${var//pat/rep}) to use the
+ same pattern expansion function (getpattern()) as the pattern
+ removal expansions. This has the effect of no longer performing
+ quote removal on the pattern before trying to match it. This
+ fixes an incompatibility with ksh93 reported on comp.unix.shell
+
+nojobs.c
+ - add replacement function for siginterrupt on the off chance that a
+ system has posix signals but lacks siginterrrupt
+
+lib/readline/display.c
+ - fix from Tim Waugh at Red Hat to speed up inserting characters into
+ long lines in a UTF-8 environment by optimizing the calculation of
+ the first difference between old and new lines by checking to see
+ whether the old line is a subset of the new
+
+ 11/29
+ -----
+lib/malloc/stats.c
+ - break code that opens file (and interprets %p) into separate function
+ _imalloc_fopen(char *s, char *fn, char *def, char *defbuf, size_t defsiz)
+ for use by rest of library
+ - default stats file is now `stats.PID'
+
+lib/malloc/trace.c
+ - new function, malloc_set_tracefn (char *s, char *fn), sets tracing
+ to the file named by FN (with %p interpolated as the pid), using
+ some default if FN is NULL
+
+lib/malloc/shmalloc.h
+ - new extern declaration for malloc_set_tracefn
+
+ 12/4
+ ----
+execute_cmd.c
+ - combined several common strings from do_piping() into one
+ dup_error() function
+
+builtins/common.[ch]
+ - new function, `sh_notbuiltin(s)' prints error message about s not
+ being a shell builtin
+
+builtins/{builtin,enable}.def
+ - call sh_notbuiltin instead of using literal string
+
+{arrayfunc,expr,error}.c
+ - use one string variable for `bad array subscript' error message; use
+ in calls to various error reporting functions
+
+Makefile.in
+ - add variables for localedir and the PACKAGE_* variables, auto-set
+ by configure
+
+configure.in
+ - un-cache values for gettext, textdomain, and bindtextdomain if they're
+ not in libc but in libintl so the right variables get set
+
+bashintl.h
+ - add necessary defines for marking strings to be translated using
+ gettext
+
+locale.c
+ - set textdomain and directory in set_default_locale
+ - don't call textdomain with the value of $TEXTDOMAIN, since we don't
+ want to override the default domain ("bash")
+ - don't call bindtextdomain unless default_domain already has a value
+ - when translating $"..." strings, use dgettext with the script's
+ default domain (value of $TEXTDOMAIN)
+
+ 12/9
+ ----
+builtins/mkbuiltins.c
+ - include "bashintl.h" in the generated "builtins.c"
+
+support/{config.rpath,mkinstalldirs}
+ - new files to support gettext i18n
+
+ABOUT-NLS
+ - new readme file for gettext internationalization
+
+po/{Makefile.in.in,Rules-quot,boldquot.sed,en@boldquot.header,en@quot.header,insert-header.sin,quot.sed,remove-potcdate.sin}
+po/{POTFILES.in,bash.pot}
+ - new files for gettext
+
+lib/intl
+ - new directory, with libintl stuff from gettext
+
+aclocal.m4
+ - add m4 files from gettext distribution needed by libintl
+
+configure.in
+ - create po/Makefile.in and lib/intl/Makefile in AC_OUTPUT
+ - add call to AM_GNU_GETTEXT to initialize gettext stuff
+
+Makefile.in
+ - use mkinstalldirs instead of mkdirs in the `installdirs' target
+ - changes for intl/ and po/ subdirectories in build and install
+ - changes to have libintl linked in, as determined by configure
+ - changes to have libintl built, just in case it's used (though I'd
+ rather not)
+
+ 12/10
+ -----
+config.h.in
+ - additional #defines required by the libintl library
+ - add ENABLE_NLS define for AM_GNU_GETTEXT
+ - take out defines for HAVE_{BINDTEXTDOMAIN,GETTEXT,TEXTDOMAIN}
+
+configure.in
+ - removed old tests for libintl and gettext/textdomain/bindtextdomain
+
+locale.c
+ - remove HAVE_GETTEXT code; we have gettext unconditionally now
+
+bashintl.h
+ - change to include "gettext.h" and remove the conditional code based
+ on whether or not gettext is present
+
+ 12/16
+ -----
+lib/readline/vi_mode.c
+ - fix problem with rl_vi_eWord that caused it to skip over the last
+ character of a word if invoked while point was on the next-to-last
+ character
+
+ 12/18
+ -----
+{arrayfunc,bashhist,bashline,error,eval,execute_cmd,expr,general,input,jobs}.c
+{mailcheck,make_cmd,nojobs,pcomplete,pcomplib,print_cmd,redir,shell,sig}.c
+{subst,test,trap,variables,version,xmalloc}.c
+parse.y
+builtins/{common,evalfile,getopt}.c
+builtins/{bind,break,caller,cd,complete,declare,enable,exec,exit,fc,fg_bg}.def
+builtins/{hash,help,history,jobs,kill,printf,pushd,read,return,set,setattr}.def
+builtins/{shift,shopt,source,suspend,type,ulimit,umask}.def
+lib/sh/{fmtulong,netopen}.c
+ - include "bashintl.h" for gettext defines
+
+Makefile.in
+ - add `-DBUILDTOOL' to CFLAGS for buildversion.o
+
+bashintl.h
+ - if `BUILDTOOL' is defined, define ENABLE_NLS to 0 so we don't have
+ to compile and link in the gettext stuff
+
+Makefile.in,lib/sh/Makefile.in,builtins/Makefile.in
+ - update dependencies on bashintl.h and include/gettext.h
+
+ 12/19
+ -----
+{arrayfunc,bashhist,bashline,error,eval,execute_cmd,expr,general,input,jobs}.c
+{mailcheck,make_cmd,nojobs,pcomplete,pcomplib,print_cmd,redir,shell,sig}.c
+{subst,test,trap,variables,version,xmalloc}.c
+builtins/{common,evalfile,getopt}.c
+builtins/{bind,break,caller,cd,complete,declare,enable,exec,exit,fc,fg_bg}.def
+builtins/{hash,help,history,jobs,kill,let,printf,pushd,read,return,set}.def
+builtins/{setattr,shift,shopt,source,suspend,type,ulimit,umask}.def
+lib/sh/{fmtulong,netopen}.c
+lib/malloc/{malloc,stats,table,watch}.c
+ - mark up strings in source files for gettext processing
+
+lib/malloc/imalloc.h
+ - include "bashintl.h" if SHELL is defined, otherwise make _(x) an
+ identity define
+
+lib/malloc/Makefile.in
+ - add dependencies on ${topdir}/bashintl.h and ${BASHINCDIR}/gettext.h
+
+ 12/21
+ -----
+bashline.c
+ - make sure we index into rl_line_buffer with indexes > 0 in
+ attempt_shell_completion
+
+ 12/31
+ -----
+Makefile.in
+ - descend into `po' and run make recursively for the various clean
+ targets
+
+ 1/4
+ ---
+include/shmbutil.h
+ - two new macros: BACKUP_CHAR(str, strsize, i), which backs up one
+ multibyte character in STR starting at index I, and
+ BACKUP_CHAR_P(str, strsize, p), which backs up one multibyte
+ character in STR starting at P, which is a char *
+
+ 1/6
+ ---
+pcomplete.c
+ - in pcomp_filename_completion_function, use the quote character
+ readline found (and assigned to rl_complete_quote_character) when
+ dequoting the filename by a completion call from readline (when
+ rl_dispatching != 0)
+
+bashline.c
+ - ditto for bash_directory_completion_matches
+
+ 1/7
+ ---
+lib/readline/complete.c
+ - new variable, rl_completion_found_quote, set to non-zero value if
+ readline finds what it thinks is quoting in the word to be completed
+
+lib/readline/readline.h
+ - extern declaration for rl_completion_found_quote
+
+ 1/8
+ ---
+lib/readline/doc/rltech.texi
+ - documented rl_completion_found_quote
+
+lib/readline/complete.c
+ - in compute_lcd_of_matches, if it looks like what the user typed was
+ dequoted before generating filename matches, dequote the user's
+ text again before figuring out the case-insensitive lcd
+
+ 1/9
+ ---
+lib/readline/display.c
+ - fix from Edward Catmur <ed@catmur.co.uk> to logic that handles
+ invisible characters in prompt string. Original code was wrong
+ about local_prompt_prefix; it gave incorrect results when prompt
+ contained invisible characters after a line break
+
+ 1/10
+ ----
+subst.c
+ - new function, mb_substring(), does character (possibly multibyte)
+ oriented rather than strictly byte-oriented substring extraction.
+ The passed indices, rather than strictly indexing into the string,
+ indicate character positions that need to be calculated. From
+ Tim Waugh <twaugh@redhat.com>
+ - change parameter_brace_substring to use mb_substring if necessary
+
+included/shmbutil.h
+ - new define SADD_MBQCHAR_BODY, common code for adding a quoted
+ (preceded by CTLESC) multibyte character to an accumulating string
+ in the subst.c expansion code
+
+subst.c
+ - use SADD_MBQCHAR_BODY in expand_word_internal
+ - new static function, mb_getcharlens, allocates and returns an array
+ of character lengths for (possibly multibyte) characters in the
+ argument string
+ - change pattern matching operations to use while loops instead of
+ for loops to handle multibyte characters better (no more simple
+ increment or decrement)
+ - change pattern matching operations to use multibyte character
+ operations instead of simple increments and decrements. Don't
+ use BACKUP_CHAR_P -- use the mblen array instead, because that
+ avoids the N**2 behavior of having to count from the beginning
+ of the string each time you want to back up one character. Changes
+ to remove_pattern and match_pattern
+
+ 1/12
+ ----
+lib/readline/display.c
+ - make expand_prompt count multbyte characters in the prompt string
+ by using _rl_find_next_mbchar (and copying possibly more than one
+ byte) instead of a simple increment and single byte copy
+
+ 1/13
+ ----
+lib/readline/display.c
+ - expand_prompt takes a new reference argument -- it returns
+ the actual count of (possibly multibyte) characters displayed
+ on the screen
+ - don't short-circuit in expand_prompt unless we're not going to
+ be using any multibyte characters
+ - change calls to expand_prompt to pass an argument for the
+ number of physical characters the prompt occupies
+ (prompt_physical_chars)
+ - initialize `lpos' (the physical cursor position) from
+ prompt_physical_chars in rl_redisplay
+
+lib/readline/mbutil.c
+ - in _rl_find_prev_mbchar_internal, if mbrtowc returns -1 or -2, and
+ we assume that the character is a single-byte char, make sure we
+ update `prev' so it doesn't get lost. Fixes problems encountered
+ when a non-ascii char is the last char on the line and we're moving
+ back past it with ^B, and other display problems caused by the same
+ situation
+
+ 1/15
+ ----
+lib/readline/doc/rltech.texi
+ - document RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE in the
+ description of rl_expand_prompt()
+
+ 1/20
+ ----
+bashline.c
+ - in initialize_readline, make sure M-C-j and M-C-m are still bound to
+ vi-editing-mode before unbinding them -- they may have been rebound
+ in an inputrc
+
+variables.c
+ - in unbind_variable, unset attributes other than `local' and exported
+ (if the variable came from a temporary environment) when unsetting a
+ local variable inside a function
+
+ 1/21
+ ----
+configure.in
+ - add libintl build directory to the list of include directories if
+ it's being built (using INTL_BUILDDIR)
+
+Makefile.in,{builtins,lib/{sh,malloc}}/Makefile.in
+ - substitute LIBBUILD as ${BUILD_DIR}/${LIBSUBDIR}
+ - define INTL_BUILDDIR as ${LIBBUILD}/intl
+
+{builtins,lib/sh}/Makefile.in
+ - make sure INTL_INC is added to the list of include directories
+ - make sure INTL_LIBSRC is defined with the correct value
+
+{configure,Makefile,{builtins,lib/sh}/Makefile}.in
+ - substitute LIBINTL_H as ${INTL_BUILDDIR}/libintl.h
+
+Makefile.in,builtins/Makefile.iin
+ - all files depending on bashintl.h also depend on ${LIBINTL_H}
+ (which may be empty)
+
+Makefile.in
+ - make a rule telling how to build lib/intl/libintl.h if necessary
+
+ 1/24
+ ----
+builtins/read.def
+ - make sure that the array name supplied as an argument to -a is a
+ valid identifier
+
+parse.y
+ - make the \W expansion abbreviate $HOME with a ~ (seems to be more
+ useful)
+
+doc/{bash.1,bashref.texi}
+ - document new behavior of \W
+
+subst.c
+ - make sure parameter_brace_expand_rhs uses the first character of
+ $IFS when making the string to return from the expanded word
+ (which, in the case of "$@" or $@, contains multiple words that
+ need to be separated)
+
+ 1/25
+ ----
+builtins/common.c
+ - change get_job_spec to make `%' by itself or an empty argument
+ return NO_JOB
+
+jobs.h
+ - new possible value for a job spec return value: BAD_JOBSPEC
+ (for syntactically invalid specs, like the empty string)
+
+shell.c
+ - in open_shell_script, check to see whether or not we can find and
+ open the filename argument before setting dollar_vars[0] or
+ manipulating BASH_SOURCE, so the error messages come out better
+
+subst.c
+ - in string_list_internal, short-circuit right away to savestring()
+ if the list only has a single element
+
+ 1/28
+ ----
+lib/readline/rltypedefs.h
+ - new set of typedefs for functions returning char * with various
+ arguments (standard set)
+
+lib/readline/complete.c
+ - new function pointer, rl_completion_word_break_hook, called by
+ _rl_find_completion_word, used to set word break characters at
+ completion time, allowing them to be position-based
+
+lib/readline/doc/rltech.texi
+ - documented rl_completion_word_break_hook
+
+lib/readline/kill.c
+ - added new rl_unix_filename_rubout, which deletes one filename
+ component in a Unix pathname backward (delimiters are whitespace
+ and `/')
+
+lib/readline/readline.h
+ - extern declaration for rl_unix_filename_rubout
+
+lib/readline/funmap.c
+ - new bindable readline command `unix-filename-rubout'
+
+lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
+ - documented `unix-filename-rubout'
+
+ 1/29
+ ----
+lib/readline/histexpand.c
+ - change history_tokenize_internal to handle non-whitespace delimiter
+ characters by creating separate fields (like the shell does when
+ splitting on $IFS)
+
+ 1/30
+ ----
+lib/glob/xmbsrtowcs.c
+ - new function, xdupmbstowcs, for convenience: calls xmbsrtowcs
+ while allocating memory for the new wide character string
+ - some small efficiency improvments to xmbsrtowcs
+
+include/shmbutil.h
+ - extern declaration for xdupmbstowcs
+
+lib/glob/strmatch.h
+ - include config.h for definition of HANDLE_MULTIBYTE
+ - remove the HAVE_LIBC_FNM_EXTMATCH tests
+ - new extern declaration for wcsmatch(whchar_t *, wchar_t *, int)
+
+configure.in
+ - remove call to BASH_FUNC_FNMATCH_EXTMATCH; it's no longer used
+
+lib/glob/smatch.c
+ - simplify xstrmatch() by using xdupmbstowcs() instead of inline code
+
+lib/glob/glob.c
+ - modify mbskipname() to avoid the use of alloca
+ - simplify mbskipname() by using xdupmbstowcs() instead of inline code
+ - simplify glob_pattern_p() by using xdupmbstowcs() instead of
+ inline code
+ - fix memory leak in wdequote_pathname
+ - simplify wdequote_pathname() by using xdupmbstowcs() instead of
+ inline code
+
+lib/glob/strmatch.c
+ - new function, wcsmatch(), `exported' wide-character equivalent of
+ strmatch()
+
+subst.c
+ - old match_pattern is now match_upattern
+ - match_pattern now either calls match_upattern or converts
+ mbstrings to wide chars and calls match_wpattern
+ - match_upattern reverted to old non-multibyte code
+ - new function: match_pattern_wchar, wide character version of
+ match_pattern_char
+
+ 2/1
+ ---
+subst.c
+ - old remove_pattern is now remove_upattern
+ - remove_upattern reverted to old non-multibyte code (pre-Waugh patch)
+ - new multibyte version of remove_pattern: remove_wpattern
+ - remove_pattern now calls either remove_upattern or converts a
+ multibyte string to a wide character string and calls
+ remove_wpattern
+ - new function, wcsdup, wide-character version of strdup(3)
+
+ 2/4
+ ---
+print_cmd.c
+ - temporarily translate a >&filename redirection from
+ r_duplicating_output_word to r_err_and_out (as the expansion code
+ in redir.c does) so it prints without a leading `1' (file
+ descriptor)
+
+ 2/5
+ ---
+aclocal.m4
+ - add a check for wcsdup to BASH_CHECK_MULTIBYTE
+
+config.h.in
+ - add HAVE_WCSDUP define
+
+ 2/9
+ ---
+builtins/shift.def
+ - fix a call to sh_erange that possibly dereferences a NULL pointer
+
+ 2/12
+ ----
+general.c
+ - start at a general set of file property checking functions:
+ file_isdir(), file_iswdir() (is writable directory)
+
+general.h
+ - extern declarations for new functions
+
+lib/sh/tmpfile.c
+ - use file_iswdir() to make sure the temporary directory used for
+ here documents and other temp files is writable in get_sys_tmpdir()
+
+ 2/17
+ ----
+bashline.c
+ - fix conditional binding of emacs-mode M-~ -- there is a default
+ binding for it (rl_tilde_expand), so a straight call to
+ rl_bind_key_if_unbound_in_map doesn't do the right thing
+
+ 2/27
+ ----
+[bash-3.0-beta1 released]
+
+ 2/29
+ ----
+subst.c
+ - fixed expansion so referencing $a, when a is an array variable
+ without an element assigned to index 0, exits the shell when
+ `-u' is enabled
+
+expr.c
+ - make the exponentiation operator (**) associative, so things like
+ 2**3**4 work right (change `if' to `while')
+
+ 3/3
+ ---
+lib/sh/strftime.c
+ - SCO Unix 3.2, like Solaris, requires that the system's `timezone'
+ variable be declared as long
+
+lib/readline/{bind,histfile,input,parens}.c
+ - changes for Tandem (including `floss.h' (?))
+
+ 3/4
+ ---
+subst.c
+ - change param_expand to quote the entire expanded string instead
+ of just the escape characters if the expansion appears between
+ double quotes or in a here-document (for simple variable expansions
+ or expansions of positional parameters)
+
+ 3/8
+ ---
+subst.c
+ - analogous changes to parameter_brace_expand_word to fix the same
+ quoting problem as on 3/4; fix callers to understand that the
+ value returned might be quoted now and should be dequoted if
+ necessary
+ - add a `quoted' argument to get_var_and_type, change callers
+ - change today's fix and fix from 3/4 to not call quote_string if the
+ value is "" (because quote_string turns that into CTLNUL\0)
+
+ 3/9
+ ---
+builtins/cd.def
+ - resetpwd() now takes a `caller' argument so it can be used by pwd
+ as well as cd
+ - change pwd_builtin to call resetpwd() if sh_physpath() fails to
+ return a valid pathname
+
+ 3/14
+ ----
+expr.c
+ - reworked exp0 and readtok() to make post-increment and post-decrement
+ into real tokens, which may be separated from their accompanying
+ variables by whitesapce
+ - made analogous changes to readtok() to make pre-increment and
+ pre-decrement work when separated from their accompanying identifier
+ by whitespace
+
+ 3/18
+ ----
+lib/readline/misc.c
+ - in rl_maybe_unsave_line, don't force rl_replace_line to clear
+ the undo_list, since it might point directly at an undo list
+ from a history entry (to which we have no handle)
+
+ 3/19
+ ----
+lib/readline/display.c
+ - rl_save_prompt and rl_restore_prompt now save and restore the value
+ of prompt_physical_chars
+ - set prompt_physical_chars in rl_redisplay when expand_prompt has
+ not been called (e.g., when rl_display_prompt is set and is not
+ equal to rl_prompt, like when searching)
+
+lib/readline/histexpand.c
+ - don't call add_history in history_expand if the `:p' modifier is
+ supplied; leave that to the calling application. This means that
+ `history -p', for example, will not add anything to the history
+ list (as documented), nor will history expansions invoked by
+ emacs-mode M-C-e line editing
+
+config-bot.h
+ - check whether HAVE_DECL_SYS_SIGLIST is defined to 1 rather than just
+ defined, to work around newer versions of autoconf defining it to 0
+
+config.h.in
+ - change default status of HAVE_MALLOC to #undef instead of #define
+
+bashhist.c
+ - extern declarations for rl_done and rl_dispatching
+ - don't call re_edit from pre_process_line unless rl_dispatcing is zero,
+ so we don't call it from something like shell-expand-line
+ - change pre_process_line to add an expanded history specification
+ that returned `print only' to the history list, since history_expand
+ no longer does it (and, when using readline, do it only when
+ rl_dispatching is zero)
+
+ 3/22
+ ----
+config.h.in,aclocal.m4
+ - change bash-specific functions that look in struct dirent to define
+ HAVE_STRUCT_DIRENT_xxx, like AC_CHECK_MEMBERS does (though the
+ functions are otherwise the same)
+ - new function, BASH_STRUCT_DIRENT_D_NAMLEN, define
+ HAVE_STRUCT_DIRENT_D_NAMLEN if struct dirent has a `d_namlen' member
+
+configure.in
+ - call BASH_STRUCT_DIRENT_D_NAMLEN
+
+include/posixdir.h
+ - use new and renamed HAVE_STRUCT_DIRENT_D_xxx defines
+
+ 4/7
+ ---
+builtins/cd.def
+ - ensure that we print out a non-null pathname after getting a
+ directory from CDPATH and canonicalizing it (e.g., if the result
+ exceeds PATH_MAX in length and the_current_working_directory is
+ set to NULL)
+
+ 4/12
+ ----
+print_cmd.c
+ - new function to print out assignment statements when `set -x' has
+ been enabled: xtrace_print_assignment
+
+externs.h
+ - extern declaration for xtrace_print_assignment
+
+ 4/13
+ ----
+{subst,variables}.c
+ - call xtrace_print_assignment instead of using inline code
+
+jobs.c
+ - if turning on job control when it was previously off, set
+ pipeline_pgrp to 0 in set_job_control so make_child puts
+ subsequent children in their own process group
+
+ 4/14
+ ----
+general.c
+ - new function, legal_alias_name, called to decide whether an
+ argument to add_alias is a valid alias name -- essentially any
+ character except one which must be quoted to the shell parser
+ and `/'
+
+general.h
+ - new extern declaration for legal_alias_name
+
+builtins/alias.def
+ - `unalias' now returns failure status if no NAME arguments are
+ supplied and -a is not given
+ - call legal_alias_name to make sure alias name is valid before
+ calling add_alias from alias_builtin
+
+ 4/19
+ ----
+include/shmbutil.h
+ - include <config.h> for definition of HANDLE_MULTIBYTE rather than
+ duplicating logic
+
+ 4/20
+ ----
+
+doc/{bash.1,bashref.texi}
+ - make sure $0 is consistently referred to as a `special parameter'
+ - document which characters are now not allowed in alias names
+
+ 4/23
+ ----
+
+builtins/{jobs,kill,wait}.def
+ - removed requirement that job control be enabled to use job control
+ notation, as SUSv3 implies
+
+subst.c
+ - based on a message from David Korn, change param_expand to not call
+ string_list_dollar_star if the only quoting is Q_HERE_DOCUMENT --
+ quoted here documents are like double quoting, but not exactly
+ - analogous changes to list_remove_pattern and pos_params
+
+ 4/24
+ ----
+lib/readline/doc/rluser.texi
+ - fix error in description of emacs-mode C-xC-e command (uses $VISUAL
+ instead of $FCEDIT)
+
+ 4/28
+ ----
+support/bashbug.sh
+ - integrate a patch from Stefan Nordhausen
+ <nordhaus@informatik.hu-berlin.de> that reduces race conditions
+ by using a temporary directory inside $TMPDIR and creating the
+ temp files in that
+
+ 4/30
+ ----
+builtins/common.c
+ - use pathconf(".", _PC_PATH_MAX) where available to size the argument
+ to getcwd() rather than using a straight PATH_MAX
+
+builtins/cd.def
+ - if get_working_directory fails and returns null (causing resetpwd
+ to return NULL), use set_working_directory to set $PWD to the
+ absolute pathname for which chdir just succeeded
+
+ 5/1
+ ---
+lib/readline/vi_mode.c
+ - in rl_vi_change_to, call _rl_vi_set_last with rl_numeric_arg instead
+ of `last', since they're equal at call time and rl_vi_domove can
+ change rl_numeric_arg (which vi apparently updates). Fixes redo bug
+ of `c2....' reported by Marion Berryman <mwberryman@copper.net>
+
+ 5/4
+ ---
+parse.y
+ - fix decode_prompt_string to properly deal with strftime() returning 0
+
+ 5/6
+ ---
+variables.c
+ - in make_local_array_variable, return an already-existing local array
+ variable immediately rather than creating a new array (causing a
+ memory leak)
+
+ 5/8
+ ---
+lib/readline/vi_mode.c
+ - change rl_vi_domove to set rl_explicit_arg before calling
+ rl_digit_loop1 so that multi-digit numeric arguments work right
+ - _rl_vi_last_command is no longer static
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_vi_last_command
+
+lib/readline/text.c
+ - change rl_newline to only call _rl_vi_reset_last if the last command
+ (_rl_vi_last_command) is not a text modification command. This lets
+ the last-command and last-argument work across command lines
+
+ 5/13
+ ----
+builtins/common.c
+ - use getcwd(0,0) rather than providing a fixed pathname with a fixed
+ length (PATH_MAX) so getcwd() will allocate sufficient memory
+
+aclocal.m4
+ - change BASH_FUNC_GETCWD to check whether or not getcwd(0,0) will
+ allocate memory for the returned value -- nobody implements that
+ and getcwd-via-popen, so it should capture the old test as well
+
+ 5/27
+ ----
+
+builtins/trap.def
+ - the historical behavior of assuming that a signal's handling should
+ be set to its original disposition is only in effect if a single
+ argument is given, otherwise the first argument is assumed to be a
+ command to execute
+ - when in posix mode, if trap gets a single argument, display an
+ error message and return EX_USAGE
+ - change the help message and usage string to better explain trap's
+ behavior
+
+doc/{bash.1,bashref.texi}
+ - describe the new default behavior when the first argument is a
+ signal spec
+ - note that signal names are case insensitive and the SIG prefix is
+ optional in arguments to `trap'
+ - note that signal name arguments to `kill' are case-insensitive
+
+lib/readline/display.c
+ - make sure rl_on_new_line_with_prompt sets rl_display_prompt to
+ rl_prompt (just to make sure it's set)
+ - have rl_on_new_line_with_prompt use local_prompt if it's set
+
+ 6/2
+ ---
+subst.c
+ - in string_extract_double_quoted, cope with extract_delimited_string
+ returning NULL, as it can when attempting completion on an unclosed
+ command substitution
+
+ 6/24
+ ----
+lib/readline/complete.c
+ - change print_filename to add a `/' to listed directory names if
+ `mark-directories' has been enabled
+
+builtins/umask.def
+ - make sure that the mask passed to parse_symbolic_mode has all but
+ the operative low eight bits masked off, to avoid complementing
+ all 0s to -1, which is the error return code. This makes things
+ like `a=rwx' and `ugo=rwx' work and turn off the umask
+
+ 6/26
+ ----
+builtins/getopts.def
+ - when `getopts' reaches the end of options, unset OPTARG before
+ returning EOF. In response to a bug report from Apple
+
+configure.in
+ - when cross-compiling, don't set CPPFLAGS_FOR_BUILD and
+ LDFLAGS_FOR_BUILD from CPPFLAGS and LDFLAGS, respectively, since
+ those are for the target instead of the build platform (report
+ from robert@schwebel.de)
+
+shell.c
+ - a shell whose standard error (but not standard output) is directed
+ to a terminal should be interactive, according to POSIX/SUS. This
+ means that sh > sh.out will start an interactive shell. Bug report
+ from llattanzi@apple.com
+
+doc/{bash.1,bashref.texi}
+ - change mention of standard output to standard error in definition
+ of interactive shell
+
+lib/readline/vi_mode.c
+ - new convenience function, rl_vi_start_inserting, calls
+ _rl_vi_set_last to save the last textmod command state and then calls
+ rl_vi_insertion_mode to enter insert mode
+ - change functions to use rl_vi_start_inserting
+
+lib/readline/readline.h
+ - extern declaration for rl_vi_start_inserting
+
+bashline.c
+ - new function for vi-mode completion, bash_vi_complete. Does
+ filename expansion as POSIX specifies, unlike the default readline
+ bindings (which don't know about globbing). Bound to `\', `*',
+ and `=' in vi command keymap. Internals very similar to
+ rl_vi_complete; just calls bash glob expansion functions
+
+lib/readline/vi_mode.c
+ - change rl_vi_change_char so that an entire change is a single
+ undoable event, rather than each individual change in a [count]r
+ command
+ - fix rl_vi_change_char so that replacing characters up to EOL works
+ rather than generating rl_ding
+ - fix rl_vi_change_case so that replacing characters up to EOL works
+ rather than generating rl_ding
+
+ 6/28
+ ----
+builtins/echo.def
+ - call clearerr(stdout) before writing anything and testing its
+ failure or success
+
+ 6/29
+ ----
+bashline.c
+ - only set rl_explicit_arg in bash_glob_complete_word if readline is
+ in emacs mode; let bash_vi_complete take care of setting it in vi
+ mode
+ - fix bash_vi_complete to only set rl_explicit_arg unless the posix
+ conditions are met: no globbing characters in the vi `bigword'
+ being completed
+
+ 6/30
+ ----
+[bash-3.0-rc1 released]
+
+ 7/1
+ ---
+lib/readline/complete.c
+ - make sure `extension_char' is initialized before deciding whether
+ or not the append a `/' to a possible completion when visible-stats
+ is not enabled
+
+ 7/2
+ ---
+subst.c
+ - fix a boundary overrun in string_extract_double_quoted that could
+ occur when the word completion code attempts to expand an incomplete
+ construct (like a quoted unclosed command substitution)
+
+ 7/4
+ ---
+subst.c
+ - set tempenv_assign_error to non-zero if an assignment to the
+ temporary environment fails for some reason (e.g., attempted
+ assignment to a readonly variable)
+
+execute_cmd.c
+ - fix execute_simple_command to force a non-interactive shell in
+ POSIX mode to exit if an assignment to the temporary environment
+ preceding a special builtin fails (bug report from
+ llattanzi@apple.com)
+
+ 7/5
+ ---
+bashline.c
+ - in bash_directory_completion_hook, don't perform word expansions
+ if the filename appears to have been completed from the file
+ system rather than typed in by the user. Bug reported by Tim
+ Waugh <twaugh@redhat.com>
+
+ 7/7
+ ---
+lib/readline/misc.c
+ - if _rl_maybe_save_line is being asked to save a line other than
+ what's already saved, free up the current saved line and save the
+ current contents of rl_line_buffer. Bug reported by
+ llattanzi@apple.com
+
+ 7/12
+ ----
+lib/readline/input.c
+ - do better EOF detection in rl_gather_tyi -- if a read returns 0 when
+ the fd is in non-blocking mode, stuff an EOF into the input stream
+ (reported by mattias@virtutech.se)
+
+ 7/13
+ ----
+lib/readline/vi_mode.c
+ - make sure rl_vi_put honors `count' arguments and yanks things
+ multiple times if requested
+
+ 7/16
+ ----
+builtins/umask.def
+ - make sure that the `who' part of the umask symbolic mode argument
+ defaults to `a' if it's missing
+
+flags.c
+ - make sure that maybe_make_restricted only gets called after the
+ shell is initialized, so `bash -r' doesn't result in inappropriate
+ error messages
+
+[bash-3.0 frozen]
+
+ 7/27
+ ----
+doc/Makefile.in
+ - small fixes
+
+[bash-3.0-released]
+
+ 7/28
+ ----
+array.c
+ - in array_insert(), make sure the value to be added is non-NULL before
+ calling savestring() on it
+
+builtins/reserved.def
+ - fix description of `CDPATH'
+
+lib/readline/display.c
+ - when expanding a prompt that spans multiple lines with embedded
+ newlines, set prompt_physical_chars from the portion after the
+ final newline, not the preceding portion. Bug reported by
+ "Ralf S. Engelschall" <rse@engelschall.com>
+
+make_cmd.c
+ - explicitly declare `lineno' in function prologue for make_case_command
+
+builtins/evalfile.c
+ - include `trap.h' for declaration for run_return_trap
+
+bashline.c
+ - fix a `return' without a value in enable_hostname_completion
+
+general.c
+ - include test.h for extern declaration for test_eaccess
+
+externs.h
+ - add declaration for zcatfd
+
+tests/{history,histexp}.tests
+ - unset HISTFILESIZE to avoid problems if a value of 0 is inherited
+ from the environment
+
+ 7/30
+ ----
+bashline.c
+ - small changes to glob_expand_word to perform tilde expansion before
+ attempting globbing
+
+builtins/Makefile.in
+ - fix the install-help target to not cd into the `helpfiles'
+ subdirectory, so a value of $INSTALL_DATA containing a relative
+ pathname (e.g., .././support/install.sh) remains valid
+
+ 7/31
+ ----
+subst.c
+ - new function, mbstrlen(s), returns length of a multibyte character
+ string
+
+include/shmbutil.h
+ - new macro, MB_STRLEN(s), calls mbstrlen or STRLEN as appropriate
+
+builtins/trap.def
+ - small change so that a first argument that's a valid signal number
+ (digits only -- no symbolic names) will be treated as a signal and
+ reverted back to the original handling disposition. Fixes debian
+ complaints
+
+subst.c
+ - call MB_STRLEN instead of STRLEN where appropriate in
+ parameter_brace_expand_length to handle multibyte characters properly
+ - call MB_STRLEN instead of strlen in verify_substring_values so that
+ negative substrings of strings with multibyte chars work properly
+
+ 8/1
+ ---
+jobs.c
+ - describe_pid needs to write to stderr, not stdout (POSIX)
+ - start_job, since it's only used by builtins (fg/bg), needs to write
+ its output to stdout, not stderr (POSIX)
+
+sig.c
+ - add an `orig_flags' member to struct terminating_signal so the
+ original signal handling flags (SA_RESTART, etc.) can be preserved
+ on POSIX systems
+ - make sure to preserve the signal flags state in
+ initialize_terminating_signals and reset them for child processes
+ in reset_terminating_signals
+
+builtins/fc.def
+ - fixed an off-by-one error that caused `fc -l' to list one too many
+ history entries
+ - in posix mode, `fc' should not list any indication as to whether or
+ not history lines have been modified (POSIX)
+ - when in posix mode, the default editor for `fc' should be `ed' (POSIX)
+
+doc/bashref.texi
+ - updated the description of `trap' behavior when given a first
+ argument that is a valid signal number
+ - noted that `fc -l' won't indicate whether a history entry has been
+ modified if the shell is in posix mode
+
+builtins/command.def
+ - fixed bug: `command -v' is supposed to be silent if a command is not
+ found
+
+builtins/hash.def
+ - `hash' should print its `hash table empty' message to stderr
+
+lib/readline/misc.c
+ - back out 7/7 change to _rl_maybe_save_line; it breaks emacs-mode ^P
+
+general.c
+ - changed base_pathname so that it will return reasonable results for
+ non-absolute pathnames -- this is what is intended by all of its
+ callers
+
+arrayfunc.c
+ - fix array_variable_part to return NULL if it finds an invisible
+ variable in the hash table. Fixes seg fault caused by referring to
+ unset local variable using array notation
+
+{locale,variables}.c
+ - support LC_TIME as a special locale variable so HISTTIMEFORMAT tracks
+ the current locale
+
+ 8/2
+ ---
+variables.c
+ - fixed small memory leak in makunbound() when a local array variable
+ is unset. Fix from William Park
+
+lib/readline/display.c
+ - fixed a problem when computing the number of invisible characters on
+ the first line of a prompt whose length exceeds the screen width
+ (should only happen when invisible characters occur after the
+ line wrap). Bug reported by agriffis@gentoo.org
+
+builtins/command.def
+ - `command -V' passes a new flag, CDESC_ABSPATH, which means to convert
+ to an absolute path
+
+builtins/type.def
+ - in posix mode, `type' and `command -v/-V' should not report
+ non-executable files, even if the execution code will attempt to
+ run them. Other posix shells do this
+
+doc/bashref.texi
+ - add note to POSIX Mode section describing behavior of type and command
+ when finding a non-executable file
+
+execute_cmd.c
+ - force extended_glob to 1 before calling binary_test in
+ execute_cond_node so that the right extended pattern matching gets
+ performed
+
+ 8/3
+ ---
+braces.c
+ - make sure lhs[0] and rhs[0] are cast to `unsigned char' so chars
+ with values > 128 are handled correctly
+
+builtins/printf.def
+ - change bexpand() and printstr() to handle strings with a leading
+ '\0' whose length is non-zero, since that's valid input for the
+ `%b' format specifier
+
+subst.c
+ - fix a couple of instances of find_variable that didn't check the
+ result for an invisible variable
+
+variables.c
+ - BASH_ARGC, BASH_ARGV, BASH_SOURCE, BASH_LINENO no longer created as
+ invisible vars
+
+pcomplete.c
+ - make sure COMP_WORDS is not invisible when bind_comp_words returns
+ - ditto for COMPREPLY in gen_shell_function_matches
+
+ 8/4
+ ---
+braces.c
+ - fix problem where ${ was ignored but did not increment the open
+ brace count. Bug reported by Tim Waugh <twaugh@redhat.com>
+
+variables.c
+ - if make_local_variable finds a variable in the correct context in
+ the right variable scope, make sure it's not invisible before
+ returning it
+
+ 8/5
+ ---
+builtins/trap.def
+ - fixed usage message to show `action' as not optional, though it
+ actually is when not in posix mode (for a single argument)
+
+ 8/7
+ ---
+configure.in
+ - kfreebsd-gnu has had its sbrk() problems fixed, and no longer needs
+ to be configured --without-gnu-malloc
+
+lib/readline/vi_mode.c
+ - in rl_vi_search, free any saved history line before starting the
+ search, so failure leaves you at that line, not the last line in
+ the history (assuming the current line is not the last history line).
+ Fix from llattanzi@apple.com to replace fix of 7/7
+
+ 8/9
+ ---
+support/Makefile.in
+ - renamed `mostly-clean' target to `mostlyclean'
+
+ 8/11
+ ----
+lib/readline/vi_mode.c
+ - make same change for EOL in multibyte character case of
+ rl_vi_change_char
+
+ 8/12
+ ----
+subst.c
+ - in verify_substring_values, fix off-by-one error checking bounds of
+ `offset', esp. in array values (e.g., getting the highest element
+ of an array)
+
+ 8/16
+ ----
+aclocal.m4
+ - change BASH_CHECK_DEV_FD to make sure that file descriptors > 2 are
+ accessible via /dev/fd, unlike FreeBSD 5.x
+
+lib/sh/strftime.c
+ - make sure `zone' is initialized with gettimeofday before it is used
+ - work around HPUX lack of `altzone' and differing definitions of
+ `timezone'
+
+lib/malloc/malloc.c
+ - internal_memalign and memalign now take a `size_t' as their first
+ argument, which seems to be the prevailing standard
+
+lib/malloc/{malloc.c,shmalloc.h}
+ - change sh_memalign to take a `size_t' as its first argument
+
+builtins/echo.def
+ - if posixly_correct and xpg_echo are both set, don't try to interpret
+ any arguments at all, as POSIX/XOPEN requires (fix inspired by Paul
+ Eggert)
+
+doc/bashref.texi
+ - amend description of bash posix mode to include new echo behavior
+
+builtins/fg_bg.def
+ - allow bg to take multiple job arguments, as posix seems to specify,
+ placing them all in the background, returning the status of the last
+ one as the status of `bg'
+
+lib/readline/vi_mode
+ - fix _rl_vi_change_mbchar_case (multibyte-char version of `~'
+ command) to have the right behavior at EOL -- handle case where vi
+ mode backs up at the end of the line
+
+ 8/18
+ ----
+array.c
+ - check for an empty array in array_rshift before shifting elements
+ and adjusting max_index
+ - check for null array in array_subrange
+
+jobs.c
+ - fix raw_job_exit_status to not ignore exit status of the last
+ process in the pipeline when `set -o pipefail' is enabled
+
+ 8/19
+ ----
+lib/readline/mbutil.c
+ - make sure _rl_find_next_mbchar_internal has a valid multibyte
+ character before it checks whether or not it's a zero-width
+ wide character and adjusts point accordingly
+
+ 8/24
+ ----
+bashline.c
+ - new function, bash_directory_expansion, duplicates the expansions
+ performed on the directory name by rl_filename_completion_function
+ - call bash_directory_expansion in command_word_completion_function
+ if we decide we're doing tilde expansion (and any other
+ canonicalization) on the directory name being completed
+
+ 8/25
+ ----
+configure.in
+ - use new-style AC_CHECK_HEADER to check for sys/ptem.h (which requires
+ sys/stream.h). The correct checks are in the code, but autoconf
+ complains if sys/stream.h is not included, rather than simply
+ checking for the header's presence
+
+ 8/26
+ ----
+builtins/hash.def
+ - fix a bug that prevented `hash -d' from working right (as soon as
+ hash removed a command from the table, the bug caused it to be added
+ right back)
+
+ 8/27
+ ----
+doc/{bash.1,bashref.texi}
+ - explicitly note that conditional primaries that operate on files
+ operate on the targets of symbolic links rather than the links
+ themselves
+
+ 8/30
+ ----
+lib/readline/display.c
+ - fix multibyte calculation of `physchars' in prompt expansion, to
+ handle double-width multibyte characters correctly
+ - changes to rl_redisplay to handle prompts longer than the screenwidth
+ that might contain double-width multibyte characters. Fixes from
+ Tomohiro Kubota
+
+ 9/6
+ ---
+subst.c
+ - change word_list_split to avoid really bad behavior caused by calling
+ list_append for each split word -- as the list gets long, you have
+ to traverse it every time. Keep a pointer to the end of the list and
+ and just tack onto it
+
+ 9/8
+ ---
+lib/readline/complete.c
+ - change fnprint to calculate the displayed width of a filename in
+ the same way as fnwidth
+
+subst.c
+ - in verify_substring_values, when expanding ${array[@]:offset}, make
+ sure negative offsets count from one greater than the array's
+ maximum index so things like ${x[@}: -1} work to give the last element
+ (requires fixing array tests)
+
+builtins/common.c
+ - new error function, sh_wrerror(), for builtins to call when a write
+ error occurs
+
+builtins/common.h
+ - extern declaration for sh_wrerror()
+
+builtins/cd.def
+ - change builtin_error call to use sh_wrerror()
+
+builtins/echo.def
+ - report write errors with sh_wrerror() instead of just returning
+ failure
+
+builtins/printf.def
+ - change printstr to return failure (-1) or success (0) indication
+ rather than void
+ - report write errors when printstr() fails, return failure
+ - if any of the PF/printf calls fail, report write error and return
+ failure
+
+execute_cmd.c
+ - change execute_in_subshell so the subshell command inherits the
+ command timing flags from the enclosing COMMAND *
+
+ 9/11
+ ----
+[prayers for the victims of 9/11/2001]
+
+lib/sh/strnlen.c
+ - new file, implementation of GNU libc extension function strnlen
+
+lib/sh/Makefile.in, {config.h,configure,Makefile}.in, MANIFEST
+ - changes for strnlen
+
+configure.in
+ - version changed to 3.1-devel
+
+doc/bash.1, lib/readline/doc/rluser.texi
+ - added description of `-o plusdirs' to complete/compgen (thanks,
+ Arnold)
+
+parse.y
+ - new parser_state flag, PST_ASSIGNOK, if set indicates we're parsing
+ arguments to a builtin that accepts assignment statement arguments
+ - turn on PST_ASSIGNOK in read_token_word when appropriate
+ - turn off PST_ASSIGNOK in read_token when appropriate
+ - don't attempt to parse a compound assignment specially unless we're
+ in a position where an assignment statement is acceptable, or
+ PST_ASSIGNOK is set
+
+ 9/13
+ ----
+variables.c
+ - make BASH_ARGC, BASH_ARGV, BASH_LINENO, and BASH_SOURCE
+ non-unsettable, since the shell uses those values internally
+
+expr.c
+ - make exponentiation right-associative, as is apparently correct
+
+ 9/16
+ ----
+arrayfunc.c
+ - make sure convert_var_to_array marks the environment as needing
+ recreation if the converted variable was exported
+
+ 9/17
+ ----
+braces.c
+ - mark ${ as introducing an additional level of braces only if it's
+ not in a quoted string -- quoted strings are handled before brace
+ matching is done
+
+parse.y
+ - fixed an obscure problem in history_delimiting_chars where the `in'
+ in a case statement could have a semicolon added after it, if the
+ `case word' was on a previous line
+
+support/config.guess
+ - support for newest versions of tandem non-stop kernel
+
+lib/readline/display.c
+ - in compute_lcd_of_matches, explicitly cast `text' to `char *' before
+ passing it to rl_filename_dequoting_function
+
+lib/readline/terminal.c
+ - bind the key sequence sent by the keypad `delete' key to delete-char
+ (same as ^D in emacs mode)
+
+builtins/ulimit.def
+ - in print_all_limits, don't print anything if get_limit returns
+ -1/EINVAL, indicating that the kernel doesn't support that particular
+ limit
+ - add -i (max number of pending signals), -q (max size of posix msg
+ queues), -x (max number of file locks) for systems (Linux) that
+ support them
+
+doc/{bash.1,bashref.texi}
+ - fix description of correspondence between FUNCNAME, BASH_LINENO,
+ and BASH_SOURCE indices in description of BASH_LINENO
+
+ 9/18
+ ----
+lib/sh/shquote.c
+ - don't quote CTLESC and CTLNUL with CTLESC in sh_backslash_quote, as
+ long as the resultant string never gets sent to the word expansion
+ functions without going through the shell parser
+
+externs.h
+ - add extern declarations for strnlen and strpbkrk from lib/sh
+
+subst.[ch]
+ - changes to handle case where IFS consists of multibyte characters.
+ Changed: string_extract_verbatim, split_at_delims,
+ string_list_dollar_star, string_list_dollar_at, list_string,
+ get_word_from_string, setifs
+
+ 9/19
+ ----
+mailcheck.c
+ - change file_mod_date_changed to reset the cached mail file data if
+ the file size drops to zero
+
+lib/readline/complete.c
+ - change append_to_match so that a non-zero value for
+ rl_completion_suppress_append will cause no `/' to be appended to a
+ directory name
+
+bashline.c
+ - experimental change to suppress appending a slash for a completed
+ filename that is found in PATH as well as a directory in the current
+ directory under certain circumstances: a single instance found in
+ $PATH when `.' is not in $PATH, and multiple instances found in the
+ $PATH, even when `.' is in the $PATH
+
+ 9/24
+ ----
+command.h
+ - new word flag: W_ASSIGNRHS, means word is rhs of assignment statement
+ - new word flag: W_NOTILDE, means word is not to be tilde expanded
+ - new word flag (internal): W_ITILDE, means the next character is a
+ tilde that should be expanded
+
+general.c
+ - new set of tilde suffixes for use when parsing the RHS of an
+ assignment statement and =~ should not be subject to tilde expansion
+ - if ASSIGN_P argument to bash_tilde_expand is 2, use tilde prefixes
+ for parsing RHS of assignment statement
+
+general.[ch]
+ - new function bash_tilde_find_word, drop-in replacement for
+ tilde_find_word
+
+subst.c
+ - call bash_tilde_expand with secord argument of 2 when expanding rhs
+ of an assignment statement, so tildes after second and subsequent
+ `=' in an assignment are not expanded
+ - new function, expand_string_assignment, to expand the rhs of an
+ assignment statement
+ - add `~' to EXP_CHAR, the characters that will cause the word
+ expansion functions to be called
+ - move tilde expansion into expand_word_internal instead of many
+ different calls to bash_tilde_expand scattered across different
+ functions. NOTE: This means that double quotes surrounding a
+ {paramOPword} expansion will cause tilde expansion to NOT be
+ performed on `word'. I think this is right, what POSIX specifies,
+ and consistent with the behavior of other characters in the rhs
+
+execute_cmd.c
+ - take out calls to bash_tilde_expand before calling word expansion
+ functions
+
+ 9/26
+ ----
+execute_cmd.c
+ - make sure to call UNBLOCK_CHILD before returning on a pipe creation
+ failure in execute_pipeline
+
+ 9/27
+ ----
+variables.c
+ - change get_bash_command to deal with the_printed_command_except_trap
+ being NULL
+
+execute_cmd.c
+ - fix execute_simple_command to deal with the_printed_command being
+ NULL when assigning to the_printed_command_except_trap -- fixes
+ seg fault in savestring()
+
+parse.y
+ - change the parser so that the closing `)' in a compound variable
+ assignment delimits a token -- ksh93 does it this way
+
+doc/{bash.1,bashref.texi}
+ - change description of tilde expansion to note that expansion is
+ attempted only after the first =~ in an assignment statement
+
+builtins/declare.def
+ - when assigning to an array variable with declare -a x=(...), make
+ sure the last character in the rhs of the variable assignment is
+ `)', not just that it appears somewhere
+
+ 9/28
+ ----
+command.h
+ - add a `W_NOEXPAND' flag to inhibit all expansion except quote removal
+ - add a `W_COMPASSIGN' flag to denote a word is a compound assignment
+ statement
+
+parse.y
+ - set W_COMPASSIGN on words that appear to be compound assignments
+
+subst.c
+ - pass W_NOXPAND and W_COMPASSIGN through end of expand_word_internal
+
+subst.[ch]
+ - new function, expand_assignment_string_to_string, calls
+ expand_string_assignment and then string_list on the result
+
+variables.c
+ - assign_in_env now calls expand_assignment_string_to_string
+
+ 9/30
+ ----
+builtins/common.c
+ - change get_job_spec so the null job `%' once again means the current
+ job
+
+ 10/1
+ ----
+subst.c
+ - do_assignment_internal now takes a WORD_DESC * as its first
+ argument, and uses its `word' member as the assignment string
+ - change expand_word_list_internal to call do_word_assignment instead
+ of do_assignment, passing it `word' instead of, e.g., `word->word'
+ - change extract_array_assignment_list to just return the passed
+ string minus a trailing `)' if the last character is a right
+ paren
+ - change do_assignment_internal to call extract_array_assignment_list
+
+subst.[ch]
+ - change do_assignment and do_assignment_no_expand to take a `char *'
+ instead of `const char *' first argument; change extern prototypes
+ - new function, do_word_assignment, takes a WORD_DESC * and calls
+ do_assignment_internal on it; add extern declaration with prototype
+
+general.h
+ - new typedef, sh_wassign_func_t, like sh_assign_func_t but takes a
+ WORD_DESC * as its first argument
+
+variables.[ch]
+ - assign_in_env now takes a WORD_DESC * as its first argument
+
+ 10/2
+ ----
+command.h
+ - new word flag, W_ASSNBLTIN, denotes that the word is a builtin
+ command (in a command position) that takes assignment statements
+ as arguments, like `declare'
+ - new word flags, W_ASSIGNARG, denotes that word is an assignment
+ statement given as argument to assignment builtin
+
+execute_cmd.c
+ - set W_ASSNBLTIN flag in fix_assignment_words if necessary (if there
+ are any arguments that are assignment statements)
+ - set W_ASSIGNARG flag in fix_assignment_words if necessary
+
+subst.c
+ - new function, do_compound_assignment, encapsulates the necessary
+ code to perform a compound array assignment (including creation of
+ local variables); called from do_assignment_internal
+ - to fix the double-expansion problem with compound array assignments
+ that are arguments to builtins like `declare', changed
+ shell_expand_word_list to treat those arguments like assignment
+ statements (with proper creation of local variables inside shell
+ functions) and pass the attribute-setting portion of the statement
+ onto the builtin. This is what ksh93 appears to do, from inspection
+ of the `ksh93 -x' output
+
+execute_cmd.c
+ - fix execute_simple_command: in case of pipeline or async command,
+ when forking early, set `subshell_environment' so that it can contain
+ both SUBSHELL_PIPE and SUBSHELL_ASYNC -- the two should not be
+ mutually exclusive. Fixes bug reported by pierre.humblet@ieee.org
+ - remove references to last_pid, old_command_subst_pid; use NO_PID as
+ a sentinel value to decide whether or not a child process has been
+ created and needs to be waited for. Submitted by
+ pierre.humblet@ieee.org to fix recycling-pid problem on cygwin
+
+doc/{bash.1,bashref.texi}
+ - fixed documentation of `@(pattern)' extended globbing operator --
+ it succeeds if the string matches one of the patterns, not exactly
+ one. This is what ksh93 does, too
+
+lib/readline/complete.c
+ - fixed rl_menu_complete so that a negative argument cycles backwards
+ through the list
+
+ 10/3
+ ----
+subst.c
+ - use W_COMPASSIGN flag in do_assignment_internal instead of deciding
+ lexically which assignments are compound array assignments
+
+ 10/6
+ ----
+support/shobj-conf
+ - additions for System V.5 from Boyd Gerber <gerberb@zenez.com>
+
+subst.c
+ - in command_substitute, if subshell_environment includes
+ SUBSHELL_ASYNC, call make_child with the `async_p' argument set to
+ non-zero. This keeps command substitutions for async commands or
+ pipelines from trying to give the terminal back to the shell's
+ pgrp. make sure to save and restore last_asynchronous_pid. Fix
+ suggested by <pierre.humblet@ieee.org>
+
+ 10/7
+ ----
+config.h.in
+ - add a placeholder definition for WCONTINUED_BROKEN
+
+ 10/9
+ ----
+aclocal.m4
+ - add BASH_CHECK_WCONTINUED, checks for glibc bug where WCONTINUED is
+ defined but rejected as invalid by waitpid(2)
+
+configure.in
+ - add call to BASH_CHECK_WCONTINUED, defines WCONTINUED_BROKEN
+
+redir.c
+ - experimental change to add_undo_redirect to save manipulations to
+ file descriptors >= SHELL_FD_BASE (10) on the list of redirections
+ to be undone even if `exec' causes the list to be discarded
+
+doc/{bash.1,bashref.texi}
+ - note that redirections using file descriptors > 9 should be used
+ carefully, because they might conflict with file descriptors the
+ shell uses internally
+
+ 10/11
+ -----
+parse.y
+ - fix pipeline_command production to handle case where `pipeline'
+ as `argument' of `!' or `time' is null (e.g., a syntax error not
+ handled by the grammar)
+
+ 10/13
+ -----
+lib/readline/readline.c
+ - new internal variable, _rl_bind_stty_chars; if non-zero, bind the
+ terminal special characters to readline equivalents at startup
+ - change readline_default_bindings() and reset_default_bindings() to
+ understand _rl_bind_stty_chars
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_bind_stty_chars
+
+lib/readline/rltty.c
+ - change rl_prep_terminal to add support for _rl_bind_stty_chars
+
+ 10/15
+ -----
+lib/readline/bind.c
+ - new bindable variable, `bind-tty-special-chars', bound to value of
+ _rl_bind_stty_chars
+
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+ - documented new readline variable `bind-tty-special-chars'
+
+builtins/pushd.def
+ - make the first check for option `--' skip the rest of option
+ checking
+
+ 10/16
+ -----
+lib/readline/shell.c
+ - change sh_set_lines_and_columns to prefer setenv, which has
+ predictable memory allocation behavior, to putenv, which does not
+
+ 10/19
+ -----
+variables.c
+ - change push_exported_var so that a tempenv variable has to have the
+ export attribute set (which they all do -- something to look at) and
+ the `propagate' attribute set to be propagated down to the next
+ scope
+
+execute_cmd.c
+ - change execute_builtin so that if CMD_COMMAND_BUILTIN is set in the
+ passed flags argument, call pop_scope with a value that says the
+ builtin is not special, since `command' means that preceding variable
+ assignments don't persist in the environment. Fixes problem with
+ variable assignments preceding command preceding special builtin
+ keeping those variable assignments around (when in posix mode)
+
+ 10/20
+ -----
+lib/sh/shquote.c
+ - new function, sh_mkdoublequoted, brackets a given string with
+ double quotes and returns a new string. Flags argument, if non-
+ zero, means to quote embedded double quotes with backslashes
+
+externs.h
+ - new extern declaration for sh_mkdoublequoted
+
+parse.y
+ - use sh_mkdoublequoted after calling localeexpand()
+
+lib/sh/strtrans.c
+ - change ansicstr to understand that (flags & 4) != 0 means to remove
+ backslash from unrecognized escape sequences
+
+general.c
+ - fix logic problem in assignment() that caused non-variable-starter
+ characters to be allowed, resulting in things like `1=xxx' creating
+ a variable `1' in the hash table
+
+ 10/21
+ -----
+bashline.c
+ - don't call programmable_completions with an assignment statement
+ argument
+
+ 10/22
+ -----
+lib/readline/rltty.c
+ - in prepare_terminal_settings, turn echoing on (readline_echoing_p)
+ if get_tty_settings fails because the input is not a terminal
+
+ 10/24
+ -----
+lib/readline/util.c
+ - include rlmbutil.h for multibyte definitions
+ - new function, _rl_walphabetic, wide char version of rl_alphabetic
+
+lib/readline/mbutil.c
+ - new function, _rl_char_value(buf, ind), returns value of (possibly
+ multibyte) character at buf[ind]
+
+lib/readline/rlmbutil.h
+ - extern defines for _rl_walphabetic and _rl_char_value for when
+ multibyte chars are not being used
+ - new wrapper definitions for _rl_find_next_mbchar (MB_NEXTCHAR) and
+ _rl_find_prev_mbchar (MB_PREVCHAR) that try to avoid unneeded
+ function calls
+
+lib/readline/text.c
+ - fix rl_foward_word to work with multibyte characters (or in a
+ multibyte locale) using above utility functions
+ - fix rl_backward_word to work with multibyte characters (or in a
+ multibyte locale) using above utility functions
+
+ 10/26
+ -----
+parse.y
+ - fix parse_matched_pair so that it doesn't swallow \<newline> when
+ parsing a $'...' construct (call shell_getc with different arg)
+
+ 10/28
+ -----
+lib/glob/glob.c
+ - after some (compiled-in) threshold, glob_vector will stop using
+ alloca to allocate `struct globval's and will switch to using
+ malloc, with appropriate cleanup before returning
+
+subst.c
+ - don't expand tildes after `=' in expand_word_internal, even if the
+ W_TILDEEXP flag is set, unless it's the first tilde in a word
+ marked W_ASSIGNMENT
+
+ 10/31
+ -----
+lib/readline/text.c
+ - make sure rl_point doesn't go below 0 in rl_delete_horizontal_space
+ (from SUSE, but not sent in)
+
+shell.c
+ - make sure shell_is_restricted skips over a single leading `-' in
+ the shell name (from SUSE, but not sent in)
+
+lib/readline/display.c
+ - disable `fast redisplay' at the end of the line if in a locale that
+ supports multibyte characters (from SUSE, but not sent in)
+
+lib/readline/histexpand.c
+ - fix a problem with finding the delimiter of a `?' substring when
+ compiled for multibyte characters (from SUSE, but not sent in)
+
+ 11/1
+ ----
+lib/readline/display.c
+ - correct some assignments to _rl_last_c_pos: when in a multibyte
+ locale, it's used as an absolute cursor position; when not using
+ multibyte characters, it's a buffer offset. I should have caught
+ this when the multibyte character support was donated
+
+ 11/5
+ ----
+general.c
+ - change `assignment()' to accept `+=' assignment operator
+
+arrayfunc.[ch]
+ - bind_array_variable and assign_array_element both take a new `flags'
+ argument
+ - assign_array_var_from_string, assign_array_from_string, and
+ assign_array_var_from_word_list now all take a new `flags' argument
+ - change assign_array_var_from_word_list to understand how to append
+ to an array variable
+ - change assign_array_var_from_string to understand how to append
+ to an array variable. It does not unset the previous value if
+ appending, allowing both old values to be changed and new ones to
+ be added
+
+subst.h
+ - new flag #defines to use for evaluating assignment statements
+
+{subst,variables}.c, builtins/{declare,read}.def
+ - change callers of assign_array_element and bind_array_variable
+ - change do_compound_assignment to understand assignment flags
+ - change do_assignment_internal to set assignment flags and pass them
+ to underlying functions
+
+pcomplete.c,builtins/{declare,read}.def
+ - fix callers of assign_array_var_from_string, assign_array_var_from_word_list
+
+variables.[ch]
+ - make_variable_value now takes a new `flags' argument
+ - make_variable_value now understands how to append to a particular
+ variable, using the old value
+ - bind_variable_value now takes a new `flags' argument
+ - change make_variable_value to understand ASS_APPEND flag
+ - bind_variable now takes a new `flags' argument
+ - bind_variable_internal now takes a new `flags' argument
+
+arrayfunc.c
+ - change callers of make_variable_value to add flags arg
+
+builtins/declare.def
+ - change callers of bind_variable_value to add flags arg
+
+{execute_cmd,mailcheck,pcomplete,shell,subst,variables}.c,parse.y
+builtins/{cd,command,declare,getopts,read,set,setattr}.def
+ - change callers of bind_variable to add flags arg
+
+variables.c
+ - change callers of bind_variable_internal
+ - change bind_variable_internal to pass assignment flags on to
+ make_variable_value
+ - change assign_in_env to treat `var+=value' like `var=value'
+
+arrayfunc.c
+ - break code that actually constructs the new value and assigns it
+ to a particular array index out into a new functions:
+ bind_array_var_internal. This fakes out make_variable_value by
+ passing a dummy SHELL_VAR * so it can do proper appending and other
+ += processing
+ - changes to assign_array_var_from_string to accept and process as if
+ they were `standalone' assignment statements array assignment words
+ of the form [ind]+=val
+
+ 11/7
+ ----
+builtins/declare.def
+ - added support for `declare [flags] var+=value'. `Flags' are applied
+ before the assignment is performed, which has implications for things
+ like `-i' -- if -i is supplied, arithmetic evaluation and increment
+ will be performed
+
+builtins/setattr.def
+ - add support for `+=' assignment for rest of `assignment builtins':
+ export, readonly
+
+ 11/12
+ -----
+lib/readline/display.c
+ - make sure prompt_physical_chars and prompt_invis_chars_first_line
+ are reset to 0 if the prompt string passed to rl_expand_prompt is
+ NULL or empty
+
+ 11/14
+ -----
+{configure,config.h}.in
+ - check for `raise', define HAVE_RAISE if available
+
+lib/intl/dcigettext.c
+ - make sure `raise' is defined if HAVE_RAISE is not before
+ eval-plurah.h is included
+
+lib/malloc/trace.c
+ - put extern declaration for imalloc_fopen inside the MALLOC_TRACE
+ #ifdef
+
+ 11/16
+ -----
+lib/intl/Makefile.in
+ - make sure SHELL is defined to cpp
+
+lib/intl/dcigettext.c
+ - make sure we use getcwd() even if HAVE_GETCWD is not defined after
+ including config.h; if SHELL is defined, #define HAVE_GETCWD
+
+ 11/18
+ -----
+trap.[ch]
+ - new function, int signal_in_progress(int sig), returns TRUE if the
+ trap handler for signal SIG is currently executing
+
+ 11/19
+ -----
+redir.c
+ - slightly change do_redirection_internal to set the close-on-exec
+ flag for file descriptors > 2 used to save file descriptors < 2
+ using explicit redirections (e.g., `exec 3>&1'). This keeps file
+ descriptors pointing to pipes from being left open but doesn't
+ change the shell's file descriptor semantics
+
+ 11/20
+ -----
+doc/{bash.1,bashref.texi}
+ - correct some minor typos, forwarded from doko@debian.org
+
+ 11/22
+ -----
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+ - documented detail that yank-last-arg and yank-nth-arg use the history
+ arg expansion code (and, as a result, are subject to restrictions
+ of the history-comment character)
+
+ 11/23
+ -----
+execute_cmd.c
+ - changes so that BASH_COMMAND preserves its value into a DEBUG trap:
+ for commands, arithmetic for command expressions, select commands,
+ case commands, (( commands, [[ commands, simple commands
+
+ 11/24
+ -----
+doc/{bash.1,bashref.texi}
+ - changed description of `set' builtin slightly so that it is clear
+ that only variables are displayed in posix mode and that read-only
+ variables can't be reset by simply sourcing the output of `set'
+
+lib/sh/strftime.c
+ - don't try to redefine `inline' if it's already defined
+
+ 11/26
+ -----
+execute_cmd.c
+ - fix execute_function to check funcname_a after function execution,
+ since FUNCNAME can be changed or unset within a function
+
+ 11/27
+ -----
+builtins/evalfile.c
+ - make same changes as 11/26, this time to _evalfile
+
+execute_cmd.c
+ - change execute_function to run the return trap after a function
+ completes execution even if the shell is compiled without DEBUGGER
+ defined
+
+trap.c
+ - change reset_or_restore_signal_handlers so that the RETURN trap is
+ not inherited by command substitution when DEBUGGER is not defined
+
+ 11/30
+ -----
+lib/readline/misc.c
+ - fix memory leaks in _rl_free_history_entry and rl_maybe_replace_line
+ caused by not freeing `timestamp' member of history entry
+ - make sure timestamp is initialized to NULL in rl_maybe_save_line
+
+ 12/1
+ ----
+execute_cmd.c
+ - fix execute_function so a function calling `return' will run the
+ RETURN trap, if one's defined
+
+doc/{bash.1,bashref.texi}
+ - fix description of RETURN trap in various places to indicate that it's
+ only inherited by shell functions if function tracing is on globally
+ or has been enabled for that function
+ - fix documentation to indicate that the DEBUG and RETURN traps are
+ inherited under the same conditions
+
+execute_cmd.c
+ - a function does not inherit the RETURN trap if a DEBUG trap is
+ currently running
+
+ 12/2
+ ----
+lib/glob/xmbsrtowcs.c
+ - change xmbsrtowcs to handle the one case where malloc can fail
+ (though it should not matter) -- don't try to free a null pointer
+
+ 12/9
+ ----
+subst.c
+ - fix get_var_and_type to handle var[@], where `var' is a scalar
+ variable, identically to var -- all calling expansions can now
+ handle var[@] like var. Bug reported by agriffis@gentoo.org
+
+ 12/10
+ -----
+lib/readline/bind.c
+ - make new-style "\M-x" keybindings obey `convert-meta' settings
+ (bug reported by twaugh@redhat.com)
+
+ 12/14
+ -----
+builtins/set.def
+ - added description of `-' option to help text
+
+builtins/shopt.def
+ - fix bug that caused `gnu_errfmt' to not be compiled in unless
+ READLINE is defined
+
+ 12/16
+ -----
+subst.c
+ - fixed a typo in string_extract_verbatim in first call to MBLEN
+ (used `slen - 1' instead of `slen - i')
+
+ 12/17
+ -----
+subst.c
+ - avoid some calls to strlen if the value is only being used for
+ ADVANCE_CHAR and MB_CUR_MAX == 1 (since ADVANCE_CHAR doesn't need
+ it unless multibyte characters are possible)
+ - change string_extract_verbatim so it takes the length of the string
+ as a parameter, so we don't have to recompute the length of the same
+ string over and over again when doing word splitting (that kills if
+ it's a long string)
+
+ 12/18
+ -----
+subst.c
+ - in string_list_dollar_star, make sure to null-terminate the
+ separator if the character is longer than one byte
+
+ 12/22
+ -----
+doc/{bash.1,bashref.texi}
+ - changed text in quoting section explaining that double quotes do
+ not prevent history expansion from taking place, and that backslashes
+ escaping ! are not removed
+
+ 12/28
+ -----
+shell.c
+ - set gnu_error_format to 1 if running under emacs. This should allow
+ the emacs `next-error' stuff to work, at least for interactive shells
+
+parse.y
+ - change yy_stream_get to set interrupt_immediately before calling
+ getc_with_restart when the shell is interactive. This avoids the
+ synchronization problem caused by the call to QUIT in read_a_line,
+ which results in the first character after a SIGINT/^C to be
+ dropped
+
+ 12/30
+ -----
+builtins/mkbuiltins.c
+ - changes to write long documentation to arrays as a single string by
+ default, rather than an array of strings -- enabled by default
+ - new option, -S, to restore old behavior of writing multiple strings
+ for long documentation
+ - changes to avoid filenames written when the separate-filenames option
+ (-H) has been supplied being run through gettext
+
+configure.in
+ - new cofiguration option, --enable-single-help-strings (on by default),
+ causes help text to be stored as a single string (or smaller set than
+ one string per line)
+
+builtins/Makefile.in
+ - pass `-S' to mkbuiltins if single-help-strings is turned off
+
+doc/bashref.texi
+ - documented new `single-help-strings' configure option
+
+ 1/3/2005
+ --------
+jobs.c
+ - make wait_for return a non-zero status if the job or processed
+ waited for is suspended. Returns 128 + stop signal. This fixes
+ the problem with `echo one && sleep 5 && echo two' displaying
+ `two' after the sleep is suspended
+
+ 1/5
+ ---
+print_cmd.c
+ - change indirection_level_string so the code duplicates the first
+ character of $PS4 to indicate the indirection level, rather than
+ the first byte
+
+ 1/8
+ ---
+variables.c
+ - new special variable hook function for COMP_WORDBREAKS; sets
+ rl_completer_word_break_characters back to NULL when the variable
+ is unset
+ - change bind_variable_value to understand dynamic variables with
+ assign_function set, and handle them correctly. If the variable is
+ being appended to, use make_variable_value to create the new
+ value
+ - change bind_variable_internal to understand dynamic variables with
+ assign_function set, and handle them the same way
+ - RANDOM and LINENO now get the integer attribute, so appending works
+ as expected
+ - ditto for HISTCMD, MAILCHECK, OPTIND
+
+lib/readline/display.c
+ - change _rl_make_prompt_for_search to set prompt_physical_chars
+ appropriately
+ - rl_save_prompt and rl_restore_prompt save and restore
+ prompt_prefix_length
+ - change redraw_prompt to use rl_save_prompt and rl_restore_prompt
+ - change rl_restore_prompt to set the `save' variables back to
+ NULL/0 so code can check whether or not the prompt has been saved
+ - change rl_message and rl_clear_message to save and restore the
+ prompt if the caller has not already done it (using a simple
+ semaphore-like variable)
+ - change rl_message to call expand_prompt, so that local_prompt and
+ local_prompt prefix are set before calling the redisplay functions,
+ in case the prompt is longer than a screenwidth (fixes bug
+ reported to debian by epl@unimelb.edu.au)
+
+lib/readline/doc/rltech.texi
+ - make sure to note that rl_save_prompt should be called before
+ rl_message, and rl_restore_prompt before rl_clear_message
+
+pcomplete.c
+ - make sure to save and restore the parser state around the call to
+ execute_shell_function in gen_shell_function_matches. Fixes bug
+ reported by a050106.1.keeLae3x@captaincrumb.com (cute)
+
+lib/readline/readline.c
+ - fix _rl_dispatch_subseq in the case where we're recursing back up
+ the chain (r == -2) and we encounter a key shadowed by a keymap,
+ but originally bound to self-insert. Calling rl_dispatch with
+ ANYOTHERKEY as the first argument will call rl_insert, but with
+ ANYOTHERKEY (256) as the char to insert. Use the shadow keymap
+ and set things up to dispatch to rl_insert with the shadowed key
+ as the argument. Fixes the bug reported by Thomas Glanzmann
+ (sithglan@stud.uni-erlangen.de)
+
+ 1/13
+ ----
+command.h
+ - new word flag: W_HASQUOTEDNULL
+
+make_cmd.c
+ - new function to allocate a WORD_DESC * without doing anything with a
+ containing string: alloc_word_desc
+
+make_cmd.h
+ - extern declaration for alloc_word_desc
+
+dispose_cmd.c
+ - new function to just free a WORD_DESC * without freeing the contained
+ string: dispose_word_desc
+
+dispose_cmd.h
+ - extern declaration for dispose_word_desc
+
+subst.c
+ - change some places to use alloc_word_desc
+ - make same changes to word_list_quote_removal as were made to
+ word_list_split
+ - set W_HASQUOTEDNULL when a word is created with w->word[0] ==
+ CTLNUL and w->word[1] == '\0'
+
+subst.c
+ - parameter_brace_expand_word now returns a WORD_DESC * -- changed
+ callers to understand
+ - parameter_brace_expand_indir now returns a WORD_DESC * -- changed
+ callers to understand
+ - parameter_brace_expand_rhs now returns a WORD_DESC * -- changed
+ callers to understand
+ - remove W_HASQUOTEDNULL from a word's flags when remove_quoted_nulls
+ is called on the word's enclosed string
+
+ 1/15
+ ----
+subst.c
+ - param_expand now returns a WORD_DESC * -- changed callers to
+ understand
+ - parameter_brace_expand now returns a WORD_DESC * -- changed
+ callers to understand
+ - in expand_word_internal, only call remove_quoted_nulls after a word
+ is returned with W_HASQUOTEDNULL
+ - changes to pass W_HASQUOTEDNULL flag out of expand_word_internal;
+ changed callers to call remove_quoted_nulls only if return value has
+ W_HASQUOTEDNULL set. This is a mostly-complete fix for the
+ long-standing CTLNUL confusion between a quoted null expansion and
+ the expansion of a variable with a literal '\177' in its value
+ - change string_list_dollar_at to compute the separator character the
+ same way as string_list_dollar_star: using the already-computed
+ values generated in setifs()
+ - when expanding unquoted $*, if $IFS is empty, check whether or not
+ we're eventually going to split the results (e.g., on the rhs of an
+ assignment statement) and concatenate the positional parameters as
+ if the expansion were within double quotes if we're not going to
+ split
+
+tests/iquote.tests
+ - test cases based on old bug reports about the quoted-null vs. 0177
+ problem the recent code fixes
+
+ 1/16
+ ----
+dispose_cmd.c
+ - set w->word to 0 before putting a WORD_DESC * back in the cache in
+ dispose_word_desc; changed callers to delete those assignments
+
+variables.c
+ - change assign_random and get_random_value so that the random number
+ generator only gets re-seeded once in a subshell environment, and
+ assigning a value to RANDOM counts as seeding the generator. This
+ makes the sequences a little more predictable
+
+ 1/20
+ ----
+lib/readline/history.c
+ - fix replace_history_entry, remove_history to return NULL if
+ passed index is < 0
+
+ 1/22
+ ----
+lib/sh/netconn.c
+ - fix isnetconn() to understand that getpeername can return ENOTCONN
+ to indicate that an fd is not a socket
+
+configure.in
+ - set BUILD_DIR to contain backslashes to escape any spaces in the
+ directory name -- this is what make will accept in targets and
+ prerequisites, so it's better than trying to use double quotes
+ - set SIZE to the appropriate value if some cross-compiling tool
+ chain is being used; `size' by default (can be overridden by
+ SIZE environment variable)
+
+Makefile.in
+ - use $(SIZE) instead of size; set SIZE from configure
+
+ 1/31
+ ----
+arrayfunc.c
+ - in array_value_internal, return NULL right away if the variable's
+ value is NULL, instead of passing a null string to add_string_to_list
+
+ 2/1
+ ---
+jobs.h
+ - new struct to hold stats and counters for child processes and jobs
+ - change some uses of global and static variables to use members of
+ new struct (struct jobstats)
+
+ 2/2
+ ---
+
+jobs.[ch]
+ - change PRUNNING to PALIVE
+ - new define INVALID_JOB
+ - new macro get_job_by_jid(ind), currently expands to jobs[ind]
+ - new define J_JOBSTATE, operates on a JOB * like JOBSTATE operates on
+ a job index
+ - new function, reset_job_indices, called from delete_job if
+ js.j_lastj or js.j_firstj are removed
+ - change various functions to keep counters and stats in struct jobstats
+
+pcomplete.c, builtins/common.c, builtins/{exit,fg_bg,jobs,kill,wait}.def
+ - change global variables (e.g., job_slots) to struct members
+ (e.g., js.j_jobslots)
+ - use INVALID_JOB define where appropriate
+ - use get_job_by_jid and J_JOBSTATE where appropriate
+
+trap.c
+ - change reset_or_restore_signal_handler to not free the exit trap
+ string if the function pointer is reset_signal, which is used when
+ the trap strings shouldn't be freed, like in command substitution
+
+ 2/4
+ ---
+jobs.c
+ - new function, realloc_jobs_list, copies jobs array to newly-allocated
+ memory shrinking (or growing) size to have next multiple of JOB_SLOTS
+ greater than js.j_njobs
+ - change compact_jobs_list to just call reap_dead_jobs and then
+ realloc_jobs_list, simplifying it considerably
+ - discard_pipeline now returns `int': the number of processes freed
+ - slightly changed the logic deciding whether or not to call
+ compact_jobs_list: now non-interactive shells will compact the
+ list if it reaches MAX_JOBS_IN_ARRAY in size
+
+parse.y
+ - move test for backslash-newline after pop_string in shell_getc so
+ that things like
+
+ ((echo 5) \
+ (echo 6))
+
+ work right
+
+ 2/8
+ ---
+jobs.h
+ - new structs for holding status of exited background processes, as
+ POSIX specifies
+ - new job flag: J_ASYNC
+
+jobs.c
+ - new functions to manipulate struct holding status of exited
+ background processes
+ - new members in struct jobstats to hold pointer to last created job
+ and last created asynchronous job
+ - initialize js.c_childmax in initialize_job_control
+ - if the `async' arg to stop_pipeline is non-null, set the J_ASYNC
+ flag in the job struct
+ - set js.j_last_made_job and js.j_last_asynchronous_job in
+ stop_pipeline
+ - new function: find_last_proc, returns the PROCESS * to the last proc
+ in a job's pipeline
+ - changed find_last_pid to call find_last_proc
+ - change delete_job to call bgp_add on the last proc of the job being
+ deleted
+ - change delete_all_jobs and wait_for_background_pids to call bgp_clear
+
+ 2/9
+ ---
+jobs.c
+ - change wait_for_single_pid to look for pid in bgpids.list (using
+ bgp_search()) if find_pipeline returns NULL
+
+ 2/10
+ ----
+support/shobj-conf
+ - change the solaris-gcc stanza so that it auto-selects the appropriate
+ options for ld depending on which `ld' gcc says it's going to run
+
+ 2/11
+ ----
+jobs.h
+ - add support for PS_RECYCLED as a process state, add PRECYCLED macro
+ to test it. Change PALIVE and PRUNNING macros to not count processes
+ in PS_RECYCLED state
+
+execute_cmd.c
+ - restore use of last_pid as sentinel value; use NO_PID as sentinel
+ only if RECYCLES_PIDS is defined
+
+jobs.c
+ - change find_job to return a pointer to the PROCESS the desired pid
+ belongs to, analogous to find_pipeline returning pointer to JOB
+ - change find_job callers to add extra argument
+ - change running_only arguments to find_pipeline and find_job to
+ alive_only, since we don't want recycled pids returned here and it
+ better describes the result
+ - new function find_process, calls find_pipeline and searches the
+ returned pipeline for the PROCESS * describing the desired pid
+ - in make_child, if fork() returns the same pid as the value of
+ last_asynchronous_pid when RECYCLES_PIDS is defined, avoid pid
+ aliasing by resetting last_asynchronous_pid to 1
+ - use PRUNNING instead of child->running, since we, for the most
+ part, don't want to consider recycled pids (e.g., in make_child())
+ - call find_process instead of find_pipeline in waitchld()
+ - use PEXITED(p) instead of testing p->running == PS_DONE
+ - in make_child, call bgp_delete to remove a just-created pid from the
+ last of saved pid statuses
+ - in add_process, check whether or not pid being added is already in
+ the_pipeline or the jobs list (using find_process) and mark it as
+ recycled if so
+ - This set of fixes mostly came from Pierre Humblet
+ <pierre.humblet@ieee.org> to fix pid aliasing and reuse problems on
+ cygwin
+
+variables.c
+ - set $_ from the environment if we get it there, set to $0 by
+ default if not in env
+
+doc/{bashref.texi,bash.1}
+ - a couple of clarifying changes to the description of $_ based on
+ comments from Glenn Morris <gmorris+mail@ast.cam.ac.uk>
+
+ 2/15
+ ----
+shell.c
+ - use strstr instead of strmatch when checking whether $EMACS contains
+ `term' -- simpler and faster
+
+ 2/18
+ ----
+builtins/cd.def
+ - implement posix requirement that `pwd -P' set $PWD to a directory
+ name containing no symlinks
+ - add new function, setpwd(), just sets (and changes exported value)
+ of PWD
+
+doc/bashref.texi
+ - add note to posix mode section about pwd -P setting $PWD
+
+doc{bash.1,bashref.texi}
+ - added note that BASH_ARGC and BASH_ARGV are only set in extended
+ debug mode
+ - expand description of extdebug option to include everything changed
+ by extended debug mode
+
+ 2/19
+ ----
+pathexp.h
+ - new flag macro, FNMATCH_IGNCASE, evaluates to FNM_CASEFOLD if the
+ match_ignore_case variable is non-zero
+
+execute_cmd.c
+ - new variable, match_ignore_case
+ - change call to strmatch() in execute_case_command so it includes
+ FNMATCH_IGNCASE
+
+test.c
+ - change call to strmatch() in patcomp() so that pattern matching
+ calls for [[ ... ]] obey the match_ignore_case variable
+
+lib/sh/shmatch.c
+ - if match_ignore_case is set, enable REG_ICASE in the regexp match
+ flags
+
+builtins/shopt.def
+ - new settable option, `nocasematch', controls the match_ignore_case
+ variable. Currently alters pattern matching for case and [[ ... ]]
+ commands (==, !=, and =~ operators)
+
+doc/{bashref.texi,bash.1}
+ - updated descriptions of [[ and case to include reference to
+ nocasematch option
+
+ 2/22
+ ----
+builtins/mkbuiltins.c
+ - add `times' to the list of posix special builtins
+
+ 2/23
+ ----
+builtins/cd.def
+ - posix mode no longer turns on effect of -P option on $PWD if a
+ directory is chosen from CDPATH
+
+doc/bashref.texi
+ - clarified that in posix mode, reserved words are not alias expanded
+ only in a reserved word context
+ - removed item about cd, $CDPATH, and -P from posix mode section
+
+ 2/24
+ ----
+builtins/reserved.def
+ - minor cleanups to the description of `if'
+
+ 3/2
+ ---
+subst.c
+ - change list_string and get_word_from_string to explicitly treat an
+ IFS character that is not space, tab, or newline *and any adjacent
+ IFS white space* as a single delimiter, as SUSv3/XPG6 says
+
+builtins/read.def
+ - check whether or not the number of fields is exactly the same as
+ the number of variables instead of just assigning the rest of the
+ line (minus any trailing IFS white space) to the last variable.
+ This parses a field and checks whether or not it consumes all of
+ the input (including any trailing field delimiters), falling back
+ to the previous behavior if it does not. This is what POSIX.2
+ specifies, I believe (and the consensus of the austin-group list).
+ This requires a few tests in read.tests to be changed: backslashes
+ escaping IFS whitespace characters at the end of input cause the
+ whitespace characters to be preserved in the value assigned to the
+ variable, and the trailing non-whitespace field delimiter issue
+
+ 3/7
+ ---
+configure.in
+ - add -D_POSIX_SOURCE to the LOCAL_CFLAGS for Interix
+
+ 3/8
+ ---
+bashline.c
+ - make bash_directory_expansion a void function, since it doesn't have
+ any return value
+
+ 3/9
+ ---
+builtins/read.def
+ - when testing for a pipe, use `fd' instead of hard-coding 0, since we
+ can read from other file descriptors now
+
+lib/sh/zread.c
+ - in zsyncfd, only set lind and lused to 0 if the lseek succeeds.
+ If the lseek fails, we might steal input from other programs, but
+ a failed lseek won't cause us to erroneously discard input
+
+ 3/11
+ ----
+builtins/evalstring.c
+ - don't allow parse_and_execute to short-circuit and call exec() if
+ the command's return value is being inverted
+
+ 3/15
+ ----
+builtins/printf.def
+ - new macro PC to call putchar and increment number of chars printed -
+ fixes bug in computation of value for %n format char
+ - `tw' is now a global var so printstr can modify it using PC()
+ - convert PF macro to use asprintf into a local buffer
+ Preparation for printf -v var
+ - add code to add the text printed to a `variable buffer' if -v option
+ supplied. The buffer grows as needed
+ - printf now takes a `-v var' option to put the output into the variable
+ VAR rather than sending it to stdout. It does not:
+ print partial output on error (e.g., format string error)
+ handle NULs in the variable value, as usual
+
+ 3/16
+ ----
+parse.y
+ - fix bug in prompt string decoding that caused a core dump when PS1
+ contained \W and PWD was unset (null pointer deref)
+
+builtins/printf.def
+ - changed -v var behavior so it stores partial output into the named
+ variable upon an error
+
+ 3/24
+ ----
+lib/readline/bind.c
+ - bool_to_int now takes a `const char *' argument
+
+support/{printenv,recho,zecho}.c
+ - include config.h
+ - include "bashansi.h" for appropriate extern function declarations
+
+configure.in
+ - on MacOS X 10.4, compensate for loader not allowing static library
+ to override existing system dynamic library when compiling -dynamic
+ (affects readline and history libraries); so use absolute pathname
+ instead of -lreadline as library name
+
+lib/glob/{glob,sm_loop,smatch}.c
+ - make sure to cast arguments to (char *) or (unsigned char *) as
+ appropriate to avoid gcc4 warnings
+
+lib/glob/smatch.c
+ - collsym (single-byte version) now takes a (CHAR *) first argument to
+ match callers; cast argument to strncmp appropriately
+
+lib/sh/snprintf.c
+ - fix ldfallback and dfallback to handle width and precision specs in
+ the format passed to sprintf()
+ - fix STAR_ARGS macro to deal with negative field widths and precisions
+
+ 3/25
+ ----
+builtins/printf.def
+ - since a negative precision in a "x.x[fFgGeE]" format specifier should
+ be allowed but treated as if the precision were missing, let it
+ through
+
+lib/sh/snprintf.c
+ - fix * code to deal with a negative precision by treating it as if
+ the `.' and any digit string in the precision had not been specified
+ - fix format parsing code to deal with a negative inline precision,
+ e.g., "%4.-4f" by treating it as if the `'. and any digit string in
+ the precision had not been specified
+ - a `+' in a format specifier should only act as a flag if it comes
+ before a `.' (otherwise it is ignored)
+
+lib/readline/vi_mode.c
+ - new function, rl_vi_rubout, to rl_rubout as rl_vi_delete is to
+ rl_delete; saves deleted text for possible reinsertion as with any
+ vi-mode `text modification' command (fixes problem with `X' reported
+ by beat.wieland@gmx.ch)
+
+lib/readline/vi_keymap.c
+ - bind `X' in vi command mode to rl_vi_rubout
+
+lib/readline/funmap.c
+ - add a bindable `vi-rubout' command, runs rl_vi_rubout
+
+lib/readline/text.c
+ - rewrote internals of _rl_rubout_char to make structure cleaner
+
+lib/readline/{complete,text}.c
+ - changed code to remove #ifdef HANDLE_MULTIBYTE where possible
+
+ 3/28
+ ----
+lib/readline/examples/rl.c
+ - include <sys/stat.h> instead of posixstat.h if READLINE_LIBRARY not
+ defined
+
+subst.c
+ - fix mbstrlen to treat invalid multibyte sequences as sequences of
+ single-byte characters
+
+ 4/8
+ ---
+configure.in
+ - default SIZE to `:' if cross-compiling and an appropriate size for
+ the target is not found
+
+ 4/11
+ ----
+subst.c
+ - change match_upattern and match_wpattern to check whether or not the
+ supplied pattern matches anywhere in the supplied string, prefixing
+ and appending the pattern with `*' if necessary. If it doesn't we
+ can short-circuit immediately rather than waste time doing up to
+ N-1 unsuccessful calls to strmatch/wcsmatch (which kills for long
+ strings, even if the pattern is short)
+
+ 4/12
+ ----
+configure.in
+ - make sure the special case for MacOS X 10.4 only kicks in if the
+ `--with-installed-readline' option isn't supplied
+
+lib/readline/{callback,readline,signals}.c
+ - make sure rl_prep_term_function and rl_deprep_term_function aren't
+ dereferenced if NULL (as the documentation says)
+
+builtins/mkbuiltins.c
+ - don't bother with the special HAVE_BCOPY code; just use straight
+ assignments
+
+builtins/ulimit.def
+ - use _POSIX_PIPE_BUF in pipesize() if it's defined and PIPE_BUF is
+ not
+
+ 4/13
+ ----
+execute_cmd.c
+ - add cm_function_def to the list of control structures for which
+ child processes are forked when pipes come in or out
+
+ 4/14
+ ----
+builtins/read.def
+ - make sure the ^As added for internal quoting are not counted as
+ characters read when -n is supplied
+
+ 4/20
+ ----
+redir.c
+ - fix redir_open so that the repeat open on failure that AFS support
+ adds restores the correct value of errno for any error message
+
+ 4/26
+ ----
+
+Makefile.in
+ - make sure mksignames and mksyntax are invoked with the $(EXEEXT)
+ extension
+
+ 4/28
+ ----
+lib/readline/readline.h
+ - new state variable: RL_STATE_CALLBACK, means readline is using the
+ callback interface
+
+lib/readline/callback.c
+ - set RL_STATE_CALLBACK in rl_callback_handler_install, unset in
+ rl_callback_handler_remove
+
+ 4/29
+ ----
+config-top.h
+ - DONT_REPORT_SIGPIPE is now on by default, since it apparently
+ interferes with scripts
+
+configure.in
+ - arrange things so PGRP_PIPE is defined on Linux-2.4+ and version 3
+ kernels (ones that apparently schedule children to run before their
+ parent)
+
+ 4/30
+ ----
+builtins/caller.def
+ - add call to no_options, so it can handle `--' option
+
+doc/{bash.1,bashref.texi}
+ - note explicitly that test, :, true, and false don't understand --
+ as meaning the end of options
+
+ 5/7
+ ---
+support/shobj-conf
+ - darwin 8 needs the same LDFLAGS setting as darwin 7
+
+parse.y
+ - in save_parser_state, make sure we cast the return value from
+ xmalloc() to the right type
+ - remove casts to (char *) in calls to yyerror()
+
+lib/readline/signals.c
+ - make SIGQUIT and SIGALRM code conditional on their definition
+ - use raise() to send a signal if we don't have kill()
+
+lib/readline/display.c
+ - some MS-DOS and MINGW changes from the cygwin and mingw folks
+
+config.h.in
+ - add HAVE_PWD_H for <pwd.h>
+ - add HAVE_FCNTL, HAVE_KILL for respective system calls
+ - add HAVE_GETPW{ENT,NAM,UID} for passwd functions
+
+configure.in
+ - add check for <pwd.h>
+ - add checks for fcntl, kill system calls
+ - add checks for getpw{ent,nam,uid} C library functions
+ - pass a flag indicating we're cross compiling through to
+ CFLAGS_FOR_BUILD in Makefile.in
+
+lib/readline/complete.c
+ - guard inclusion of <pwd.h> with HAVE_PWD_H
+ - don't provide a missing declaration for getpwent if we don't have it
+ - guard calls to {get,end}pwent with HAVE_GETPWENT
+
+lib/readline/shell.c
+ - guard inclusion of <pwd.h> with HAVE_PWD_H
+ - guard inclusion of <fcntl.h> with HAVE_FCNTL_H
+ - don't provide a missing declaration for getpwuid if we don't have it
+ - guard calls to getpwuid with HAVE_GETPWUID
+ - don't bother with body of sh_unset_nodelay_mode if we don't have
+ fcntl
+
+lib/tilde/tilde.c
+ - guard inclusion of <pwd.h> with HAVE_PWD_H
+ - guard calls to getpw{nam,uid} with HAVE_GETPW{NAM,UID}
+ - guard calls to {get,end}pwent with HAVE_GETPWENT
+
+Makefile.in,builtins/Makefile.in
+ - @CROSS_COMPILE@ is substituted into CFLAGS_FOR_BUILD (equal to
+ -DCROSS_COMPILING if bash is being cross-compiled)
+
+ 5/9
+ ---
+aclocal.m4
+ - print version as `0.0' in RL_LIB_READLINE_VERSION if the
+ `rl_gnu_readline_p' variable isn't 1 (accept no imitations)
+
+ 5/11
+ ----
+lib/readline/rlprivate.h
+ - definition of a readline `search context', to be use for incremental
+ search initially and other types of search later. Original from
+ Bob Rossi as part of work on incremental searching problems when
+ using callback interface
+
+lib/readline/isearch.c
+ - functions to allocate and free search contexts
+ - function to take a search context and a character just read and
+ `dispatch' on it: change search parameters, add to search string,
+ search further, etc.
+ - isearch is now completely context-driven: a search context is
+ allocated and passed to the rest of the functions
+
+ 5/12
+ ----
+lib/readline/isearch.c
+ - an additional `isearch cleanup' function that can be called from
+ the callback interface functions when the search is to be terminated
+ - an additional `isearch callback' function that can be called from
+ rl_callback_read_char when input is available
+ - short-circuit from rl_search_history after initialization if
+ the callback interface is being used
+
+lib/readline/callback.c
+ - in rl_callback_read_char(), if RL_STATE_ISEARCH is set, call
+ _rl_isearch_callback to read the character and dispatch on it.
+ If RL_STATE_ISEARCH is unset when that call returns, and there is
+ input pending, call rl_callback_read_char() again so we don't
+ have to wait for new input to pick it up
+
+support/shobj-conf,configure.in
+ - add support for dragonfly bsd, the same as freebsd
+
+ 5/13-5/15
+ ---------
+lib/readline/callback.c
+ - support for readline functions to `register' a function that will
+ be called when more input is available, with a generic data
+ structure to encapsulate the arguments and parameters. Primarily
+ intended for functions that read a single additional character,
+ like quoted-insert
+ - support for callback code reading numeric arguments in a loop,
+ using readline state and an auxiliary variable
+ - support for callback code performing non-incremental searches using
+ the same search context struct as the isearch code
+
+lib/readline/{callback,display}.c
+ - if a callback function sets `_rl_redisplay_wanted', the redisplay
+ function will be called as soon as it returns
+
+lib/readline/input.c
+ - changes to _rl_read_mbchar to handle reading the null multibyte
+ character and translating it into '\0'
+
+lib/readline/misc.c
+ - break rl_digit_loop() into component functions that can be called
+ individually from the callback code more easily
+ - share some of the functions with rl_digit_loop1() in vi_mode.c
+
+lib/readline/readline.h
+ - change the version #defines to reflect readline 5.1
+
+lib/readline/search.c
+ - break code into smaller functions that can be composed to work with
+ the callback code more easily
+
+lib/readline/text.c
+ - in rl_quoted_insert(), don't mess around with the tty signals if
+ running in `callback mode'
+
+lib/readline/vi_mode.c
+ - changed set-mark, goto-mark, change-char, and char-search to work
+ when called by callback functions
+
+ 5/17
+ ----
+
+lib/readline/rlprivate.h
+ - new struct declaration for a `reading key sequence' context
+
+lib/readline/readline.c
+ - new variable, _rl_dispatching_keymap, keeps track of which keymap
+ we are currently searching
+ - functions to allocate and deallocate contexts for reading multi-char
+ key sequences
+
+ 5/18
+ ----
+lib/readline/rlprivate.h
+ - new struct defining a context for multiple-key key sequences (the
+ base case is escape-prefixed commands)
+
+lib/readline/readline.c
+ - change structure of _rl_dispatch_subseq to allow for callback code
+ to use it - rudimentary support for supporting the existing
+ recursion using a stack of contexts, each with a reference to the
+ previous
+ - fix so that ^G works when in callback mode
+
+lib/readline/callback.c
+ - call the appropriate multiple-key sequence callback if the state is
+ set
+
+ 5/19
+ ----
+lib/readline/readline.c
+ - broke code from _readline_internal_char after call to rl_dispatch
+ out into separate function: _rl_internal_char_cleanup, callable by
+ other parts of the code
+ - change _rl_internal_char_cleanup to unset _rl_want_redisplay after
+ it calls (*rl_redisplay_func)
+
+lib/readline/callback.c
+ - call _rl_internal_char_cleanup from rl_callback_read_char when
+ appropriate
+
+ 5/24
+ ----
+lib/readline/callback.c
+ - use _rl_dispatch_callback and a chain of _rl_keyseq_contexts to
+ simulate the recursion used to decode multicharacter key sequences
+ (even things like ESC- as meta-prefix)
+ - call setjmp in rl_callback_read_char to give things like rl_abort
+ a place to jump, since the saved location in readline() will not
+ be valid
+ - keep calling _rl_dispatch_callback from rl_callback_read_char while
+ we are still decoding a multi-key key sequence
+ - keep calling readline_internal_char from rl_callback_read_char while
+ we are reading characters from a macro
+
+lib/readline/macro.c
+ - use a slightly different strategy upon encountering the end of a macro
+ when using the callback interface: when the last character of a
+ macro is read, and we are reading a command, pop the macro off the
+ stack immediately so the loop in rl_callback_read_char terminates
+ when it should
+
+lib/readline/readline.c
+ - if longjmp() is called and we end up at the saved location while
+ using the callback interface, just return -- don't go back into a
+ blocking read
+ - new function to dispose a chain of rl_keyseq_cxts
+ - only read new input in _rl_dispatch_callback if the KSEQ_DISPATCHED
+ flag is not set in the current keyseq context -- if it is, we are
+ traversing the chain back up and should use what we already saved
+ - use -3 as a magic value from _rl_dispatch_subseq to indicate that
+ we're allocating a new context and moving downward in the chain
+ (a special return value for the benefit of _rl_dispatch_callback)
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_keyseq_chain_dispose
+
+ 6/1
+ ---
+builtins/read.def
+ - fixed a bug that occurred when reading a set number of chars and
+ the nth char is a backslash (read one too many). Bug reported by
+ Chris Morgan <chmorgan@gmail.com>
+
+execute_cmd.c
+ - fix execute_builtin so the `unset' builtin also operates on the
+ temporary environment in POSIX mode (as well as source and eval),
+ so that unsetting variables in the temporary environment doesn't
+ leave them set when unset completes. Report by Eric Blake
+ <ebb9@byu.net>
+
+array.c
+ - fix from William Park for array_rshift when shifting right on an
+ empty array -- corrects calculation of array->max_index
+
+builtins/exec.def
+ - if an exec fails and the execfail option is set, don't call
+ restart_job_control unless the shell is interactive or job_control
+ is set
+
+jobs.c
+ - add a run-time check for WCONTINUED being defined in header files
+ but rejected with EINVAL by waitpid(). Fix from Maciej Rozycki
+ <macro@linux-mips.org>
+
+ 6/20
+ ----
+bashhist.c
+ - make sure calls to sv_histchars are protected by #ifdef BANG_HISTORY
+ - ditto for calls to history_expand_line_internal
+
+ 6/23
+ ----
+doc/bashref.texi
+ - remove extra blank lines in @menu constructs
+
+variables.c
+ - assign export_env to environ (extern char **) every time it changes
+ (mostly in add_to_export_env define), so maybe getenv will work on
+ systems that don't allow it to be replaced
+
+ 6/29
+ ----
+bashline.c
+ - in bash_directory_completion_hook, be careful about not turning `/'
+ into `//' and `//' into `///' for benefit of those systems that treat
+ `//' as some sort of `network root'. Fix from Eric Blake
+ <ebb9@byu.net>
+
+lib/readline/complete.c
+ - in to_print, do the right thing after stripping the trailing slash
+ from full_pathname: // doesn't turn into /, and /// doesn't become
+ //. Fix from Eric Blake <ebb9@byu.net>
+
+ 6/30
+ ----
+lib/malloc/trace.c
+ - include <unistd.h> if it's available for a definition of size_t
+
+jobs.c
+ - in wait_for, if a child process is marked as running but waitpid()
+ returns -1/ECHILD (e.g., when the bash process is being traced by
+ strace), make sure to increment c_reaped when marking the child as
+ dead
+ - in without_job_control, make sure to close the pgrp pipe after
+ calling start_pipeline
+
+ 7/1
+ ---
+Makefile.in
+ - only remove pathnames.h when the other files created by running
+ configure are removed (e.g., Makefile). Fix from William Park
+
+lib/sh/shquote.c
+ - since backslash-newline disappears when within double quotes, don't
+ add a backslash in front of a newline in sh_double_quote. Problem
+ reported by William Park
+
+jobs.c
+ - in notify_of_job_status, don't print status messages about
+ terminated background processes unless job control is active
+
+bashhist.c
+ - new variable, hist_last_line_pushed, set to 0 in really_add_history
+ (used by `history -s' code)
+
+bashhist.h
+ - new extern declaration for history -s
+
+builtins/history.def
+ - don't remove last history entry in push_history if it was added by
+ a call to push_history -- use hist_last_line_pushed as a sentinel
+ and set it after adding history entry. This allows multiple
+ calls to history -s to work right: adding all lines to the history
+ rather than deleting all but the last. Bug reported by Matthias
+ Schniedermeyer <ms@citd.de>
+ - pay attention to hist_last_line_pushed in expand_and_print_history()
+ so we don't delete an entry pushed by history -s
+
+ 7/4
+ ---
+print_cmd.c
+ - fix print_arith_for_command to not print so many blanks between
+ expressions in ((...))
+
+command.h
+ - new word flag: W_DQUOTE. Means word should be treated as if double
+ quoted
+
+make_cmd.c
+ - add W_DQUOTE to word flags in make_arith_for_expr
+
+parse.y
+ - add W_DQUOTE to word flags for (( ... )) arithmetic commands
+
+subst.c
+ - don't perform tilde expansion on a word with W_DQUOTE flag set
+ - don't perform process substitution on a word with W_DQUOTE flag set
+
+arrayfunc.c
+ - expand an array index within [...] the same way as an arithmetic
+ expansion between (( ... ))
+
+lib/readline/input.c
+ - use getch() instead of read() on mingw
+
+lib/readline/readline.c
+ - add a few key bindings for the arrow keys on mingw
+
+lib/readline/rldefs.h
+ - if on mingw, define NO_TTY_DRIVER
+
+lib/readline/rltty.c
+ - compile in the stub functions for _rl_{disable,restore}_tty_signals
+ if on mingw
+ - compile in stub function for rl_restart_output on mingw
+ - make sure enough functions and macros are defined to compile if
+ NO_TTY_DRIVER is defined (lightly tested - builds on MacOS X, at
+ least)
+
+ 7/7
+ ---
+command.h
+ - add a `flags' member to the PATTERN_LIST structure
+
+make_cmd.c
+ - intialize the `flags' member of a PATTERN_LIST when it's created
+
+builtins/psize.c
+ - protect extern declaration of errno with usual #ifdef errno
+
+configure.in, variables.c
+ - changes for QNX 6.x
+
+ 7/9
+ ---
+parse.y
+ - fix parse_matched_pair to handle single and double quoted strings
+ inside old-style command substitution (``) since they can each
+ quote the ` and embedded $-expansions. Report by Eric Blake
+ <ebb9@byu.net>
+
+{configure,Makefile}.in
+ - TILDE_LIB is now substituted into Makefile by configure
+
+configure.in
+ - if configuring --with-installed-readline on cygwin, set TILDE_LIB
+ to the empty string to avoid multiply-defined symbols. Cygwin
+ doesn't allow undefined symbols in dynamic libraries. Report by
+ Eric Blake <ebb9@byu.net>
+
+ 7/11
+ ----
+input.c
+ - in duplicate_buffered_stream, don't call free_buffered_stream if the
+ two buffered streams share the same b_buffer object (e.g., if they
+ had already been duplicated with a previous call). Fixes Debian bug
+ reported by eero17@bigfoot.com
+
+ 7/12
+ ----
+shell.c
+ - make set_shell_name more resistant to a NULL argument
+ - in bind_args, use < instead of != when counting the arguments and
+ making the arg list
+ - in main(), make sure arg_index is not initialized to a value greater
+ than argc
+
+ 7/14
+ ----
+lib/readline/display.c
+ - in expand_prompt, don't set the location of the last invisible
+ char if the sequence is zero length (\[\])
+
+ 7/15
+ ----
+doc/{bash.1,bashref.texi}
+ - document that the shell uses $TMPDIR when creating temporary files
+
+ 7/20
+ ----
+[bash-3.1-alpha1 frozen]
+
+ 7/29
+ ----
+builtins/evalstring.c
+ - make sure that parse_and_execute saves and restores the value of
+ loop_level, so loops in sourced scripts and eval'd strings don't
+ mess up the shell's parser state
+
+bashline.c
+ - change command_subst_completion_function to suppress appending
+ any character to a unique completion, instead of a space, unless
+ the last word in the quoted command substitution completes to a
+ directory name. In that case we append the expected slash
+
+ 8/1
+ ---
+builtins/printf.def
+ - make sure variables are initialized if their values are tested later
+
+[bash-3.1-alpha1 updated and re-frozen]
+
+ 8/2
+ ---
+variables.c
+ - make sure to call stifle_history with an `int' instead of an intmax_t.
+ Sometimes it makes a difference
+
+ 8/3
+ ---
+[bash-3.1-alpha1 released]
+
+support/mksignames.c
+ - add `SIGSTKFLT' (RHE3)
+ - add `SIGXRES' (Solaris 9)
+
+ 8/4
+ ---
+builtins/ulimit.def
+ - fix typo to make `x' the right option for locks
+ - add new options to short help synopsis
+
+variables.c
+ - use get_variable_value instead of direct reference to value_cell
+ in make_variable_value when appending to the current value, so
+ references to array variables without subscripts will be equivalent
+ to element 0
+
+lib/readline/text.c
+ - rewrote rl_change_case to correctly change the case of multibyte
+ characters where appropriate
+
+ 8/5
+ ---
+configure.in
+ - remove call to obsolete macro AC_ACVERSION
+ - remove special calls to AC_CYGWIN and AC_MINGW32; AC_CANONICAL_HOST
+ takes care of those cases
+
+general.h
+ - include `chartypes.h' for definition of ISALPHA
+ - fix definitions of ABSPATH and RELPATH for cygwin
+ - fix definition of ISDIRSEP for cygwin to allow backslash as a
+ directory name separator
+
+ 8/9
+ ---
+builtins/setattr.def
+ - when setting a variable from the temporary environment in
+ set_var_attribute (e.g., `LC_ALL=C export LC_ALL'), make sure to
+ call stupidly_hack_special_variables after binding the variable in
+ the current context
+
+builtins/printf.def
+ - make sure to call stupidly_hack_special_variables if using `printf -v'
+ to put formatted output in a shell variable
+
+ 8/11
+ ----
+support/shobj-conf
+ - new variable: SHLIB_LIBPREF, prefix for shared library name (defaults
+ to `lib'
+ - new variable: SHLIB_DLLVERSION, used on Cygwin to set the library
+ version number
+ - new variable: SHLIB_DOT, separator character between library name and
+ suffix and version information (defaults to `.')
+ - new stanza for cygwin to generate windows-compatible dll
+
+ 8/14
+ ----
+variables.c
+ - new special variable function for Cygwin, so the export environment
+ is remade when HOME is changed. The environment is the only way to
+ get information from the shell to cygwin dlls, for instanace, when
+ bash is compiled to use an already-installed libreadline
+
+variables.h
+ - new extern declaration for sv_home
+
+ 8/15
+ ----
+lib/readline/display.c
+ - call init_line_structures from rl_redisplay if vis_lbreaks == 0
+ to avoid consequences of a poorly-timed SIGWINCH
+
+ 8/16
+ ----
+subst.c
+ - fix logic for performing tilde expansion when in posix mode (don't
+ rely on W_TILDEEXP flag always being set, because it won't be when
+ expanding the RHS of assignment statement). Use W_TILDEEXP only
+ when deciding to expand a word marked as W_ASSIGNMENT that doesn't
+ precede a command name
+
+ 8/17
+ ----
+execute_cmd.c
+ - in execute_function, when subshell == 1, don't short-cut by using
+ the command contained in the group command -- if you do, any
+ redirections attached to the group command (function) don't get
+ executed
+
+general.h
+ - new #define, FS_READABLE, indicates file is readable by current
+ user
+
+findcmd.c
+ - rewrote file_status to use S_xxx POSIX file mode bits and to add
+ support for FS_READABLE (affects ./source and searching $PATH for
+ scripts whose names are supplied as arguments on the command line)
+ - change find_path_file to look for readable files -- source requires
+ it
+ - change find_in_path_element to do the right thing when FS_READABLE
+ is supplied as a flag
+
+doc/bashref.texi
+ - remove note about posix non-compliance in `.': we now require and
+ look for readable files when searching $PATH
+
+ 8/20
+ ----
+subst.c
+ - fix setifs to handle case where passed variable is non-zero but
+ v->value == 0 (as in an unset local variable); treat IFS as unset
+ in this case
+
+jobs.c
+ - in kill_pid, if asked to killpg a process or pgrp whose pgrp is
+ recorded as the same as the shell's, just call killpg and let the
+ chips fall where they may -- there may be other processes in that
+ pgrp that are not children of the shell, so killing each process
+ in the pipeline will not do a complete job, and killpg'ing each
+ such process will send too many signals in the majority of cases
+
+builtins/cd.def
+ - in posix mode, pwd needs to check that the value it prints and `.'
+ are the same file
+
+builtins/read.def
+ - if reading input from stdin in a non-interactive shell and calling
+ `read', call sync_buffered_stream to seek backward in the input
+ stream if necessary (XXX - should we do this for all shell builtins?)
+
+ 8/23
+ ----
+builtins/cd.def
+ - in posix mode, if canonicalization of the absolute pathname fails
+ because the path length exceeds PATH_MAX, but the length of the passed
+ (non-absolute) pathname does not, attempt the chdir, just as when
+ not in posix mode
+
+builtins/type.def
+ - don't have describe_command call sh_makepath if the full path found
+ is already an absolute pathname (sh_makepath will stick $PWD onto the
+ front of it)
+
+ 8/24
+ ----
+
+jobs.c
+ - in posix mode, don't have start_job print out and indication of
+ whether the job started by `bg' is the current or previous job
+ - change start_job to return success if a job to be resumed in the
+ background is already running. This means that bg won't fail when
+ asked to bg a background job, as SUSv3/XPG6 requires
+ - new function, init_job_stats, to zero out the global jobstats struct
+
+{jobs,nojobs}.c
+ - change kill_pid to handle pids < -1 by killing process groups
+
+jobs.h
+ - extern declaration for init_job_stats
+
+lib/readline/history.c
+ - check whether or not the history list is null in remove_history
+
+builtins/history.def
+ - delete_last_history is no longer static so fc builtin can use it
+
+builtins/fc.def
+ - use free_history_entry in fc_replhist instead of freeing struct
+ members individually
+ - call delete_last_history from fc_replhist instead of using inline
+ code
+ - if editing (-l not specified), make sure the fc command that caused
+ the editing is removed from the history list, as POSIX specifies
+
+builtins/kill.def
+ - just call kill_pid with any pid argument and let it handle pids < -1
+ This is the only way to let kill_pid know whether a negative pid or
+ a job spec was supplied as an argument to kill
+
+builtins/fg_bg.def
+ - force fg_bg to return EXECUTION_SUCCESS explicitly if called by bg
+ and start_job returns successfully
+ - bg now returns success only if all the specified jobs were resumed
+ successfully
+
+execute_cmd.c
+ - call init_job_stats from initialize_subshell to zero out the global
+ job stats structure
+
+ 8/25
+ ----
+bashline.c
+ - change vi_edit_and_execute_command to just call vi when in posix
+ mode, instead of checking $FCEDIT and $EDITOR
+
+lib/readline/search.c
+ - if in vi_mode, call rl_free_undo_list in make_history_line_current
+ to dispose of undo list accumulated while reading the search string
+ (if this isn't done, since vi mode leaves the current history
+ position at the entry which matched the search, the call to
+ rl_revert_line in rl_internal_teardown will mangle the matched
+ history entry using a bogus rl_undo_list)
+ - call rl_free_undo_list after reading a non-incremental search string
+ into rl_line_buffer -- that undo list should be discarded
+
+lib/readline/rlprivate.h
+ - add UNDO_LIST * member to search context struct
+
+lib/readline/isearch.c
+ - initialize UNDO_LIST *save_undo_list member of search context struct
+
+ 8/27
+ ----
+lib/readline/bind.c
+ - change rl_parse_and_bind to strip whitespace from the end of a
+ variable value assignment before calling rl_variable_bind
+
+doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
+ - clarified the language concerning parsing values for boolean
+ variables in assignment statements
+
+ 8/28
+ ----
+lib/sh/pathphys.c
+ - fix small memory leak in sh_realpath reported by Eric Blake
+
+ 8/31
+ ----
+doc/bashref.texi
+ - add additional notes to posix mode section
+
+ 9/3
+ ---
+parse.y
+ - if $'...' occurs within a ${...} parameter expansion within
+ double quotes, don't single-quote the expanded result -- the double
+ quotes will cause it to be expanded incorrectly
+
+ 9/4
+ ---
+builtins/fc.def
+ - if STRICT_POSIX is defined, the posix mode default for the editor to
+ use is $FCEDIT, then ed
+
+shell.c
+ - if STRICT_POSIX is defined, initialize `posixly_correct' to 1
+
+config.h.in
+ - add #undef STRICT_POSIX
+
+ 9/5
+ ---
+configure.in
+ - add new option argument, --enable-strict-posix-default, configures
+ bash to be posix-conformant (including defaulting echo to posix
+ conformance) by default
+
+builtins/echo.def
+ - if STRICT_POSIX is defined, default echo to xpg-style
+
+doc/bashref.texi
+ - describe the --enable-strict-posix-default option to configure
+
+ 9/10
+ ----
+builtins/mkbuiltins.c
+ - change to not generate N_(""), because the translated empty string is
+ special to GNU gettext
+
+ 9/13
+ ----
+lib/readline/complete.c
+ - a negative value for rl_completion_query_items means to not ask
+
+lib/readline/doc/{{rltech,rluser}.texi,readline.3}
+ - documented new semantics for rl_completion_query_items/
+ completion-query-items
+
+ 9/14
+ ----
+bashline.c
+ - bind M-TAB in emacs mode to dynamic-complete-history even if the
+ current binding is `tab-insert' (which is what it is by default),
+ not just if it's unbound
+
+ 9/15
+ ----
+eval.c
+ - call QUIT before calling dispose_command on current_command after
+ the `exec_done' label. If we dispose current_command first, the
+ longjmp might restore the value of current_command after we've
+ disposed it, and the subsequent call to dispose_command from the
+ DISCARD case will free memory twice
+
+ 9/16
+ ----
+lib/sh/strto[iu]max.c
+ - make sure the function being declared is not a cpp define before
+ defining it -- should fix problems on HP-UX
+
+ 9/19
+ ----
+Makefile.in
+ - make sure the binaries for the tests are at the front of $PATH
+
+ 9/22
+ ----
+parse.y
+ - new flag for parse_matched_pair: P_COMMAND, indicating that the
+ text being parsed is a command (`...`, $(...))
+ - change calls to parse_matched_pair to include P_COMMAND where
+ appropriate
+ - if P_COMMAND flag is set and the text is unquoted, check for comments
+ and don't try to parse embedded quoted strings if in a comment (still
+ not exactly right yet)
+
+ 9/24
+ ----
+builtins/history.def
+ - if running history -n, don't count these new lines as history lines
+ for the current session if the `histappend' shell option is set.
+ If we're just appending to the history file, the issue that caused
+ history_lines_this_session to be recalculated doesn't apply -- the
+ history file won't be missing any entries
+
+lib/readline/isearch.c
+ - fix C-w handler for isearch string reader to handle multibyte chars
+
+lib/readline/rlmbutil.h
+ - new defines for _rl_to_wupper and _rl_to_wlower
+
+lib/readline/text.c
+ - use _rl_to_wupper and _rl_to_wlower as appropriate
+
+ 9/26
+ ----
+execute_cmd.c
+ - in shell_execve, if the exec fails due to E2BIG or ENOMEM, just print
+ the appropriate error message instead of checking out any interpreter
+ specified with #!
+
+ 9/30
+ ----
+bashhist.c
+ - make $HISTCMD available anytime remember_on_history is non-zero,
+ which indicates that we're saving commands to the history, and
+ let it evaluate to 1 if we're not
+
+ 10/4
+ ----
+lib/sh/snprintf.c
+ - in floating(), make sure d != 0 before calling chkinfnan -- gcc on the
+ version of Solaris 9 I have translates 0 to -inf on the call
+
+[bash-3.1-beta1 frozen]
+
+ 10/6
+ ----
+jobs.c
+ - set the_pipeline to NULL right away in cleanup_the_pipeline, and
+ dispose a copy of the pointer so we don't mess with the_pipeline
+ while we're in the process of destroying it
+ - block and unblock SIGCHLD around manipulating the_pipeline in
+ cleanup_the_pipeline
+
+ 10/7
+ ----
+[bash-3.1-beta1 released]
+
+lib/readline/isearch.c
+ - when switching directions, make sure we turn off the SF_REVERSE
+ flag in the search context's flags word if we're going from reverse
+ to forward i-search
+
+lib/readline/bind.c
+ - new function, rl_variable_value, returns a string representing a
+ bindable readline variable's value
+ - new auxiliary function, _rl_get_string_variable_value, encapsulates
+ everything needed to get a bindable string variable's value
+ - rewrote rl_variable_dumper to use _rl_get_string_variable_value
+
+lib/readline/readline.h
+ - new extern declaration for rl_variable_value
+
+lib/readline/doc/rltech.texi
+ - documented rl_variable_value
+
+bashline.c
+ - in command_word_completion_function, if readline sets
+ rl_completion_found_quote, but doesn't set rl_completion_quote_character,
+ we have an embedded quoted string or backslash-escaped character in
+ the passed text. We need to dequote that before calling
+ filename_completion_function. So far, this is in place only for
+ absolute program names (those containing a `/')
+ - in command_word_completion_function, use rl_variable_value to decide
+ whether or not we should ignore case, and use strncasecmp instead of
+ strncmp where appropriate
+
+ 10/11
+ -----
+builtins/fc.def
+ - fixed a typo when using POSIX_FC_EDIT_COMMAND
+
+redir.h
+ - new flag values for redirections: RX_INTERNAL and RX_USER (currently
+ unused)
+
+redir.c
+ - add_undo_redirect and add_undo_close_redirect now set RX_INTERNAL
+ flag when making new redirects
+ - in do_redirection_internal, only set file descriptors > 2 to CLEXEC
+ if they're marked as RX_INTERNAL
+
+ 10/12
+ -----
+jobs.c
+ - in wait_for_single_pid, if in posix mode, remove the waited-for pid
+ from the list of background pids, forgetting it entirely. POSIX
+ conformance tests test for this.
+
+lib/readline/{readline.h,vi_mode.c}
+ - new state flag, RL_STATE_VICMDONCE, set after entering vi command
+ mode the first time; reset on each call to readline()
+
+ 10/13
+ -----
+lib/readline/undo.c
+ - in rl_revert_line, make sure that revert-line in vi mode leaves
+ rl_point set to 0 no matter the state of the line buffer
+
+lib/readline/vi_mode.c
+ - when entering vi_command mode for the first time, free any existing
+ undo list so the previous insertions won't be undone by the `U'
+ command. This is how POSIX.2 says `U' should work (and the test
+ suite tests for it)
+
+lib/readline/bind.c
+ - change rl_parse_and_bind so only `set' commands involving boolean
+ readline variables have trailing whitespace stripped from the value
+ string
+
+ 10/16
+ -----
+lib/glob/sm_loop.c
+ - fix patscan() to correctly scan backslash-escaped characters
+
+ 10/18
+ -----
+lib/sh/{winsize.c,Makefile.in},{jobs,nojobs}.c,Makefile.in,externs.h
+ - moved get_new_window_size from jobs.c/nojobs.c to new file,
+ lib/sh/winsize.c, made function global
+
+{jobs,nojobs,sig}.c,{jobs,sig}.h
+ - moved SIGWINCH handling code to sig.c rather than duplicate it in
+ jobs.c and nojobs.c
+ - call set_sigwinch_handler from sig.c code rather than job control
+ signal initialization
+
+sig.[ch]
+ - new variable, sigwinch_received, acts like interrupt_state for
+ SIGWINCH, set by sigwinch_sighandler. sigwinch_sighandler no longer
+ calls get_new_window_size
+
+parse.y
+ - add call to get_new_window_size if sigwinch_received at top of
+ shell_getc
+
+ 10/19
+ -----
+lib/malloc/malloc.c
+ - to avoid orphaning memory on free if the right bucket is busy, use a
+ new function xplit(mem, bucket) to split the block into two or more
+ smaller ones and add those to the right bucket (appropriately marking
+ it as busy)
+ - audit bsplit(), bcoalesce(), and xsplit() for proper use of busy[],
+ since they're dealing with two separate buckets
+
+ 10/22
+ -----
+subst.c
+ - new flag for string_extract: EX_REQMATCH, means to return an error
+ if a matching/closing character is not found before EOS
+ - new static flag variables: extract_string_error and extract_string_fatal
+ - change expand_word_internal to check for new error returns from
+ string_extract and return errors if appropriate
+
+ 10/23
+ -----
+builtins/cd.def
+ - make sure we free TDIR in change_to_directory after calling
+ set_working_directory (which allocates new memory) and other places
+ we short-circuit and return
+
+ 10/24
+ -----
+subst.c
+ - modified fix from 10/22 to allow bare ` to pass through (for
+ some backwards compatibility and more correctness)
+
+ 10/27
+ -----
+conftypes.h
+ - make MacOS X use the RHAPSODY code that gets HOSTTYPE, et al.
+ at build rather than configure time, to support universal binaries
+ (fix from llattanzi@apple.com)
+
+ 10/30
+ -----
+builtins/evalstring.c
+ - make sure we don't turn on CMD_NO_FORK in parse_and_execute if
+ we're running a trap command on signal receipt or exit
+
+execute_cmd.c
+ - in shell_execve, improve the error message a little bit if the
+ interpreter name in a #! exec header ends with a ^M (as in a DOS-
+ format file)
+
+ 11/1
+ ----
+lib/readline/vi_mode.c
+ - fix vi-mode `r' command to leave the cursor in the right place
+
+[bash-3.1-rc1 frozen]
+
+ 11/5
+ ----
+execute_cmd.c
+ - make sure a DEBUG trap doesn't overwrite a command string passed to
+ make_child in execute_simple_command
+
+bashline.c
+ - rearrange some code in bash_quote_filename so filenames with leading
+ tildes containing spaces aren't tilde-expanded before being
+ returned to the caller
+
+ 11/6
+ ----
+lib/readline/display.c
+ - when deciding where to move the cursor in rl_redisplay and needing
+ to move the cursor back after moving it vertically and compensate
+ for invisible characters in the prompt string, make sure that
+ _rl_last_c_pos is treated as an absolute cursor position in a
+ multibyte locale and the wrap offset (number of invisible characters)
+ is added explicitly when deciding how many characters to backspace
+
+ 11/10
+ -----
+lib/readline/terminal.c
+ - _rl_set_screen_size now interprets a lines or columns argument < 0
+ as an indication not to change the current value
+
+ 11/11
+ -----
+
+lib/readline/terminal.c
+ - new function, rl_reset_screen_size, calls _rl_get_screen_size to
+ reset readline's idea of the terminal size
+ - don't call _rl_get_screen_size in _rl_init_terminal_io if both
+ _rl_screenheight and _rl_screenwidth are > 0
+ - don't initialize _rl_screenheight and _rl_screenwidth to 0 in
+ _rl_init_terminal_io; let caller take care of it
+ - set _rl_screenheight and _rl_screenwidth to 0 before calling
+ _rl_init_terminal_io
+
+lib/readline/readline.h
+ - new extern declaration for rl_reset_screen_size
+
+lib/readline/doc/rltech.texi
+ - documented rl_reset_screen_size
+
+variables.c
+ - if readline is being used, compile in a special var function for
+ assignments to LINES and COLUMNS that calls rl_set_screen_size or
+ rl_reset_screen_size as appropriate. Only do this in posix mode
+ and only when STRICT_POSIX is defined at compile time
+ - new semaphore variable, winsize_assignment, set while doing an
+ assignment to LINES or COLUMNS
+ - new variable, winsize_assigned, says LINES or COLUMNS was assigned
+ to or found in the environment
+ - if in the middle of an assignment to LINES or COLUMNS, make
+ sh_set_lines_and_columns a no-op
+
+lib/sh/winsize.c
+ - get_new_window_size now takes two int * arguments, to return the
+ screen dimensions
+
+externs.h
+ - change extern declaration for get_new_window_size
+
+{jobs,nojobs}.c, parse.y
+ - change callers of get_new_window_size
+
+ 11/12
+ -----
+lib/readline/terminal.c
+ - new variable, rl_prefer_env_winsize, gives LINES and COLUMNS
+ precedence over values from the kernel when computing window size
+
+lib/readline/readline.h
+ - extern declaration for rl_prefer_env_winsize
+
+lib/readline/doc/rltech.texi
+ - document rl_prefer_env_winsize
+
+ 11/13
+ -----
+lib/readline/rltty.c
+ - change rl_prep_terminal to make sure we set and reset the tty
+ special characters in the vi insertion keymap if in vi mode. This
+ matters if we get accept-line for the previous line while in vi
+ command mode
+
+ 11/14
+ -----
+builtins/pushd.def
+ - make sure any call to cd_builtin includes a leading `--' from the
+ argument list (or constructs one)
+
+ 11/16
+ -----
+pcomplete.c
+ - fix small memory leak in gen_wordlist_matches
+
+[bash-3.1-rc2 frozen]
+
+ 11/21
+ -----
+[bash-3.1-rc2 released]
+
+ 11/23
+ -----
+lib/readline/display.c
+ - changes to rl_redisplay to compensate for update_line updating
+ _rl_last_c_pos without taking invisible characters in the line into
+ account. Important in multibyte locales where _rl_last_c_pos is an
+ absolute cursor position
+ - changes to _rl_move_cursor_relative to account for _rl_last_c_pos
+ being an absolute cursor position in a multibyte character locale
+ - rewrote _rl_move_cursor_relative to make it a little simpler
+
+ 11/29
+ -----
+lib/readline/display.c
+ - changes to rl_redisplay and update_line for update_line to communicate
+ upward that it took the number of invisible characters on the current
+ line into account when modifying _rl_last_c_pos
+ - in update_line, adjust _rl_last_c_pos by wrap_offset before calling
+ _rl_move_cursor_relative, so we pass correct information about the
+ true cursor position
+
+ 12/1
+ ----
+configure.in
+ - changed release status to `release'
+
+[bash-3.1 frozen]
diff --git a/CWRU/mh-folder-comp b/CWRU/mh-folder-comp
new file mode 100644
index 0000000..905000c
--- /dev/null
+++ b/CWRU/mh-folder-comp
@@ -0,0 +1,449 @@
+From jwe@che.utexas.edu Wed Sep 21 17:23:40 1994
+Flags: 10
+Return-Path: jwe@che.utexas.edu
+Received: from po.CWRU.Edu (root@po.CWRU.Edu [129.22.4.2]) by odin.INS.CWRU.Edu with ESMTP (8.6.8.1+cwru/CWRU-2.1-ins)
+ id RAA04010; Wed, 21 Sep 1994 17:23:39 -0400 (from jwe@che.utexas.edu for <chet@odin.INS.CWRU.Edu>)
+Received: from life.ai.mit.edu (life.ai.mit.edu [128.52.32.80]) by po.CWRU.Edu with SMTP (8.6.8.1+cwru/CWRU-2.2)
+ id RAA02121; Wed, 21 Sep 1994 17:23:28 -0400 (from jwe@che.utexas.edu for <chet@po.cwru.edu>)
+Received: from schoch.che.utexas.edu by life.ai.mit.edu (4.1/AI-4.10) for chet@po.cwru.edu id AA09989; Wed, 21 Sep 94 17:23:17 EDT
+Received: from localhost (jwe@localhost) by schoch.che.utexas.edu (8.6.8.1/8.6) with SMTP id QAA05737; Wed, 21 Sep 1994 16:22:01 -0500
+Message-Id: <199409212122.QAA05737@schoch.che.utexas.edu>
+To: march@tudor.com
+Cc: bug-bash@prep.ai.mit.edu
+Subject: Re: Completion feature possible?
+In-Reply-To: Your message of 21 Sep 94 13:30:22 EDT
+Date: Wed, 21 Sep 94 16:22:00 EDT
+From: John Eaton <jwe@che.utexas.edu>
+
+Gregory F. March <march@tudor.com> wrote:
+
+: I was having a discussion about MH with one of my friends the other
+: day and I got to thinking that the +folder/subfolder scheme for naming
+: mail folders is a real pain because completion doesn't work on
+: them. Someone then mentioned that zsh (I think) has the ability to
+: specify how to complete (I guess where to look for the files) for
+: different prefixes. Bash right now knows about '@', '~', and '$' (any
+: others?). It would be really helpful if one could define something
+: like:
+:
+: completion '+' "$HOME/Mail"
+:
+: in a config file someplace. Would this be easy? Is there a list of
+: TODO item that someone might want to add this to?
+
+It would be nice to have a general completion feature like this.
+
+Until that happens, maybe you will find the following patch useful.
+It makes MH folder name completion work with bash. The diffs are
+relative to version 1.14.2.
+
+I realize that changes to readline.c and and complete.c are not good
+since they add some MH-specific stuff to the readline code and not to
+bash, but when I first wrote this, I had no idea what else to do.
+
+Chet, would you consider adding this if it were cleaned up a bit?
+Made optional with cpp conditionals?
+
+This feature has been very useful to me for the last several years
+(since about 1.05 or 1.06, I think).
+
+Thanks,
+
+--
+John W. Eaton | 4.3BSD is not perfect. -- Leffler, et al. (1989).
+jwe@che.utexas.edu |
+
+
+-------------------------------cut here-------------------------------
+diff -rc bash-1.14.2/bashline.c bash-1.14.2.local/bashline.c
+*** bash-1.14.2/bashline.c Wed Aug 3 09:32:45 1994
+--- bash-1.14.2.local/bashline.c Wed Sep 21 15:39:04 1994
+***************
+*** 58,63 ****
+--- 58,64 ----
+ static char *hostname_completion_function ();
+ static char *command_word_completion_function ();
+ static char *command_subst_completion_function ();
++ static char *mh_folder_completion_function ();
+
+ static void snarf_hosts_from_file (), add_host_name ();
+ static void sort_hostname_list ();
+***************
+*** 90,95 ****
+--- 91,98 ----
+ bash_complete_username_internal (),
+ bash_complete_hostname (), bash_possible_hostname_completions (),
+ bash_complete_hostname_internal (),
++ bash_complete_mh_folder (), bash_possible_mh_folder_completions (),
++ bash_complete_mh_folder_internal (),
+ bash_complete_variable (), bash_possible_variable_completions (),
+ bash_complete_variable_internal (),
+ bash_complete_command (), bash_possible_command_completions (),
+***************
+*** 134,140 ****
+ rl_terminal_name = get_string_value ("TERM");
+ rl_instream = stdin;
+ rl_outstream = stderr;
+! rl_special_prefixes = "$@";
+
+ /* Allow conditional parsing of the ~/.inputrc file. */
+ rl_readline_name = "Bash";
+--- 137,143 ----
+ rl_terminal_name = get_string_value ("TERM");
+ rl_instream = stdin;
+ rl_outstream = stderr;
+! rl_special_prefixes = "$@+";
+
+ /* Allow conditional parsing of the ~/.inputrc file. */
+ rl_readline_name = "Bash";
+***************
+*** 193,198 ****
+--- 196,207 ----
+ rl_bind_key_in_map ('@', bash_possible_hostname_completions,
+ emacs_ctlx_keymap);
+
++ rl_add_defun ("complete-mh-folder", bash_complete_mh_folder, META('+'));
++ rl_add_defun ("possible-mh-folder-completions",
++ bash_possible_mh_folder_completions, -1);
++ rl_bind_key_in_map ('+', bash_possible_mh_folder_completions,
++ emacs_ctlx_keymap);
++
+ rl_add_defun ("complete-variable", bash_complete_variable, -1);
+ rl_bind_key_in_map ('$', bash_complete_variable, emacs_meta_keymap);
+ rl_add_defun ("possible-variable-completions",
+***************
+*** 656,661 ****
+--- 665,677 ----
+ if (!matches && *text == '@')
+ matches = completion_matches (text, hostname_completion_function);
+
++ /* Another one. Why not? If the word starts in '+', then look for
++ matching mh folders for completion first. */
++ if (!matches && *text == '+')
++ {
++ matches = completion_matches (text, mh_folder_completion_function);
++ }
++
+ /* And last, (but not least) if this word is in a command position, then
+ complete over possible command names, including aliases, functions,
+ and command names. */
+***************
+*** 1077,1082 ****
+--- 1093,1185 ----
+ return ((char *)NULL);
+ }
+
++ /* How about a completion function for mh folders? */
++ static char *
++ mh_folder_completion_function (text, state)
++ int state;
++ char *text;
++ {
++ extern int rl_filename_completion_desired;
++
++ extern char *get_mh_path ();
++
++ static char *mh_path = (char *)NULL;
++ static int len;
++ static int istate;
++ static char *val;
++ char *hint;
++
++ static char *mh_folder_hint = (char *)NULL;
++
++ /* If we don't have any state, make some. */
++ if (!state)
++ {
++ val = (char *)NULL;
++
++ if (mh_path)
++ free (mh_path);
++
++ mh_path = get_mh_path ();
++ if (!mh_path && !(hint[1] == '/' || hint[1] == '.'))
++ return ((char *)NULL);
++
++ len = strlen (mh_path);
++ }
++
++ if (mh_folder_hint)
++ free (mh_folder_hint);
++
++ hint = text;
++ if (*hint == '+')
++ hint++;
++
++ mh_folder_hint = (char *)xmalloc (2 + len + strlen (hint));
++ if (*hint == '/' || *hint == '.') {
++ len = -1;
++ sprintf (mh_folder_hint, "%s", hint);
++ } else
++ sprintf (mh_folder_hint, "%s/%s", mh_path, hint);
++
++ istate = (val != (char *)NULL);
++
++ again:
++ val = filename_completion_function (mh_folder_hint, istate);
++ istate = 1;
++
++ if (!val)
++ {
++ return ((char *)NULL);
++ }
++ else
++ {
++ char *ptr = val + len + 1, *temp;
++ struct stat sb;
++ int status = stat (val, &sb);
++
++ if (status != 0)
++ return ((char *)NULL);
++
++ if ((sb.st_mode & S_IFDIR) == S_IFDIR)
++ {
++ temp = (char *)xmalloc (2 + strlen (ptr));
++ *temp = '+';
++ strcpy (temp + 1, ptr);
++
++ free (val);
++ val = "";
++
++ rl_filename_completion_desired = 1;
++
++ return (temp);
++ }
++ else
++ {
++ free (val);
++ }
++ goto again;
++ }
++ }
++
+ /* History and alias expand the line. */
+ static char *
+ history_expand_line_internal (line)
+***************
+*** 1628,1633 ****
+--- 1731,1773 ----
+ {
+ bash_specific_completion
+ (what_to_do, (Function *)username_completion_function);
++ }
++
++ static void
++ bash_complete_mh_folder (ignore, ignore2)
++ int ignore, ignore2;
++ {
++ bash_complete_mh_folder_internal (TAB);
++ }
++
++ static void
++ bash_possible_mh_folder_completions (ignore, ignore2)
++ int ignore, ignore2;
++ {
++ bash_complete_mh_folder_internal ('?');
++ }
++
++ static void
++ bash_complete_mh_folder_internal (what_to_do)
++ int what_to_do;
++ {
++ Function *orig_func;
++ CPPFunction *orig_attempt_func;
++ char *orig_rl_completer_word_break_characters;
++ extern char *rl_completer_word_break_characters;
++
++ orig_func = rl_completion_entry_function;
++ orig_attempt_func = rl_attempted_completion_function;
++ orig_rl_completer_word_break_characters = rl_completer_word_break_characters;
++ rl_completion_entry_function = (Function *)mh_folder_completion_function;
++ rl_attempted_completion_function = (CPPFunction *)NULL;
++ rl_completer_word_break_characters = " \t\n\"\'";
++
++ rl_complete_internal (what_to_do);
++
++ rl_completion_entry_function = orig_func;
++ rl_attempted_completion_function = orig_attempt_func;
++ rl_completer_word_break_characters = orig_rl_completer_word_break_characters;
+ }
+
+ static void
+Only in bash-1.14.2.local: bashline.c.orig
+diff -rc bash-1.14.2/lib/readline/complete.c bash-1.14.2.local/lib/readline/complete.c
+*** bash-1.14.2/lib/readline/complete.c Tue Jul 26 12:59:57 1994
+--- bash-1.14.2.local/lib/readline/complete.c Wed Sep 21 15:41:19 1994
+***************
+*** 733,751 ****
+ if (rl_filename_completion_desired)
+ {
+ struct stat finfo;
+! char *filename = tilde_expand (matches[0]);
+
+! if ((stat (filename, &finfo) == 0) && S_ISDIR (finfo.st_mode))
+ {
+! if (rl_line_buffer[rl_point] != '/')
+! rl_insert_text ("/");
+ }
+! else
+ {
+! if (rl_point == rl_end)
+! rl_insert_text (temp_string);
+ }
+- free (filename);
+ }
+ else
+ {
+--- 733,768 ----
+ if (rl_filename_completion_desired)
+ {
+ struct stat finfo;
+! char *tilde_expand ();
+! char *plus_expand ();
+! char *filename = (char *) NULL;
+
+! switch (*matches[0])
+ {
+! case '+':
+! filename = plus_expand (matches[0]);
+! break;
+! case '~':
+! default:
+! filename = tilde_expand (matches[0]);
+! break;
+ }
+!
+! if (filename)
+ {
+! if ((stat (filename, &finfo) == 0)
+! && S_ISDIR (finfo.st_mode))
+! {
+! if (rl_line_buffer[rl_point] != '/')
+! rl_insert_text ("/");
+! }
+! else
+! {
+! if (rl_point == rl_end)
+! rl_insert_text (temp_string);
+! }
+! free (filename);
+ }
+ }
+ else
+ {
+Only in bash-1.14.2.local/lib/readline: diffs
+diff -rc bash-1.14.2/lib/readline/readline.c bash-1.14.2.local/lib/readline/readline.c
+*** bash-1.14.2/lib/readline/readline.c Fri Aug 12 12:47:46 1994
+--- bash-1.14.2.local/lib/readline/readline.c Wed Sep 21 15:36:07 1994
+***************
+*** 23,28 ****
+--- 23,29 ----
+ #define READLINE_LIBRARY
+
+ #include <stdio.h>
++ #include <string.h>
+ #include <sys/types.h>
+ #include <fcntl.h>
+ #if !defined (NO_SYS_FILE)
+***************
+*** 3518,3523 ****
+--- 3519,3616 ----
+ }
+
+ #endif /* TEST */
++
++ #define cr_whitespace(c) ((c) == '\r' || (c) == '\n' || whitespace(c))
++
++ char *
++ get_mh_path ()
++ {
++ static FILE *fp = (FILE *)NULL;
++ char buf[512]; /* XXX */
++ char profile[512]; /* XXX */
++ char *bp;
++ char *temp_home;
++ char *temp_path;
++
++ temp_home = (char *)getenv ("HOME");
++ if (!temp_home)
++ return ((char *)NULL);
++
++ strcpy (profile, temp_home);
++ strcat (profile, "/.mh_profile");
++
++ if (fp)
++ fclose (fp);
++
++ fp = fopen (profile, "r");
++ if (fp == (FILE *)NULL)
++ return ((char *)NULL);
++
++ while (fgets (buf, 512, fp) != (char *)NULL) /* XXX */
++ {
++ if ((bp = strstr (buf, "Path:")) != (char *)NULL)
++ {
++ bp += 5;
++ while (whitespace (*bp))
++ bp++;
++
++ if (*bp == '\0')
++ return ((char *)NULL);
++
++ temp_path = (char *)xmalloc (3 + strlen (bp) + strlen (temp_home));
++
++ strcpy (temp_path, temp_home);
++ strcat (temp_path, "/");
++ strcat (temp_path, bp);
++
++ bp = temp_path;
++
++ while (!(cr_whitespace (*bp)))
++ bp++;
++
++ *bp = '\0';
++
++ return temp_path;
++ }
++ }
++
++ return ((char *)NULL);
++ }
++
++ /* Expand FILENAME if it begins with a plus. This always returns
++ a new string. */
++ char *
++ plus_expand (filename)
++ char *filename;
++ {
++ static char *dirname = (char *)NULL;
++
++ if (filename && *filename == '+')
++ {
++ char *mh_path = get_mh_path ();
++
++ if (filename[1] == '/' || filename[1] == '.')
++ {
++ dirname = (char *)xmalloc (1 + strlen (filename));
++
++ strcpy(dirname, filename+1);
++
++ return dirname;
++ }
++
++ if (mh_path)
++ {
++ dirname = (char *)xmalloc (1 + strlen (filename) + strlen (mh_path));
++
++ strcpy (dirname, mh_path);
++ strcat (dirname, "/");
++ strcat (dirname, filename+1);
++
++ return dirname;
++ }
++ }
++ return (char *)NULL;
++ }
+
+
+ /*
+
diff --git a/CWRU/misc/bison b/CWRU/misc/bison
new file mode 100755
index 0000000..5dcd3a8
--- /dev/null
+++ b/CWRU/misc/bison
@@ -0,0 +1,26 @@
+#! /bin/sh
+#
+# bison -- just call yacc
+#
+
+# Copyright (C) 1996-2002 Free Software Foundation, Inc.
+#
+# This program 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.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+if [ "$1" = '-y' ]; then
+ shift
+fi
+
+exec /usr/bin/yacc ${1+"$@"}
diff --git a/CWRU/misc/errlist.c b/CWRU/misc/errlist.c
new file mode 100644
index 0000000..3970ba1
--- /dev/null
+++ b/CWRU/misc/errlist.c
@@ -0,0 +1,57 @@
+/*
+ * If necessary, link with lib/sh/libsh.a
+ */
+
+/* Copyright (C) 1998-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. */
+
+#include <stdio.h>
+#include <errno.h>
+
+extern char *strerror();
+
+extern int sys_nerr;
+
+int
+main(c, v)
+int c;
+char **v;
+{
+ int i, n;
+
+ if (c == 1) {
+ for (i = 1; i < sys_nerr; i++)
+ printf("%d --> %s\n", i, strerror(i));
+ } else {
+ for (i = 1; i < c; i++) {
+ n = atoi(v[i]);
+ printf("%d --> %s\n", n, strerror(n));
+ }
+ }
+ exit (0);
+}
+
+programming_error(a, b)
+char *a;
+int b;
+{
+}
+
+fatal_error()
+{
+}
diff --git a/CWRU/misc/hpux10-dlfcn.h b/CWRU/misc/hpux10-dlfcn.h
new file mode 100644
index 0000000..69b626e
--- /dev/null
+++ b/CWRU/misc/hpux10-dlfcn.h
@@ -0,0 +1,63 @@
+/*
+ * HPUX 10.x stubs to implement dl* in terms of shl*
+ *
+ * Not needed for later versions; HPUX 11.x has dlopen() and friends.
+ *
+ * configure also needs to be faked out. You can create a dummy libdl.a
+ * with stub entries for dlopen, dlclose, dlsym, and dlerror:
+ *
+ * int dlopen() { return(0);}
+ * int dlclose() { return(0);}
+ * int dlsym() { return(0);}
+ * int dlerror() { return(0);}
+ *
+ * This has not been tested; I just read the manual page and coded this up.
+ *
+ * According to the ld manual page, you need to link bash with -dld and add
+ * the -E flag to LOCAL_LDFLAGS.
+ */
+
+/* Copyright (C) 1998-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. */
+
+#if !defined (__HPUX10_DLFCN_H__)
+
+#define __HPUX10_DLFCN_H__
+
+#include <dl.h>
+#include <errno.h>
+
+#ifndef errno
+extern int errno;
+#endif
+
+#define RTLD_LAZY BIND_DEFERRED
+#define RTLD_NOW BIND_IMMEDIATE
+#define RTLD_GLOBAL DYNAMIC_PATH
+
+char *bash_global_sym_addr;
+
+#define dlopen(file,mode) (void *)shl_load((file), (mode), 0L)
+
+#define dlclose(handle) shl_unload((shl_t)(handle))
+
+#define dlsym(handle,name) (bash_global_sym_addr=0,shl_findsym((shl_t *)&(handle),name,TYPE_UNDEFINED,&bash_global_sym_addr), (void *)bash_global_sym_addr)
+
+#define dlerror() strerror(errno)
+
+#endif /* __HPUX10_DLFCN_H__ */
diff --git a/CWRU/misc/open-files.c b/CWRU/misc/open-files.c
new file mode 100644
index 0000000..aa4ab07
--- /dev/null
+++ b/CWRU/misc/open-files.c
@@ -0,0 +1,35 @@
+/* open-files -- report files a process has open */
+
+/* Copyright (C) 1989-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. */
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/file.h>
+#include <stdio.h>
+
+main()
+{
+ register int i;
+
+ for (i = 0; i < getdtablesize(); i++) {
+ if (fcntl(i, F_GETFD, 0) != -1)
+ fprintf(stderr, "fd %d: open\n", i);
+ }
+ exit(0);
+}
diff --git a/CWRU/misc/sigs.c b/CWRU/misc/sigs.c
new file mode 100644
index 0000000..2c16935
--- /dev/null
+++ b/CWRU/misc/sigs.c
@@ -0,0 +1,47 @@
+/* sigs - print signal dispositions for a process */
+
+/* Copyright (C) 1990-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. */
+
+#include <signal.h>
+#include <stdio.h>
+
+extern char *sys_siglist[];
+
+typedef void sighandler();
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+ register int i;
+ sighandler *h;
+
+ for (i = 1; i < NSIG; i++) {
+ h = signal(i, SIG_DFL);
+ if (h != SIG_DFL) {
+ if (h == SIG_IGN)
+ fprintf(stderr, "%d: ignored (%s)\n", i, sys_siglist[i]);
+ else
+ fprintf(stderr, "%d: caught (%s)\n", i, sys_siglist[i]);
+ }
+ }
+ exit(0);
+}
+
+
diff --git a/CWRU/misc/sigstat.c b/CWRU/misc/sigstat.c
new file mode 100644
index 0000000..2252a85
--- /dev/null
+++ b/CWRU/misc/sigstat.c
@@ -0,0 +1,226 @@
+/*
+ * sigstat - print out useful information about signal arguments
+ *
+ * Chet Ramey
+ * chet@po.cwru.edu
+ */
+
+/* Copyright (C) 1991-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. */
+
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
+
+extern char *strrchr();
+static char *signames[NSIG];
+
+char *progname;
+
+void sigstat();
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+ register int i;
+ char *t;
+
+ if (t = strrchr(argv[0], '/'))
+ progname = ++t;
+ else
+ progname = argv[0];
+ init_signames();
+ if (argc == 1) {
+ for (i = 1; i < NSIG; i++)
+ sigstat(i);
+ exit(0);
+ }
+ for (i = 1; i < argc; i++)
+ sigstat(atoi(argv[i]));
+ exit(0);
+}
+
+void
+sigstat(sig)
+int sig;
+{
+ struct sigaction oact;
+ char *signame;
+ sigset_t set, oset;
+ int blocked;
+
+ if (sig < 0 || sig >= NSIG) {
+ fprintf(stderr, "%s: %d: signal out of range\n", progname, sig);
+ return;
+ }
+ signame = signames[sig];
+ sigemptyset(&oset);
+ sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
+ if (sigismember(&oset, sig))
+ printf("%s: signal is blocked\n", signame);
+ sigaction(sig, (struct sigaction *)NULL, &oact);
+ if (oact.sa_handler == SIG_IGN)
+ printf("%s: signal is ignored\n", signame);
+ else if (oact.sa_handler == SIG_DFL)
+ printf("%s: signal is defaulted\n", signame);
+ else
+ printf("%s: signal is trapped (?)\n", signame);
+}
+
+init_signames()
+{
+ register int i;
+ bzero(signames, sizeof(signames));
+
+#if defined (SIGHUP) /* hangup */
+ signames[SIGHUP] = "SIGHUP";
+#endif
+#if defined (SIGINT) /* interrupt */
+ signames[SIGINT] = "SIGINT";
+#endif
+#if defined (SIGQUIT) /* quit */
+ signames[SIGQUIT] = "SIGQUIT";
+#endif
+#if defined (SIGILL) /* illegal instruction (not reset when caught) */
+ signames[SIGILL] = "SIGILL";
+#endif
+#if defined (SIGTRAP) /* trace trap (not reset when caught) */
+ signames[SIGTRAP] = "SIGTRAP";
+#endif
+#if defined (SIGABRT) /* */
+ signames[SIGABRT] = "SIGABRT";
+#endif
+#if defined (SIGIOT) /* IOT instruction */
+ signames[SIGIOT] = "SIGIOT";
+#endif
+#if defined (SIGEMT) /* EMT instruction */
+ signames[SIGEMT] = "SIGEMT";
+#endif
+#if defined (SIGFPE) /* floating point exception */
+ signames[SIGFPE] = "SIGFPE";
+#endif
+#if defined (SIGKILL) /* kill (cannot be caught or ignored) */
+ signames[SIGKILL] = "SIGKILL";
+#endif
+#if defined (SIGBUS) /* bus error */
+ signames[SIGBUS] = "SIGBUS";
+#endif
+#if defined (SIGSEGV) /* segmentation violation */
+ signames[SIGSEGV] = "SIGSEGV";
+#endif
+#if defined (SIGSYS) /* bad argument to system call */
+ signames[SIGSYS] = "SIGSYS";
+#endif
+#if defined (SIGPIPE) /* write on a pipe with no one to read it */
+ signames[SIGPIPE] = "SIGPIPE";
+#endif
+#if defined (SIGALRM) /* alarm clock */
+ signames[SIGALRM] = "SIGALRM";
+#endif
+#if defined (SIGTERM) /* software termination signal from kill */
+ signames[SIGTERM] = "SIGTERM";
+#endif
+#if defined (SIGCLD) /* Like SIGCHLD. */
+ signames[SIGCLD] = "SIGCLD";
+#endif
+#if defined (SIGPWR) /* Magic thing for some machines. */
+ signames[SIGPWR] = "SIGPWR";
+#endif
+#if defined (SIGPOLL) /* For keyboard input? */
+ signames[SIGPOLL] = "SIGPOLL";
+#endif
+#if defined (SIGURG) /* urgent condition on IO channel */
+ signames[SIGURG] = "SIGURG";
+#endif
+#if defined (SIGSTOP) /* sendable stop signal not from tty */
+ signames[SIGSTOP] = "SIGSTOP";
+#endif
+#if defined (SIGTSTP) /* stop signal from tty */
+ signames[SIGTSTP] = "SIGTSTP";
+#endif
+#if defined (SIGCONT) /* continue a stopped process */
+ signames[SIGCONT] = "SIGCONT";
+#endif
+#if defined (SIGCHLD) /* to parent on child stop or exit */
+ signames[SIGCHLD] = "SIGCHLD";
+#endif
+#if defined (SIGTTIN) /* to readers pgrp upon background tty read */
+ signames[SIGTTIN] = "SIGTTIN";
+#endif
+#if defined (SIGTTOU) /* like TTIN for output if (tp->t_local&LTOSTOP) */
+ signames[SIGTTOU] = "SIGTTOU";
+#endif
+#if defined (SIGIO) /* input/output possible signal */
+ signames[SIGIO] = "SIGIO";
+#endif
+#if defined (SIGXCPU) /* exceeded CPU time limit */
+ signames[SIGXCPU] = "SIGXCPU";
+#endif
+#if defined (SIGXFSZ) /* exceeded file size limit */
+ signames[SIGXFSZ] = "SIGXFSZ";
+#endif
+#if defined (SIGVTALRM) /* virtual time alarm */
+ signames[SIGVTALRM] = "SIGVTALRM";
+#endif
+#if defined (SIGPROF) /* profiling time alarm */
+ signames[SIGPROF] = "SIGPROF";
+#endif
+#if defined (SIGWINCH) /* window changed */
+ signames[SIGWINCH] = "SIGWINCH";
+#endif
+#if defined (SIGLOST) /* resource lost (eg, record-lock lost) */
+ signames[SIGLOST] = "SIGLOST";
+#endif
+#if defined (SIGUSR1) /* user defined signal 1 */
+ signames[SIGUSR1] = "SIGUSR1";
+#endif
+#if defined (SIGUSR2) /* user defined signal 2 */
+ signames[SIGUSR2] = "SIGUSR2";
+#endif
+#if defined (SIGMSG) /* HFT input data pending */
+ signames[SIGMSG] = "SIGMSG";
+#endif
+#if defined (SIGPWR) /* power failure imminent (save your data) */
+ signames[SIGPWR] = "SIGPWR";
+#endif
+#if defined (SIGDANGER) /* system crash imminent */
+ signames[SIGDANGER] = "SIGDANGER";
+#endif
+#if defined (SIGMIGRATE) /* migrate process to another CPU */
+ signames[SIGMIGRATE] = "SIGMIGRATE";
+#endif
+#if defined (SIGPRE) /* programming error */
+ signames[SIGPRE] = "SIGPRE";
+#endif
+#if defined (SIGGRANT) /* HFT monitor mode granted */
+ signames[SIGGRANT] = "SIGGRANT";
+#endif
+#if defined (SIGRETRACT) /* HFT monitor mode retracted */
+ signames[SIGRETRACT] = "SIGRETRACT";
+#endif
+#if defined (SIGSOUND) /* HFT sound sequence has completed */
+ signames[SIGSOUND] = "SIGSOUND";
+#endif
+
+ for (i = 0; i < NSIG; i++)
+ if (signames[i] == (char *)NULL) {
+ signames[i] = (char *)malloc (16);;
+ sprintf (signames[i], "signal %d", i);
+ }
+}
diff --git a/CWRU/sh-redir-hack b/CWRU/sh-redir-hack
new file mode 100644
index 0000000..413b297
--- /dev/null
+++ b/CWRU/sh-redir-hack
@@ -0,0 +1,15 @@
+Add to `subshell' production in parse.y and recompile -DREDIRECTION_HACK to
+get `< xx (command)' sh compatibility.
+
+ | redirections '(' list ')'
+ {
+#if defined (REDIRECTION_HACK)
+ /* XXX - C News sh compatibility hack - XXX */
+ $3->redirects = $1;
+ $3->flags |= CMD_WANT_SUBSHELL;
+ $$ = $3;
+#else
+ yyerror ();
+ YYABORT;
+#endif
+ }