8 - don't automatically use GNU malloc on FreeBSD, the builtin one
9 is supposed to be better (but doesn't have the debugging hooks)
12 - check that full_pathname(command) doesn't return NULL because of
13 inaccessible parent directories
19 - broke the code that opens a file for output redirection when in
20 noclobber mode out into a separate function: noclobber_open().
21 This tries to avoid race conditions and file replacement between
25 - make sure pat_subst does not run off the end of its return
26 string when copying the unmatched portion of the input string
31 - don't install readline.3 by default
34 - removed an unnecessary check for string[i] being non-null in
39 support/config.{sub,guess}
40 - merged in changes from config.sub in autoconf-2.12 distribution
42 lib/readline/readline.c
43 - in rl_newline, only call _rl_vi_done_inserting and _rl_vi_reset_last
44 if readline is currently in vi mode
46 lib/readline/display.c
47 - corrected a misuse of inv_lbreaks where vis_lbreaks was wanted in
48 the code that decides whether the cursor is at the beginning of
49 an otherwise-empty line
54 - fixed a typo, thanks to eggert@twinsun.com
57 - new test, BASH_STRUCT_DIRENT_D_FILENO, testing for d_fileno member
61 - call BASH_STRUCT_DIRENT_D_FILENO
64 - new #define for STRUCT_DIRENT_HAS_D_FILENO
66 lib/posixheaders/posixdir.h
67 - only define d_fileno as d_ino if STRUCT_DIRENT_HAS_D_INO is defined
68 and STRUCT_DIRENT_HAS_D_FILENO is not defined. This fixed the
69 problem of compiling getcwd.c on SunOS4.1.4 with cc
73 lib/readline/complete.c
74 - fix a memory-used-after-freed bug reported by Andreas Schwab
77 - call BASH_CHECK_SOCKLIB only if getpeername is not found in libc
78 (ac_cv_func_getpeername = no)
84 - change #define guard to _SH_GETOPT_H to avoid similar guards in
85 /usr/include/getopt.h (Dec OSF/1 4.x, for example)
88 - fix assign_array_from_string so that it rejects attempts to assign
92 - fix verify_substring_values to handle offsets that are past the
93 end or before the beginning (in the case of a negative offset)
94 of the expanded variable value
99 - fix a problem where any completion after a `cmd` command
100 substitution would inappropriately attempt command completion,
101 even if the previous command substitution was correctly closed
103 builtins/evalstring.c
104 - unwind_protect remember_on_history even if the shell is not
105 interactive, since history can now be used in scripts, and
106 `source' will turn off interactive_shell before calling
110 - new function get_job_by_pid(pid, block) to translate a pid to
111 a job number. The block argument says whether or not to block
115 - new extern declaration for get_job_by_pid
118 - call get_job_by_pid if an argument appears to be a pid rather
122 - configure --without-gnu-malloc automatically on MachTen 4.x
125 - change to mindist() so that a best guess of `.' returns 3,
126 which means not reasonable
128 lib/posixheaders/memalloc.h
129 - changed hpux_9 to __hpux, since the new config stuff doesn't
133 - fix parameter_brace_patsub to handle null patterns (doesn't
137 - slight change to bzero replacement
140 - changed TEMP to be /tmp/bbug.$$ as a sop to systems with 14-char
144 - add note to POSIX Mode section that the output of `set' when
145 invoked without arguments is sorted when in POSIX mode
150 - a couple of changes prompted by a `gcc -Wall'
153 - changed ASSIGN_RETURN macro to use the do...while(0) idiom to
154 avoid problems with its multiple statements
157 - a bad identifier given to readonly or export without an assignment
158 statement (e.g. `readonly a[5]') is an error, but not an assignment
159 error (i.e., return EXECUTION_FAILURE rather than EX_BADASSIGN)
161 tests/{{array,new-exp}.,tilde-}tests
162 - added `set +o posix' at the beginning to disable POSIX mode, which
163 causes some of the tests to fail. Some systems (e.g. LINUX-FT),
164 set POSIXLY_CORRECT by default
167 - added a warning if $UID is 0 to the effect that the test suite
168 should not be run as root
169 - worked around the `noread' and `nowrite' tests failing when run
173 - began removing the remains of the STANDALONE code, since test is
174 included in GNU shellutils
178 lib/readline/{readline,display}.c
179 - a couple of slight changes to build on Win95 using djgpp (reported
180 by x-aes@telelogic.se)
183 - changed TERMCAP_LIBDIR to TERM_LIBDIR, so building the termcap
184 library (if necessary) should work now
187 - new function: quote_word_break_characters(), to backslash-quote
188 characters in a filename that the readline completion code would
190 - change bash_quote_filename to call quote_word_break_characters if
191 the completion quoting style says to use backslashes
192 - add `:' to rl_filename_quote_characters, since it's part of
193 filename_word_break_characters
195 lib/posixheaders/posixjmp.h
196 - new file, with half of bashjmp.h
197 - posixjmp.h and lib/readline/posixjmp.h are symlinks to this file
200 - include "posixjmp.h" for possible redefinitions of setjmp/longjmp
206 - bad options now cause the standard shell usage message (a subset
207 of what `bash --help' prints) to be displayed on stderr
210 - don't free the trap command for a DEBUG trap in
211 restore_default_signal if SIG_INPROGRESS is set -- there's already
212 a pointer saved to the old value in _run_trap_internal. This
213 makes bashdb run better, too
215 examples/bashdb/bashdb.{pre,fns}
216 - a couple of minor fixes; it actually has a chance of working now
221 - add a define for <dlfcn.h>, HAVE_DLFCN_H
224 - look for <dlfcn.h>, define HAVE_DLFCN_H if found
227 - include <dlfcn.h> only if HAVE_DLFCN_H is defined
229 lib/readline/display.c
230 - renamed clear_to_eol to _rl_clear_to_eol and made it global, so
231 other library files (readline.c) can use it
232 - new function _rl_clear_screen, to clear the screen with the right
233 termcap escape sequence
235 lib/readline/readline.c
236 - call _rl_clear_to_eol and _rl_clear_screen instead of using tputs
237 - extern declarations for _rl_clear_to_eol and _rl_clear_screen
242 - fixed a problem in make_default_mailpath() where a slash was not
243 added between the default mail directory and the username
248 - added a fourth parameter to ansicstr: the length of the returned
252 - changed declaration of ansicstr
255 - changed call to ansicstr -- saves a call to strlen
258 - changed call to ansicstr
259 - if do_v9 is non-zero, use putchar to output the string instead
260 of printf, since there may be embedded NULL characters
262 doc/{bash.1,bashref.texi}, builtins/trap.def
263 - modified the `trap' documentation to make it clearer that trap
264 takes multiple signal specs as arguments
266 jobs.c, nojobs.c, jobs.h
267 - renamed initialize_jobs to initialize_job_control, added an
271 - set shell_tty to fileno(stderr) in initialize_job_control if
272 the shell is not interactive. This fixes the problem of bad
273 tty pgrps when monitor mode is turned on in a non-interactive
277 - made initialize_terminating_signals do only that; moved the rest
278 of the code that used to be there into a new function:
279 initialize_shell_signals, which calls initialize_terminating_signals
280 if the shell is interactive
281 - initialize_terminating_signals is now extern
282 - made reset_terminating_signals return immediately if
283 termsigs_intitialized is zero, meaning that
284 initialize_terminating_signals has not been called
287 - new extern declaration for initialize_terminating_signals
290 - call initialize_terminating_signals from set_signal if sig is
291 EXIT_TRAP and the shell is not interactive. Since the terminating
292 signals do not need to be initialized until a trap on exit is
293 set, not doing that at startup should result in a speed increase
297 - save and restore command->flags in time_command, so you can use
298 `time command' in a loop
302 lib/readline/display.c
303 - fix redisplay code to wrap correctly if the prompt is longer than
304 the screen width (reported by bos@Eng.Sun.COM)
307 - don't include <setjmp.h>, it's not needed
309 lib/readline/{util,readline}.c
310 - include "posixjmp.h" instead of <setjmp.h>
311 - readline_top_level is now a `procenv_t' instead of a `jmp_buf'
312 (now readline uses the correct posix semantics for preserving
313 the signal mask and other things across longjmp)
316 - fixes to push_string/pop_string to make them more general -- they
317 now can be used generally, instead of having to be associated
318 with an alias being expanded
319 - fixes to the parser so that it parses (( ls abc; ls def); ls ghi)
320 as a nested subshell command for backwards compatibility. Broke
321 the double-paren expression parsing off into a new function:
322 parse_arith_cmd, called from read_token when a `((' is seen. If
323 it looks like an arithmetic command, return `let' and set things
324 up so that the expression is returned as a double-quoted string
325 by the next call to read_token. If it's a nested subshell, push
326 the text we parsed onto the list of strings for later consumption
330 - fix glob_vector so it doesn't short-circuit checking a filename if
331 it starts with a `.' and the pattern starts with `\.' (if
332 noglob_dot_filenames is set). This makes `".junk2"*' match
333 `.junk2.txt' correctly
338 - ask for confirmation before sending the bug report
341 - when editing and re-executing a multiline command, make sure
342 current_command_line_count is initialized and then incremented
343 for each line read from the file so that the lines added to
344 the history list by fc_replhist and fc_addhist obey the `lithist'
345 and `cmdhist' shopt options. Reported by tibbitts@pb.seflin.org
349 lib/readline/readline.h
350 - added a couple of extern declarations for variables described in
351 the documentation but heretofore undeclared
354 - try to catch some classes of integer overflows before calling
360 - push and pop a `(' delimiter while parsing a $(...) construct, so
361 the history code doesn't try to inappropriately add a `;' when
362 a newline appears in the `...'
365 - new macro, BASH_STRUCT_WINSIZE, which looks for `struct winsize'
366 in <sys/ioctl.h> (or one of the files it includes)
369 - call BASH_STRUCT_WINSIZE
370 - slightly reorganized the calls to bash-specific macros
373 - add an `#undef STRUCT_WINSIZE_IN_SYS_IOCTL'
376 - only look in sys/ptem.h for struct winsize if
377 STRUCT_WINSIZE_IN_SYS_IOCTL is not defined to cpp
381 .{distribution,patchlevel}
382 - renamed to _{distribution,patchlevel}
385 - create a variable BASHVERS, from the contents of _distribution,
386 and a variable BASHPATCH, from the contents of _patchlevel,
387 (using m4 magic so we don't have to distribute .distribution
388 and .patchlevel) and substitute them into Makefile.in
391 - use Version and PatchLevel variables instead of the contents of
392 .distribution and .patchlevel, respectively. These are set by
394 - removed `.machine' from targets and dependencies
397 - new shell script to handle updating version.h, replaces mkversion.c
398 (which is now overkill)
401 - don't bother with writing .distribution and .patchlevel files,
402 since they're no longer distributed
405 - simple bash script to make new version files. It can increment
406 the major or minor version numbers or patchlevel, or take a
407 completely new version number (e.g., 2.01) as an argument
410 - added support for the `install-info' command to update the info
411 directory file after installing bash.info
416 - fix core dump with `help --'
419 - make call_expand_word_internal obey the convention that if
420 expand_word_internal returns &expand_word_{fatal,error}, then
421 w->word has already been freed
422 - return &expand_word_fatal from expand_word_internal if the shell
423 is not interactive and `set -u' has been executed
426 - moved group_member from test.c to general.c
429 - moved extern declaration of group_member from externs.h to general.h
432 - broke the code that initializes the group array out into a new
433 function, initialize_group_array()
434 - initialize_group_array() now initializes an array even if the OS
435 does not have getgroups(). If it does not, an array with one
436 element (the real gid) is created
437 - call sysconf(_SC_NGROUPS_MAX) if sysconf is available and
438 _SC_NGROUPS_MAX is defined
439 - new function, char **get_group_list(int *), to return an array
440 of strings made from the groups list
443 - new dynamic array variable: GROUPS, expands to the group set as
444 obtained with getgroups() (or whatever initialize_group_array()
447 doc/{bash.{1,html},bashref.texi}
448 - added description of GROUPS variable
451 - before modifying the setgid bit on /tmp/setgid, try to change its
452 group to ${GROUPS[0]}
457 - new autconf macro, BASH_MISC_SPEED_T, to see if speed_t is defined
461 - call BASH_MISC_SPEED_T
464 - add `#undef SPEED_T_IN_SYS_TYPES'
467 - include `rltty.h' if HAVE_TERMCAP_H and __linux__ are defined, but
468 SPEED_T_IN_SYS_STYPES is not, before including <termcap.h>
470 support/mksignames.c, siglist.c
471 - add support for 4.4 BSD SIGLOST
474 - add support for recognizing QNX based on `uname' output
477 - make sure recho and zecho are compiled with the same set of CC
478 options as the rest of the sources
481 - change calls to rl_generic_bind to cast the third argument to
482 (char *) where necessary
485 - two new flags: CMD_AMPERSAND (currently unused), and CMD_STDIN_REDIR,
486 which means that this command should have its standard input
487 redirected from /dev/null if there are not any explicit redirections
491 - a redirection of type r_inputa_direction is no longer added at the
492 beginning of the redirection chain for an async command;
493 CMD_STDIN_REDIR is set in the flags instead
494 - new function: stdin_redirects: returns the number of redirections to
495 stdin in a chain of redirections
496 - new functions: async_redirect_stdin() to open /dev/null and make it
498 - changes to make CMD_STDIN_REDIR propagate to all of the necessary
499 functions (like execute_simple_command)
500 - execute_disk command now takes the flags from simple_command rather
501 than just the CMD_NO_FORK flag as its last argument
502 - various places after make_child is executed (in the child) check for
503 CMD_STDIN_REDIRECT (and no stdin redirections or piping) and call
505 - stdin_redir is now global
508 - set stdin_redir to 0 just before calling execute_command so it
509 gets reset to a known value and doesn't persist across commands
514 - add a stub function for ulimit(2) on systems without HAVE_RESOURCE
515 or HAVE_ULIMIT that just sets errno to EINVAL and returns -1 --
516 QNX is one such system
519 - pre_process_line needs to protect all occurrences of hist_verify
523 - hist_verify needs to be protected with #ifdef READLINE, not
528 support/config.{guess,sub}, configure.in
529 - chages to better support the Harris Night Hawk
532 - changes for things pointed out by gcc -Wall
535 - make sure -DSHELL is included in CCFLAGS so that globbing is
539 - extern declaration for botch: if botch is #defined, it should be
540 the name of a void function
542 configure.in,Makefile.in,builtins/Makefile.in,
543 lib/{glob,malloc,readline,tilde}/Makefile.in
544 - add a LOCAL_DEFS variable, substituted from configure into the
545 various Makefiles. It's set to -DSHELL, so that define gets
546 passed to all sub-makes without doing anything special
548 lib/readline/readline.c
549 - change to rl_digit_loop to make it compatible with GNU emacs:
550 if a key bound to `universal-argument' is read after reading
551 some digits, it terminates the argument but is otherwise
552 ignored. This is how people can insert repeated digits
554 doc/{bash.{1,html},readline.3}, lib/readline/doc/rluser.texinfo
555 - changed description of `universal-argument' to describe how
556 to terminate a numeric argument
561 - changed kill_pid to diddle the job and process data structures
562 if we're sending SIGCONT to a stopped job with `kill' so that
563 the shell knows the job is running again. ksh93 does this
568 - changed bcopy to FASTCOPY
571 - changed pointer arithmetic in delete_builtin to just subtract
572 the head of the builtins list (shell_builtins) from a pointer
573 to the builtin to be deleted (b) to find its index in the list
579 - when using old-style keynames to bind to a new-style macro,
580 pass an array of type (unsigned char *) to rl_macro_bind
583 - change sh_getopt to return EOF if nextchar is empty or NULL
584 and sh_optind is greater than argc. This can happen if a
585 script mixes calls to `getopts' with calls to `shift'
590 - fixed make_command_string_internal so that commands with the
591 CMD_TIME_POSIX flag set print `time -p' instead of `time'
592 - changed print_redirection_list so the here documents are
593 printed after all the other redirections, and followed by a
594 newline (rather than a possible semicolon)
595 - added a new variable, was_heredoc, to avoid adding a semicolon
596 at the beginning of an empty line after printing the heredoc
600 - don't put the gnu_argv_flags into the environment any more; it's
601 proven to be a bad idea
604 - set LOCAL_CFLAGS to `-DSunOS5' on Solaris 5.5[.x]
607 - only call fflush() after printing each word on SunOS 5.5, since
608 that's the system with the bug that prompted its inclusion in
612 - added support for more system-specific signals from AIX 4.2,
613 changed initialization order so that system-specific signals
614 are done first, before the common signals
619 - broke the code that creates a file containing the text of a
620 here document out into a separate function: here_doc_to_fd
621 - create the temp file used for a here document with mode 600
622 - open the temp file used for a here document with O_EXCL
625 - changed the uid members of struct user_info to be of type uid_t
626 and the gid members to be of type gid_t
629 - changed the type of the `type' argument to init_yy_io() to be
630 `enum stream_type', since that's what's always passed
633 - changed the function prototype for init_yy_io so the third arg is
634 type `enum stream_type'
637 - added a prototype for getcwd, if HAVE_GETCWD is not defined
640 - changed all variables that are used as arguments to or save the
641 return value from umask(2) to be of type mode_t
642 - changed print_symbolic_umask to take an argument of type mode_t
647 - if old_sigint_handler is set to SIG_DFL, as it will be in a script
648 without a trap on SIGINT installed, call termination_unwind_protect()
649 directly from waitchld()
654 - added a section before the call to BASH_CHECK_LIB_TERMCAP to
655 set a variable prefer_curses on some systems (AIX, for one)
658 - in BASH_CHECK_LIB_TERMCAP, don't return -ltermcap if $prefer_curses
661 lib/readline/Makefile.in
662 - redid the dependencies
667 - include `bashansi.h' instead of stdlib.h and string.h
669 error.c, siglist.c, xmalloc.c, builtins/{common,evalfile,mkbuiltins,psize}.c,
670 builtins/{exec,exit,fg_bg,hash,history}.def
671 - include `bashtypes.h' instead of directly including <sys/types.h>
674 - include ../bashtypes.h and ../posixstat.h instead of bashtypes.h
677 builtins/mkbuiltins.c
678 - include ../posixstat.h instead of <sys/stat.h>
681 - include `bashtypes.h' if RLIMTYPE is defined, so we can fetch
682 a definition of quad_t (or whatever) from <sys/types.h> before
683 using it in a function prototype
685 Makefile.in, builtins/Makefile.in
686 - updated dependencies
691 - new function, set_posix_mode, called when `set [-+]o posix'
692 or `shopt -[su] -o posix' is executed. It sets or unsets
693 $POSIXLY_CORRECT and calls sv_strict_posix
696 - in sv_strict_posix, call posix_readline_initialize only if
697 the shell is interactive (interactive_shell != 0)
700 - if we are acting like `sh', call posix_readline_initialize
701 if the shell is interactive
702 - moved the code that does posix.2 mode initialization after
703 interactive_shell is set, and call posix_readline_initialize
704 if interactive_shell is non-zero
707 - renamed to unionwait.h, since that is what it defines
710 - moved the POSIX 1003.1 job control defines here from jobs.h
713 - include `posixwait.h'
718 - if SHELL is defined, pass the contents of new-style command
719 substitution through without expanding brace constructs between
720 the parens -- let the subshell do it
723 - when brace-expanding words, preserve the flags (word->flags) if
724 brace expansion does not change the word. This fixes the problem
727 local -a avar=( ${PATH//: } );
730 - have shell_expand_line pass a copy of rl_line_buffer to expand_string
731 in case there are substitution errors and the string gets freed
736 - make sure that expland and explor set `lasttok' to LAND and LOR,
737 respectively, if they parse `&&' or `||'. This makes the
738 precedence code work right
741 - changes so that non-interactive shells exit immediately when a
742 parameter that is unset is referenced after `set -u' has been
743 executed causes the shell to exit immediately
748 - if `set -r' is executed, call maybe_make_restricted so that $PATH
749 and $SHELL are made read-only
752 - if `set -e' has been executed, and we're inverting a pipeline's
753 return status with `!', set CMD_IGNORE_RETURN so a failing
754 command does not inadvertently cause the shell to exit before
755 the exit status can be inverted. This is probably only a problem
756 with the `eval' builtin.
761 - add a missing argument of 0 to add_hashed_command
764 - job identifiers can be used in non-interactive shells as long as
765 job control has been turned on with `set -m'
768 - we want to be notified of stopped jobs if job_control is non-zero,
769 even if the shell is not interactive
772 - make sure shell_execve returns EX_NOTFOUND if execve fails and
773 errno is set to ENOENT
774 - makes sure execute_builtin saves the temporary environment to
775 builtin_env for the `eval' builtin, since it can destroy the
776 temporary environment when it calls parse_and_execute
779 - new variable: hist_last_line_added, set to 1 if the last command
780 line was added to the history successfully as a separate entry.
781 Used by `history' and `fc'
786 - save line number before executing trap command, because
787 parse_and_execute resets it to 1 and the trap command might
791 - change to executing_line_number to return trap_line_number if
792 the shell is currently running a trap
797 - change to time_command so that a `real' value of 0 does not
798 cause a divide-by-zero error when computing cpu percentage
800 lib/readline/signals.c
801 - if MUST_REINSTALL_SIGHANDLERS is defined, reinstall the SIGWINCH
802 handler in rl_handle_sigwinch
805 - `unset' now rejects attempts to unset names that are not valid
806 shell identifiers as errors
807 - add a description of `-o history' option to help text
810 - in parameter_brace_patsub, we want backslash removal done on
811 the replacement if (mflags & MATCH_QUOTED), since the code
812 in expand_word_internal will not do it. We need to call
813 expand_string_unsplit directly, since maybe_expand_string does
814 not do the right thing
819 - if execute_for_command finds that the iteration variable is readonly,
820 decrement loop_level before returning
823 - if the break count is <= 0, display an error message and break out
827 - if PATH is unset, and we're using command -p, we don't want PATH
828 to be set to the empty string when `command' completes
831 - POSIX.2 says `kill -l signum' prints the signal name without the
832 leading `SIG' prefix, so check for this_shell_builtin == kill_builtin
833 in display_signal_list
836 - when invoked without any arguments, `getopts' now prints a usage
842 - add a second argument to get_numeric_arg: if non-zero, the shell
843 exits on a bad argument; if not, the shell jumps to top_level
844 with a DISCARD argument, which aborts the current command
846 builtins/{break,exit,history,return,shift}.def
847 - change calls to get_numeric_argument
849 lib/readline/funmap.c
850 - add `dump-macros' to list of bindable names
852 lib/readline/readline.h
853 - added extern declaration for rl_prompt (it was apparently missing)
855 lib/readline/readline.c
856 - new internal function, _rl_init_line_state, which sets rl_point
857 and rl_end to 0, sets the_line to point to _rl_line_buffer, and
860 lib/readline/callback.c
861 - if a user's callback function does not clear the line, clear it
862 for him by calling _rl_init_line_state
867 - made the readline support functions #ifdef READLINE, so they're
868 not compiled into the shell unless readline is
871 - new function _rl_untranslate_macro_value, to expand meta-prefixes
872 and other special characters in a macro value for printing by
873 _rl_macro_dumper_internal
874 - call _rl_untranslate_macro_value in _rl_macro_dumper_internal to
875 get a printable version of the macro value
877 lib/readline/readline.c
878 - new variable, rl_dispatching, set to 1 when we call a function
881 lib/readline/readline.h
882 - extern declaration for rl_dispatching
884 lib/readline/complete.c
885 - make sure S_ISCHR and S_ISBLK are defined before using them
887 lib/readline/terminal.c
888 - add a new #define NEED_EXTERN_PC. Define this if the termcap
889 or curses libraries need `extern' before declarations of PC,
892 lib/readline/{readline,terminal,histfile}.c
893 - changes to compile on OS/2 with OS/2 `EMX' port of gcc, originally
894 sent by ilya@math.ohio-state.edu
897 - fixed a bug in set_shellopts that caused the shell to crash if
898 there were no shell options set
902 configure.in,Makefile.in
903 - choose run-all or run-minimal as the test script based on whether
904 the --enable-minimal-config option was given to configure
907 - fixed `export -p' and `readonly -p' so that they output `export'
908 or `readonly' when in POSIX mode, as POSIX.2 specifies
913 - make `readonly -a var=(...)' work just like `declare -ar var=(...)',
914 since the two logically mean the same
915 - `readonly -f' and `export -f' don't print the function definition
916 for each readonly or exported function, respectively, when in
920 - don't report status for processes killed by SIGPIPE if
921 DONT_REPORT_SIGPIPE is defined
924 - added a commented-out define for DONT_REPORT_SIGPIPE
927 - `time' can now be used to time background pipelines, and reports
928 the timing statistics when the pipeline completes
930 [bash-2.01-alpha1 frozen]
935 - move the parent end of the pipe file descriptor used for process
936 substitution to a high, unused file descriptor to avoid clashes
937 with redirections performed explicitly by a script
940 - added a `--with-curses' argument so curses can be forcibly chosen
941 over libtermcap (some Unix versions ship lousy termcap databases)
944 - new script to create _distribution and _patchlevel from values
945 contained in `configure'
948 - updated installation instructions
953 - if `getgroups' returns 0, make sure we add the primary group id
955 - if we have getgroups, and the primary gid is not in the array
956 getgroups returns, add it as group_array[0] and shuffle everything
957 up one element. This ensures that current_user.gid == group_array[0]
961 - changes to avoid stray variables in environment when the shell
962 version of printenv is used with bash as /bin/sh, running the
968 - spelling correction is no longer enabled by default
971 - if the shell's release status is alpha or beta, offer the option
972 of sending the bug report to the bash-testers mailing list as
978 - configure --without-gnu-malloc by default on *-sgi-irix6* because
979 their code needs 8-byte alignment
982 - ``' needs to be quoted with a backslash in double-quoted strings
985 - slight changes to the strcoll test, since AIX 4.2 returns -1, 0, or
986 1 from strcmp(3) but a numeric collation order difference from
992 - new redirection error code: HEREDOC_REDIRECT
995 - return HEREDOC_REDIRECT from do_redirection_internal when
996 here_document_to_fd cannot create the temp file for a here document
997 - changed redirection_error to print a meaningful message when
998 here document temp file creation fails (HEREDOC_REDIRECT)
1003 - changes to match_pattern_char: return 1 if the first char of the
1004 pattern is `?' only if the string is non-null; just return 1 if
1005 the first char of the pattern is `[' and the string is non-empty
1006 rather than try to re-implement the brace matching code from fnmatch
1009 - some changes from glibc-2.0.1 posix/fnmatch.c
1014 - only do the initialization of `ignoreeof' if the shell is
1016 - reset values of $SHLVL > 1000 to 1 in adjust_shell_level, and
1017 don't call itos, since we don't need its generality
1018 - new function, initialize_shell_level, just calls adjust_shell_level
1019 with argument of 1. If $SHLVL is unset, adjust_shell_level will
1020 deal with it correctly
1021 - change initialize_shell_variables to not malloc a copy of each
1022 environment variable, just keep two pointers into the env string:
1023 one for the name, one for the value
1024 - broke the code that computes the value of $BASH out into a separate
1025 function: get_bash_name
1026 - get_bash_name special-cases shell_name with a `./' prefix when
1028 - new function: set_home_var, sets $HOME to current_user.home_dir if
1029 it's not already set, calling get_current_user_info if
1030 current_user.home_dir is NULL
1031 - new function: set_shell_var, sets $SHELL to current_user.shell if
1032 it's not already set, calling get_current_user_info if
1033 current_user.shell is NULL
1034 - changed places that reference information in current_user to check
1035 for NULL values of the member they're interested in and call
1036 get_current_user_info if necessary
1039 - moved the code that sets up the information in current_user that
1040 comes from the password file into a new function,
1041 get_current_user_info
1042 - shell_initialize calls get_current_user_info only if the shell is
1046 - new extern declaration for get_current_user_info(), so variables.c
1052 - if SHELL is defined, user the current_user struct info to find
1053 the user's home directory rather than calling getpwuid
1058 - don't try to open /dev/tty when getting or setting the tty state
1059 and window size; use shell_tty instead
1060 - initialize shell_tty to standard error in initialize_job_control
1061 - only fetch the tty state initially if the shell is interactive
1064 - open /dev/tty with the O_NONBLOCK flag
1067 - changed all_vars so that it sorts its output all the time, not
1068 just when in POSIX mode. This means that the output of `set'
1069 and `export' will be sorted
1072 - in initialize_shell_options, only call parse_shellopts if we
1073 inherited $SHELLOPTS from the environment
1074 - make sure we call parse_shellopts from initialize_shell_options
1075 with a copy of the value of SHELLOPTS, in case one of the functions
1076 called while setting one of the variables modifies $SHELLOPTS
1078 lib/readline/readline.c
1079 - make sure that digit arguments don't change the state of
1083 - new file, printenv(1) clone, used to avoid environment variables
1084 that might be set automatically when using printenv.sh
1087 - if SHELL is defined, don't call getenv to get the value of $HOME,
1088 call get_string_value () directly
1092 lib/readline/histexpand.c
1093 - abstracted the `#ifdef SHELL' stuff that checked for special cases
1094 that should not be history expanded ([!...], ${!...}) into a call
1095 to a function that is the value of the
1096 new history_inhibit_expansion_function variable
1098 lib/readline/history.h
1099 - extern declaration for history_inhibit_expansion_function
1102 - new function, bash_history_inhibit_expansion, which checks for
1103 the special cases in which history expansion should be inhibited
1104 - changes to the various history initialization functions to
1105 set history_inhibit_expansion_function
1107 lib/readline/doc/hstech.texinfo
1108 - documented history_inhibit_expansion_function
1110 lib/readline/shell.c
1111 - new file, containing versions of the functions that are provided
1112 by bash when readline is linked as part of bash
1113 - new function: get_env_value(). If SHELL is defined, this calls
1114 get_string_value(). If SHELL is not defined, this calls getenv()
1116 lib/readline/histexpand.c
1117 - moved single_quote() to shell.c
1120 - moved savestring() to shell.c
1122 lib/readline/terminal.c
1123 - moved set_lines_and_columns() to shell.c
1125 lib/readline/Makefile.in, Makefile.in
1126 - added shell.c and shell.o to the appropriate variables that contain
1127 the files comprising the readline and history libraries
1129 lib/readline/signals.c
1130 - introduced two new cpp defines: HANDLE_JOB_SIGNALS and
1131 HANDLE_SIGTERM. When HANDLE_JOB_SIGNALS is defined, SIGTSTP,
1132 SIGTTIN, and SIGTTOU are caught and handled. When HANDLE_SIGTERM
1133 is defined, SIGTERM is caught and handled. These are both
1134 defined automatically if SHELL is not defined
1136 lib/readline/{bind,histfile,nls,readline,terminal}.c
1137 - call get_env_value instead of getenv(). This should remove the
1138 dependency on being able to redefine getenv() in oslib.c
1141 - added a missing argument of -1 to the call to list_minus_o_opts.
1142 Now `bash -o' lists all options, not just random ones depending
1143 on what's on the stack
1148 - change RLIM_INFINITY to the hard limit only if the hard limit is
1149 greater than the current (soft) limit
1152 - return immediately from flush_hash_table if the hash table passed
1158 - remove call to initialize_filename_hashing -- initialize the hash
1159 table the first time a hashed command has to be remembered
1162 - new file, with functions to perform filename hashing and lookup
1163 taken from builtins/hash.def and builtins/common.c
1164 - change to remember_filename -- call initialize_filename_hashing
1165 if hashing_initialized is 0
1168 - new file, mostly from builtins/hashcom.h, with extern function
1171 execute_cmd.c, builtins/{hash,type}.def
1172 - include hashcmd.h for hash function and type definitions
1174 builtins/{common.{c,h},hash.def}
1175 - moved hashing functions and declarations to hashcmd.c/hashcmd.h
1177 Makefile.in, builtins/Makefile.in
1178 - changed source and object file definitions and dependencies because
1179 of addition of hashcmd.h and hashcmd.c
1182 - return immediately from print_hashed_commands if hashed_commands
1183 is empty, indicating that the hash table has not been initialized
1188 - fixed translation of ESC in rl_untranslate_keyseq and
1189 rl_untranslate_macro_value
1191 lib/readline/{readline,kill}.c
1192 - added an argument to _rl_fix_point telling it whether or not to
1193 fix up the mark also; changed calls to _rl_fix_point to add the
1194 appropriate argument
1197 - changed the substitution delimiter in the `sed' commands that
1198 create bashbug from `:' to `%' to avoid conflicts with options
1204 - made the initial value and the default growth value for the
1205 printed command somewhat smaller -- we don't really need to
1206 allocate 4096 bytes for the printed command
1207 - added stdarg support to xprintf if PREFER_STDARG is defined
1210 - changed strip_trailing to take the index of the last character
1211 as the second argument, saving a (useless) call to strlen, since
1212 the caller already knows where the end of the string is
1215 - change call to strip_trailing in command_substitute to add the
1219 - changed extern declaration for strip_trailing
1223 Makefile.in, configure.in, lib/malloc/Makefile.in
1224 - changed the strategy for picking which `malloc' to include by
1225 having configure define a `malloc target' and the Makefile in
1226 lib/malloc implementing rules for that target
1231 - slightly changed the rules for remaking `parser-built': it is
1232 now a copy of y.tab.h, updated only when the contents of y.tab.h
1234 - everything that used to depend on y.tab.h now depends on
1239 execute_cmd.c, print_cmd.c
1240 - use #include <y.tab.h> so we pick up y.tab.h from the build
1241 directory instead of the source directory if it happens to be
1242 recreated in the build directory
1247 - fixed another problem with `pwd`/[TAB] thinking that the `/
1248 started an unclosed command substitution, generating errors
1253 - renamed bash_tilde_expansion_failure_hook to be
1254 bash_special_tilde_expansions, since that more accurately reflects
1256 - changed tilde_initialize so that there is no failure hook -- the
1257 special expansions are handled first with the preexpansion hook
1260 - new variable: tilde_expansion_preexpansion_hook -- if non-null, it
1261 points to a function that is called before standard tilde expansion
1265 - extern declaration for tilde_expansion_preexpansion_hook
1267 doc/{bash.{1,html},bashref.texi}
1268 - added optional open paren to description of `case' command syntax
1273 - on qnx, set and export a variable `NODE' which contains the QNX
1277 - QNX system can now handle pathnames with a leading `//'
1280 - added `-Dqnx' to LOCAL_CFLAGS on QNX machines
1282 lib/malloc/getpagesize.h
1283 - some systems need sysconf(_SC_PAGE_SIZE) to obtain the page size;
1284 added code to check for it
1289 - include the prototype for cprintf only if PREFER_STDARG is defined,
1290 otherwise just have a K&R-style forward function declaration
1293 - reduced the default number of buckets in a hash table to 53
1296 - prime the result string in tilde_expand by allocating a new string
1297 that's as long as the input string (+16 if a tilde appears in
1298 the string to be expanded). This should reduce the number of
1302 - broke the code that reads the output of a command substitution
1303 through the pipe to the subshell out into a separate function:
1304 read_comsub(). This does not use stdio, but rather reads
1305 directly from the pipe into a local 128-character buffer
1310 - some systems need both <sys/time.h> and <time.h>, so include both
1311 if it's possible, otherwise include <sys/time.h> (if present)
1313 lib/readline/rl{tty,defs}.h
1314 - moved includes of <sys/stream.h>, <sys/ptem.h>, etc. to rltty.h
1316 lib/readline/terminal.c
1317 - include rltty.h after rldefs.h
1320 - changes to make environment creation faster and use less memory
1321 (fewer malloc/free calls, too):
1323 o two new variables: export_env_index (how many environment
1324 strings are in export_env) and export_env_size (the
1325 number of slots for strings allocated in export_env)
1326 o added new function add_to_export_env, since adding the
1327 exported shell variables and shell functions does not
1328 need to search the export_env for a definition to supersede
1329 (we just cleared it out!)
1330 o renamed add_or_supersede to add_or_supersede_exported_var,
1331 since it always works on export_env, and changed the second
1332 argument to a flag saying whether or not to allocate a new
1333 copy of the string placed into the environment
1334 o changed calls to add_or_supersede to the new
1335 add_or_supersede_exported_var with the appropriate flags
1336 o don't free and reallocate export_env in maybe_make_export_env,
1337 just free the strings and start anew
1338 o prime the size of export_env from the total number of shell
1339 variables and shell functions -- this will always be enough
1340 for the exported shell functions and variables, and big
1341 enough most of the time for the entire environment
1344 - efficiency hack in bindpwd(): if PWD is exported, we will have to
1345 rebuild the entire exported environment after every time we change
1346 directories. What we do is see if array_needs_making changes value
1347 from 0 to 1 after bind_variable ("PWD", dirname) is called, and
1348 that PWD is exported. If that happens, we just replace the value
1349 of PWD in the exported environment with a call to
1350 add_or_supersede_exported_var
1353 - check calls to pre_process_line to make a fresh copy of the line
1354 if pre_process_line returns what it was passed, in preparation
1358 - pre_process_line now returns its argument if it did not make
1362 - free the bucket entry holding the alias to be removed in
1363 remove_alias, as well as the data
1368 - if an unwind-protect frame is being discarded, and its cleanup
1369 function is `restore_variable', the `arg' member points to a
1370 SAVED_VAR that must be freed. This change is made in
1371 remove_unwind_protect_internal and unwind_frame_discard_internal
1374 - need to free memory allocated by parse_arith_cmd if it is an
1375 arithmetic command, after using it to make a new word
1378 - fixed some memory leaks caused by not freeing the argument to
1379 make_bare_word, which duplicates its string argument
1380 - need to dispose list generated by list_rest_of_args in
1381 paramter_list_remove_pattern
1382 - make sure the return value from getpattern() is freed
1383 - make sure array_value_internal always returns newly-allocated
1385 - get_var_and_type returns a new type: VT_ARRAYMEMBER if the
1386 string passed is of the form var[index]
1387 - make sure parameter_brace_substring frees the memory allocated
1388 by get_var_and_type if verify_substring_values returns 0
1390 hashlib.c, hashlib.h
1391 - new function, dispose_hash_table (table), which frees the
1392 table's bucket array and the table itself
1395 - call dispose_hash_table from delete_all_aliases instead of just
1399 - make sure to free `newnames' (but *not* its contents) before
1400 returning from ignore_globbed_names
1403 - make sure the argv created to pass to shell_execve is freed if
1404 the execve fails and we're not exiting on failed execs
1407 - broke evalexp into two functions: evalexp, which sets up the
1408 jmp_buf that errors jump to, and subexpr, which does the
1409 evaluation and pushing and popping of contexts
1410 - readtok now calls subexpr to evaluate subexpressions in
1412 - evalexp now takes an additional paramter, a pointer to an int.
1413 If the expression contains errors, the location to which this
1414 points gets 0, otherwise it gets 1 to show that the value
1415 returned may be used. This plugs up memory leaks that were
1416 the result of evalexp() longjmping back to top_level
1417 - fixed a memory leak: expr_stack[0] was not being freed
1420 - changed extern declaration for evalexp
1422 variables.c, subst.c, builtins/let.def
1423 - changed calls to evalexp appropriately. They either cause a
1424 longjmp (top_level, DISCARD) (which is what the old stuff in
1425 expr.c did) or are handled by returning an appropriate error
1426 value (e.g., &expand_word_error in subst.c)
1431 - make sure to free dollar_vars[0] before assigning it the first
1432 argument following `-c command'
1435 - if unsetting a local variable with a previous context, make sure
1436 to free the hash table element used to store the local variable
1438 lib/readline/terminal.c
1439 - rearrange the includes so <sys/ioctl.h> is included before rltty.h,
1445 - new function: reset_shell_flags, which resets all of the flags
1446 back to their initial values
1449 - extern declaration for reset_shell_flags
1452 - new function: reset_shell_options, which resets all of the -o
1453 options that are not also shell flags back to their initial values
1456 - new function: reset_shopt_options, which resets all of the shopt
1457 options that are not also shell flags or -o options back to their
1461 - extern declarations for reset_shell_options and reset_shopt_options
1464 - broke the code that reinitializes things when an executable script
1465 without a leading `#!' is found out into a new function:
1467 - initialize_subshell now calls the reset_* functions that reset the
1468 shell flags and options
1470 general.c, general.h
1471 - move_to_high_fd now takes a third argument: the highest fd at which
1472 to start looking. If that's less than 20, the maximum number of
1473 open files as returned by getdtablesize() is used (which is what
1476 jobs.c, shell.c, subst.c
1477 - changed calls to move_to_high_fd appropriately
1479 [bash-2.01-beta1 frozen]
1484 - itos now uses a local char buffer to do its conversion, but still
1485 returns newly-allocated memory
1490 - be a little more careful when checking for backwards-compatibility
1491 with exported function definitions
1496 - translate RLIM_INFINITY to limit.rlim_max if the current limit is
1497 less than or equal to the hard limit, not just strictly less than
1498 (the change of 3/28 was too drastic)
1503 - fixed definition of to_lower on machines without strcasecmp
1506 - don't free the trap command in change_signal if the SIG_INPROGRESS
1507 is set in the signal's flags -- it will cause memory to be freed
1508 twice if a trap command resets the signal handler more than once,
1509 and _run_trap_internal keeps a pointer to the trap command so it
1510 can free it, so there will be no leaks
1514 aclocal.m4,configure.in
1515 - removed BASH_CC_WORKS, since AC_PROG_CC now has the functionality
1518 - get_current_user_info is now a void function
1521 - alias_expand_line_internal was removed
1522 - new function, alias_expand_line, performs alias expansion on
1523 rl_line_buffer and either replaces rl_line_buffer or signals
1525 - new bindable commands: alias-expand-line and
1526 history-and-alias-expand-line, available if ALIAS is defined
1530 Makefile.in, lib/malloc/malloc.c
1531 - changed the define that turns on malloc range checking from
1532 `rcheck' to `RCHECK'
1534 lib/readline/isearch.c
1535 - fixed a couple of places where rl_search_history would try to
1541 - fixed a problem with saving a variable that is a null pointer
1542 in unwind_protect_var. It happens only on machines where the
1543 size of a pointer is not the size of an int. The old FASTCOPY
1544 code would copy the eight bytes at memory location zero, which
1545 did not necessarily make a null pointer
1550 - run_startup_files should turn off job control, since the startup
1551 files should be run without job control enabled -- this makes
1552 SIGINT interrupt startup file execution again
1553 - if we get a SIGINT or other longjmp to top_level while executing
1554 the startup files, re-enable job control for interactive shells
1555 before setting locally_skip_execution
1560 - if we have setlocale(3), don't bother with checking the
1561 environment variables for valid values; just use setlocale()
1562 to set the locale categories from the environment variables
1563 directly and go into eight-bit mode if the current locale is
1569 - make sure that the handler for SIGPROF is not changed if it has
1570 been set to something other than SIG_IGN or SIG_DFL -- this makes
1571 profiling work after the terminating signals have been initialized
1574 - if a filename containing `!' is completed, and the user has started
1575 the string with a `"', change the completion style to backslash-
1576 quoting, since there's no way to use `!' with double quotes (this
1577 requires more changes to readline to really work right)
1581 lib/readline/complete.c
1582 - changes to make_quoted_replacement, insert_all_matches, and
1583 insert_match and their callers to allow the application-specific
1584 filename quoting function to change the quote character (e.g., for
1585 bash to change a filename containing a `!' and started with a
1586 double quote by the user into a filename with the `!' quoted by
1587 a backslas and no double quote)
1592 - new function: nohup_all_jobs(), calls nohup_job for each entry in
1594 - delete_all_jobs is now global
1597 - new extern declarations for delete_all_jobs() and nohup_all_jobs()
1600 - `disown' without any jobspec arguments means the current job. Fix
1601 a core dump printing the error message when there is no current job
1606 - process an expansion like $((foo); bar) as a command substitution,
1607 not as an arithmetic expansion. An arithmetic expansion must have
1612 builtins/evalstring.c
1613 - the third argument to parse_and_execute() is now a flags word.
1614 The caller can control the value of `interactive' and whether
1615 or not history is disabled while parse_and_execute() runs
1618 - new #defines for the flag values for parse_and_execute()
1620 {bashline,jobs,shell,subst,trap,variables}.c, parse.y, builtins/evalfile.c,
1621 builtins/{eval,fc}.def
1622 - changed calls to parse_and_execute appropriately
1625 - if _evalfile() is passed FEVAL_HISTORY as part of the flags arg,
1626 don't pass SEVAL_NOHIST to parse_and_execute
1627 - new function: fc_execute_file, which sets FEVAL_HISTORY in the
1628 flags argument to _evalfile()
1631 - call bash_add_history instead of add_history from
1632 vi_edit_and_execute_command so the bash state variables get
1633 updated properly. This keeps the `v' command from operating
1634 on an empty command when the history list is stifled
1637 - bash_add_history is now global
1640 - extern declaration for bash_add_history
1643 - call fc_execute_file instead of maybe_execute_file in the
1644 edit-and-re-execute case (fc -e ...)
1645 - don't manually insert the commands from the file created by `fc -e'
1646 into the history list, just set remember_on_history and let
1647 fc_execute_file take care of telling parse_and_execute to do the
1648 right thing. This makes compound commands and the `cmdhist'
1649 and `lithist' settings work better. This supersedes the fix of
1650 1/27. This was reported again by rchen@fractal.eng.yale.edu.
1653 - the body of a `for' command (the commands between do...done or
1654 {...}) should be a `compound_list' instead of a `list'. Problem
1655 reported by cpg@research.bell-labs.com
1659 lib/readline/complete.c
1660 - in filename_completion_function, if we find that the directory
1661 pointer (return value from opendir(3)), is not null when state
1662 is 0 (indicating that this is the first time the completion
1663 function has been called for the current completion), call
1664 closedir on it, assuming that it was left open by a previous
1665 (interrupted) completion
1667 [bash-2.01-beta2 frozen]
1672 - make sure that `make distclean' (and other clean targets) remove
1673 the `printenv' executable
1675 tests/execscript, tests/redir.tests
1676 - make sure to set LANG=C and LC_ALL=C so the messages show up in
1680 - add a warning about exported functions in the environment
1685 - if one of the arguments passed to `hash' is an absolute pathname,
1686 just continue the loop, don't do list=list->next first. This
1687 fixes the `hash a/b' -> core dump bug
1692 - change canonicalize_pathname to leave a leading `/' alone, as
1697 support/xenix-link.sh
1698 - shell script for linking bash under Xenix
1703 - fixed a memory leak in command_word_completion_function, courtesy
1704 of a.pfaller@pop.gun.de
1707 - fixed find_hashed_filename to always return a newly-allocated
1711 - since find_hashed_filename returns newly-allocated memory, don't
1712 call savestring() on it, and free it if the data is stale (in
1713 search_for_command()). Another memory leak fixed courtesy of
1714 a.pfaller@pop.gun.de
1717 - free the value returned by find_hashed_filename
1719 [bash-2.01-release frozen]