diff options
Diffstat (limited to 'CWRU')
-rw-r--r-- | CWRU/PLATFORMS | 31 | ||||
-rw-r--r-- | CWRU/README | 20 | ||||
-rw-r--r-- | CWRU/changelog | 12477 | ||||
-rw-r--r-- | CWRU/mh-folder-comp | 449 | ||||
-rwxr-xr-x | CWRU/misc/bison | 26 | ||||
-rw-r--r-- | CWRU/misc/errlist.c | 57 | ||||
-rw-r--r-- | CWRU/misc/hpux10-dlfcn.h | 63 | ||||
-rw-r--r-- | CWRU/misc/open-files.c | 35 | ||||
-rw-r--r-- | CWRU/misc/sigs.c | 47 | ||||
-rw-r--r-- | CWRU/misc/sigstat.c | 226 | ||||
-rw-r--r-- | CWRU/sh-redir-hack | 15 |
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<OSTOP) */ + 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 + } |