[Beginning of work with version 1.11] 10/31 ----- Makefile - changed instances of $(AWK) to $(GAWK) -- political correctness from bfox builtins.h, builtins/help.def, builtins/mkbuiltins.c - changed representation of long_doc from a single string to an array of strings execute_cmd.c - only call __setostype() if on isc386 and _POSIX_SOURCE is defined general.c - only define functions for index and rindex if index and rindex are not already cpp defines jobs.c - #undef some things that clash between and on Posix suns machines.h - make isc386 machines links with the shared C library explicitly (-lc_s) - new entry for a MagicStation (?) from bfox variables.c - use a cpp define _CONST_HACK to determine whether the parameter to getenv() is a char const * (yes for _STDC_, no otherwise) builtins/type.def - make found_file local to the block that searches for executable disk files 11/4 ---- execute_cmd.c - make execute_function_or_builtin use unwind protects to protect the `return catch' variables support/getcppsyms.c - added definitions for M_UNIX, M_XENIX, and _AIX 11/5 ---- bashline.c - fix a call to savestring in command_word_completion_function with a post-incremented int parameter, since savestring is a macro that evaluates its argument twice (builtin completion) lib/glob/fnmatch.c - add `^' as a character that negates a character class ([]) 11/6 ---- subst.c - add a new variable last_command_subst_pid to keep track of the pid of the last child created for command substitution. Used to determine whether or not command substitution has taken place. execute_cmd.c - made the exit status of a command that has only assignments and redirections obey the Posix spec unwind_prot.c, trap.c - make sure all sigset_t variables are initialized with sigemptyset before use lib/glob/fnmatch.c - fixed a couple of bugs with [] classes in fnmatch: not checking whether or not we've hit the ']' and not incrementing the string argument in the right place 11/7 ---- braces.c - Make backquotes inhibit brace expansion -- defer it until the subshell runs - Ditto for $( ) subst.c - since braces.c now calls unquoted_member and unquoted_substring, they can no longer be static functions config.h - two new configuration options: ALLOW_RIGID_POSIX_COMPLIANCE and DISABLED_BUILTINS shell.c, jobs.c - define and use top_level_signal_mask, restored on longjmps to top_level by throw_to_top_level builtins/builtin.def - use builtin_address to find the function (if so configured) so that `builtin foo' still works after `enable -n foo' builtins/common.c - have both find_shell_builtin, which never finds disabled builtins, and builtin_address, which does 11/8 ---- general.c - the getdtablesize emulation should ensure that _SC_OPEN_MAX is defined on Posix systems before trying to use it in a call to sysconf() 11/10 ----- lib/glob/fnmatch.c - fixes from Roland McGrath for some of the more egregious bugs - naturally, Roland missed a few lib/readline/readline.c - add missing calls to sigemptyset(), since Posix specifies that all sigset_t variables be initialized before use using it - only turn off ISTRIP and INPCK in the termio(s) code if the character size is 8 bits ((otio.c_cflag & CSIZE) == CS8) - Sequents running Dynix/ptx should include rather that builtins/type.def - change a call to printf to builtin_error when printing a diagnostic that something is not found builtins/times.def - changed file inclusion code to include and if HAVE_RESOURCE is defined, then to include if !HAVE_RESOURCE and RUSAGE_SELF is not defined. This catches systems with deficient files 11/11 ----- lib/readline/readline.c - Don't try to dereference funmap in rl_named_function() if it's null (as it is before rl_initialize_funmap is called) 11/12 ----- lib/readline/readline.c - backed out of change of 11/11 to rl_named_function bashline.c - add a state variable bash_readline_initialized to keep track of whether or not readline has been initialized with a call to initialize_readline() builtins/bind.def - if readline has not been initialized the first time this is called, call initialize_readline 11/13 ----- execute_cmd.c - execute_subshell_builtin_or_function would only let the output of `jobs' be piped if pipe_in and pipe_out were both != NO_PIPE (?). Obviously a typo. builtins/command.def - add an unwind_protect to dispose of the new command created by the call to make_bare_simple_command builtins/jobs.def - add the `jobs -x command args' form from the System V.4 sh All job specs in `args' are replaced with the appropriate job's process group id and `command' is executed builtins/getopt.c - if getopt() finds that optind > argc when it is called, it sets optind = argc and returns EOF builtins/times.def - backed out of 11/10 change. Some systems, most notably HP/UX have all the correct includes and defines and simply do not implement getrusage(). At all. subst.c - if sv_optind finds that OPTIND has been unset or set to an empty string, call getopts_reset (0). The Gnu getopt resets its internal state when optind == 0. - call getopts_reset(0) if OPTIND=1, because that's what the Posix spec says to use to reset 11/14 ----- builtins/alias.def - fixed a typo in the SHORT_DOC for the unalias builtin builtins/shift.def - allowed the shift count to be 0 11/15 ----- lib/readline/readline.c - turn on 8 bit characters if NO_EIGHT_BIT_CHARACTERS is not defined and the Posix termios code path is being taken [The following two entries describe what's needed for an initial implementation of the vi mode `.' command] lib/readline/vi_mode.c - new variables: vi_last_command: last command that modified text in the buffer vi_last_repeat: the repeat count to vi_last_command vi_last_arg_sign: arg sign for vi_last_repeat vi_last_motion: the last motion qualifier for the text modification commands that use one vi_redoing: state variable, if 1 we're re-doing a command vi_textmod: list of commands that modify text (initially "_*\\AaIiCcDdPpYyRrSsXx~") - new functions: rl_vi_redo: an initial implementation of the vi mode `.' command rl_vi_set_last: initialize the state of the new variables described above rl_vi_textmod_command: return true if command passed is a text modification command - changed rl_vi_domove to save the movement command information in vi_last_motion - changed rl_vi_movement_mode to call rl_vi_set_last to initialize the `last command' state lib/readline/readline.c - changed rl_dispatch to save vi_last_command, vi_last_repeat, and vi_last_arg_sign - changed rl_newline to call vi_set_last lib/readline/readline.h - new function rl_vi_redo lib/readline/vi_keymap.c - bind rl_vi_redo to `.' 11/20 ----- posixstat.h - make isc386 defines for S_IFDIR and S_IFMT be used if they do not already appear, no matter whether or not gcc is being used for the compile machines.h - new entry for Omron Luna 88k running Mach 2.5 (nice machines) lib/readline/vi_mode.c - fixed a bug with rl_vi_domove and the last word on the line. If rl_point ended up > rl_end, it was being set to rl_end - 1 rather than to rl_end. cpp-Makefile - quote the values of RANLIB and AR passed to makes in subdirectories shell.c - instead of making all Xenix systems swap the second and third arguments to setvbuf, make that behavior dependent on the definition of REVERSED_SETVBUF_ARGS 11/21 ----- lib/readline/readline.c - fixed an error in rl_forward that caused vi-mode to walk off the end of the line after executing `l' in command mode on an empty line 11/22 ----- support/getcppsyms.c - added the `luna88k' define 11/24 ----- execute_cmd.c - all calls to dup2 in do_redirection_internal should be checked for errors and the redirection should fail if the dup2 fails shell.h, parse.y, execute_cmd.c, print_cmd.c, make_cmd.c - replaced the single redirection operator `r_duplicating' with r_duplicating_input and r_duplicating_output to avoid the read 1<&7 getting printed as read 1>&7 problem: foo() { exec 9&word parse.y - eliminated the old yacc production for >& word, meaning put stdout and stderr into `word' - added productions for [n]<&word and [n]>&word that use the new redirection operators execute_cmd.c - the first thing done in do_redirection_internal is now a check for r_duplicating_input_word and r_duplicating_output_word. If the redirection is one of those two, `word' is expanded and a new redirection is made print_cmd.c - new code to print the [n]<&word and [n]>&word redirections (r_duplicating_input_word and r_duplicating_output_word) make_cmd.c - new code for make_redirection to handle r_duplicating_input_word and r_duplicating_output_word documentation/bash.1 - added documentation for the -x option to `jobs' + minor cleanups and corrections 11/25 ----- cpp-Makefile - added GCC_EXTRAS for gcc-specific compiler flags execute_cmd.c - removed some unused functions (close_all_files) and variables (file_exists_p) parse.y - added new command-oriented-style history: all lines of a multiple line command will be added to the same history line - new variable current_command_line_count to keep track of the number of lines in the current command. If > 1, a line is appended to the current history line to implement command-oriented history - new function bash_add_history shell.c - added code to reset current_command_line_count to 0 before calling parse_command and yyparse subst.c - the command-oriented history is controlled by the setting of the variable command_oriented_history builtins/reserved.def - a new help topic: `variables', giving help on some common shell variables 11/26 ----- lib/glob/glob.c - if the filename portion of the pathname to be matched is null (e.g. a*/), do not call glob_vector to attempt to match each file in the expanded directories against the null string. 11/27 ----- lib/glob/glob.c - force globbing of directory names even if the metacharacters contained therein are protected by backslashes. The globbing strips the quotes correctly shell.c - make sure current_command_line_count is declared everywhere it's used parse.y - remove declaration of history_lines_this_session from pre_process_line - add extern declaration of history_lines_this_session to bash_add_history 12/2 ---- trap.h - removed inclusion of because most files include it themselves, and this is dangerous on systems that do not protect against multiple inclusion of header files trap.c - include before "trap.h" since it was the only file in the distribution not to do so shell.c - Install the SIGINT sighandler the Posix way on machines with _POSIX_VERSION defined 12/3 ---- dispose_cmd.c - make sure dispose_redirects properly handles r_duplicating_input_word and r_duplicating_output_word by freeing the `filename' execute_cmd.c - fix do_redirection_internal to copy new_redirect->redirectee.filename using alloca() so no memory has to be freed at function exit 12/4 ---- parse.y - expand \n in PS1 or PS2 into \r\n only if line editing is enabled shell.c - define top_level_mask if _POSIX_VERSION defined newversion.c - made it write a definition of SCCSVERSION to version.h -- an SCCS string so the `what' command will be useful version.c - new variable `sccsversion' set to SCCSVERSION 12/5 ---- builtins/fc.def - make fc_gethist check that the history list is non-null before trying to access its members 12/6 ---- lib/readline/readline.c - changed the ISTRIP code (again) to force bash to disable ISTRIP only if the tty driver guarantees eight bits (cflag & CSIZE == CS8) 12/9 ---- lib/readline/readline.c - tgetent returns 0 if it can't find the terminal name in /etc/termcap, so we failed if it returns <= 0, not < 0. 12/11 ----- machines.h - Sony machines running NEWS-OS 4.0 (V.4) should have strerror(), so define HAVE_STRERROR - Pyramids running BSD do not all have the vprintf family of functions, so remove the definition of HAVE_VPRINTF 12/12 ----- parse.y - make sure that shell_getc always checks that shell_input_line is valid before trying to reference shell_input_line[0] 12/13 ----- mailcheck.c - Since `dollar_underscore' saves the value of $_ in a local variable, it's possible that bind_variable can free and reallocate the cell for $_, leaving dollar_underscore pointing at freed storage. The fix is to copy it into freshly-allocated memory. - ensure that when saving and restoring dollar_underscore that we do not try to call strlen on a null string 12/15 ----- general.c, execute_cmd.c - moved the utility function `all_digits' from execute_cmd.c to general.c builtins/kill.def - remove use of sscanf, used calls to all_digits and atoi instead machines.h - if not using gcc, need to make SYSDEP_LDFLAGS = -Xp for Posix on isc386 12/16 ----- machines.h - isc386 has multiple groups execute_cmd.c - add a QUIT to the while loop in find_user_command_in_path that searches the path, so users can interrupt a lengthy path search 12/17 ----- builtins/alias.def - added the Posix-specified -a option to unalias, made unalias obey the getopt argument syntax guidelines builtins/jobs.def - made `jobs' handle the -- option to signal the end of arguments flags.c - Posix.2a has specified that the -b flag stand for asynchronous notification, so move the definition of asynchronous_notification here and add a new entry to the `flags' struct if JOB_CONTROL is defined flags.h - add an extern declaration of asynchronous_notification jobs.c - change the definition of asynchronous_notification to extern, since it's now declared in flags.c builtins/set.def - change documentation strings to add -b option, note that set -o notify is now the same as set -b - change the code to make set -o notify the same as set -b (list_long_opts(), take the special case out of set_minus_o_option) 12/19 ----- lib/readline/readline.c - added support for $LINES, $COLUMNS. The variables are read after the ioctl(TIOCGWINSZ) and before calls to tgetent builtins/fc.def - made the fc output format correspond to that specified by Posix.2a ("%d\t%s\n") 12/20 ----- execute_cmd.c - user_command_matches did not properly handle a null $PATH element, which should be the same as ".". Changed the code to mirror find_user_command_in_path () 12/23 ----- execute_cmd.c - added a new function get_next_path_element, which calls extract_colon_unit and interprets the result, translating "" to "." builtins/cd.def - added description of -l option to dirs short_doc - fixed the bug that caused `dirs' to always print an extra trailing space documentation/bash.1 - added description of -l option to dirs parse.y - added optional leading ( for case clause, as per Posix.2 12/30 ----- lib/readline/vi_mode.c - removed unused variable `added_blank' bashline.c - added dynamic completion from bfox execute_cmd.c - redirections must be performed in a child before execution of the command is attempted or aborted (because it's not found by a hash table or $PATH search), according to Posix.2 getcwd.c - new file, from the Gnu C library, for systems that don't do this right -- they use popen("/bin/pwd", "r") instead 12/31 ----- builtins/type.def - the type builtin would not report a name as not found if any name had previously been found because the flag variable used to report this (found_something) was not reset each time through the loop. Added a variable `found_any' to be global and reset found_something to 0 each time through the loop 1/4 --- builtins/jobs.def - make sure that the call to add_unwind_protect in execute_list_with_replacements is made after the new command struct is completely initialized support/mksysdefs - look for /dev/fd, define HAVE_DEV_FD if present cpp-Makefile - pass HAVE_DEV_FD through to make in SYSTEM_FLAGS shell.c, execute_cmd.c - call unlink_fifo_list only if HAVE_DEV_FD is not defined and PROCESS_SUBSTITUTION is defined subst.c - new function make_dev_fd_filename to return /dev/fd/xx, where xx corresponds to the parent end of the pipe - all the named pipe utility functions should be #if !defined (HAVE_DEV_FD) - change process_subsitute to do the following on systems with /dev/fd: 1. Make a pipe in the parent 2. if (open_for_read_in_child) parent_pipe_fd = fildes[1] child_pipe_fd = fildes[0] else parent_pipe_fd = fildes[0] child_pipe_fd = fildes[1] 3. pathname = make_dev_fd_filename (parent_pipe_fd); 4. fork 5. In parent, close child_pipe_fd and return pathname 6. In child, turn off job control, dup child_pipe_fd to either fd 0 or 1 depending on OPEN_FOR_READ_IN_CHILD, close parent_pipe_fd, parse and execute the string, and exit shell.c - added call to unlink_fifo_list in reader_loop so that all fifos get closed, even after builtin commands are executed 1/6 --- machines.h, make_cmd.c, print_cmd.c, shell.c, cpp-Makefile - HAVE_VPRINTF --> HAVE_VFPRINTF cpp-Makefile, machines.h, test.c - HAVE_MULTIPLE_GROUPS --> HAVE_GETGROUPS cpp-Makefile, machines.h - HAVE_SIGLIST --> HAVE_SYS_SIGLIST parse.y - add if_command production builtins/echo.def - validate all arguments before using them so that -nanything != -n - document the -E option and its use builtins/umask.def - allow other arguments to be used with -S subst.c - make sure to close all files in the child created to run a process substutition to avoid holding write file descriptors to pipes that will cause the shell to hang 1/7 --- cpp-Makefile - fixed a typo: SEARCHLIB -> SEARCH_LIB machines.h - new description for Amiga 3000 running System V.4 shell.c - default secondary prompt is now "> " builtins/bashgetopt.c - more internal cleanups and bug fixes support/mksysdefs - detect the amiga by the presence of /usr/amiga 1/9 --- general.c - canonicalize_pathname should remove ./ only if it's at the beginning of the pathname, or immediately preceded by a `/' 1/10 ---- documentation/bash.1 - clean up the documentation for test -t, since according to Posix, it always requires an argument general.c - don't build index and rindex for DG machines machines.h - description for System V.4 on IBM 370 architecture - fixed up DG/UX machine description