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 if it's present {execute_cmd,findcmd,test}.c - don't include , 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 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 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 , 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 cygnus 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 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 , define HAVE_STDINT_H if found - check for intmax_t in , 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 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 - 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 , 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 for definition of isalpha() bashhist.h - add prototypes for extern function declarations flags.c - include bashhist.h for extern function declarations mksyntax.c - include 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 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 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 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 for legal_number, etc. - add prototype for inet_aton extern declaration lib/sh/clock.c - include 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 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 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 - add prototypes to extern declarations builtins/shopt.def - add prototypes to static function declarations builtins/{fc,umask,wait}.def, builtins/{bashgetopt,common}.c - include 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 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 instead of 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 , 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 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 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 to do it - don't use local definitions of isblank, et al.; rely on macros from 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 with BASH_HEADER_INTTYPES - change type checks for intmax_t, uintmax_t to not attempt to include - 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 ; separate so it can be AC_REQUIREd - AC_REQUIRE([BASH_HEADER_INTTYPES]) in BASH_CHECK_TYPE - include 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 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 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