[work begins on post-netwide-1.12 release.] 1/30 ---- machines.h, general.c, nojobs.c - changes for AIX/RT 2.2.1 lib/readline/vi_mode.c - fixed a bug with vi mode, `cw' and whitespace that removed the last character of the previous word lib/readline/readline.c - readline did not correctly save the value of last_readline_init_file across things like `bind'. Now it does the following: last_readline_init_file initialized to NULL readline_initialize_everything calls rl_read_init_file with an explicit argument of ~/.inputrc rl_read_init_file sets last_readline_init_file to savestring(filename) so it saves a fresh copy getcwd.c - new version from Roland McGrath, with changes for the bash build environment execute_cmd.c, variables.c - bash was not looking for $PATH in the temp environment when looking up a command. Now, find_variable looks in the temp environment if subshell_environment is set. This will be set when bash is looking a command up in the path (it's set in find_user_command_internal while looking up the path string to pass to find_user_command_in_path) 1/31 ---- make_cmd.c - removed useless call to alloca, replaced with a static array definition 2/3 --- machines.h - Cray machine description 2/4 --- builtins/getopt.[ch] - upgraded to a more recent version from the Gnu C library jobs.c - added a call to init_signal_handler to replace equivalent in-line code in initialize_jobs trap.c - new function: maybe_call_trap_handler (sig) calls a trap function for signal SIG if one exists jobs.c - bash now (effectively) ignores SIGINT while waiting for a job run from a script. We don't want to die if a SIGINT is received while running another process, only if that job dies due to SIGINT. This lets interactive processes run from scripts that want to catch SIGINT and handle it do so without disturbing the shell that's interpreting the script. All other versions of sh behave this way. The implementation is fairly straightforward. In wait_for, the parent shell sets the SIGINT handler to wait_sigint_handler, which allows the wait builtin to be interrupted and sloughs off everything else. flush_child controls the behavior when a `foreground' process dies due to SIGINT: it calls a trap handler if one exists; otherwise it calls either sigint_sighandler (interactive) or termination_unwind_protect (non-interactive). It then resets the SIGINT signal handler to what it was before wait_for changed it. wait_for does reset the sighandler before returning if flush_child does not, so the SIGINT does not stay ignored. There is a race condition between the time that make_child creates a child and sets it to run and the time the parent calls wait_for. This is handled by having old_sigint_handler, which holds the value of the `real' SIGINT signal handler, be NULL except when the shell is in wait_for, and only operate on the SIGINT handler state if this variable is non-null. Should the stuff be unwind-protected? I don't think so; u-p gets run on interrupts, and we're controlling the interrupt handler. 2/5 --- trap.c - new function signal_is_trapped (sig) returns 1 if a trap handler has been established for SIG shell.c - have throw_to_top_level call longjmp(top_level, DISCARD) if the shell is non-interactive and a SIGINT occurred and was trapped cpp-Makefile, machines.h - instead of running `basename ...` to discover the name of the alloca object file, use a new variable $ALLOCA_OBJECT. It's set to alloca.o if we're using the C emulation, and to ALLOCA_OBJ, which must be defined in the machines.h entry, for an architecture defining ALLOCA_ASM cpp-Makefile - BSD make of 4.3-tahoe and later already defines MACHINE and does not allow it to be overridden, so replace it with Machine. endian.c - added changes from Cray to configure endianness correctly on machines with 8-byte longs parse.y - added '&' to no_semi_successors in bash_add_history so bash will not add a semicolon after it appears 2/6 --- subst.c - since string_extract_verbatim was overloaded, added a new function string_extract_single_quoted to call when extracting strings in '' lib/readline/history.c - changed call to string_extract_verbatim to a call to string_extract_single_quoted lib/readline/vi_mode.c - rl_vi_subst was not calling rl_end_undo_group properly (i.e. at all) execute_cmd.c - On systems without job control, async commands (`&') have an extra redirection added before calling execute_command_internal that redirects /dev/null to standard input. This redirection must be removed right after execute_command_internal returns, because the loop functions call execute_command_internal multiple times with the same command struct. If we keep tacking redirections onto the front of it, eventually we'll run out of file descriptors on a big enough loop. jobs.c - some functions were not correctly blocking SIGCHLD while running: delete_all_jobs, map_over_jobs, start_job when it calls reset_current 2/7 --- print_cmd.c - an extra space was being printed at the end of a redirection list. This caused exporting of functions with embedded here-documents to fail, since the end marker would not be matched 2/8 --- nojobs.c - change reap_zombie_children to keep calling waitpid while it returns something > 0 (a valid pid) - add a call to reap_zombie_children if we get a valid pid after waiting in wait_for variables.c - include pwd.h after sys/types.h. It matters on some systems. shell.c - added a function to encapsulate the differences between systems in setting a file pointer to line-buffered: line_buffer_file 2/9 --- shell.c - unbuffer stdin when it's not a tty and bash is reading a script from stdin 2/10 ---- machines.h, cpp-Makefile - a new machine description variable HAVE_DIRENT, passed down to makes in libraries support/mksysdefs - check for the existance of /usr/include/dirent.h, define HAVE_DIRENT_H if there 2/11 ---- machines.h - add #define USE_TERMCAP_EMULATION to HP-UX machine description - added #define HAVE_DIRENT to a number of entries jobs.h - added missing definitions for WSTOPSIG, WTERMSIG, WEXITSTATUS for Posix systems that do not have them and do not have the `union wait' defined builtins/suspend.def, unwind_prot.c, longest_sig.c - include before -- some systems require it support/mksysdefs - For HP machines running HPUX, SYSDEF is set to one of hpux8, hpux7, hpux6, or hpux, corresponding to different releases of HP-UX. - if `uname -m' returns something starting with XD88, the machine is a Tektronix XD88 2/12 ---- variables.c - stop core dumping on startup if SHLVL is not set lib/glob/glob.c - make sure we always recurse and glob the entire filename so the quoting characters added in shell_glob_filename get removed correctly jobs.c - new function end_job_control to terminate stopped jobs and give the terminal back to the original pgrp - new function restart_job_control to re-initialize the job control state builtins/exec.def - call end_job_control before we try to execve the command so we're back in the original process group for the new process and restart_job_control if the shell_execve fails and we're not exiting shell.c - change the code that resets the pgrp just before exiting to call end_job_control instead lib/readline/chardefs.h - new define, MACRO_CHAR lib/readline/readline.c - changed rl_generic bind to correctly handle binding keys > 128 by using the appropriate meta keymap (map[ESC].function as a keymap) - changed rl_dispatch, rl_show_char, and rl_bind_key to use UNMETA instead of substracting 128 and to use META_CHAR to check for a character's `meta-ness' 2/13 ---- lib/readline/readline.c, lib/glob/glob.c - define HAVE_DIRENT if it's not defined but HAVE_DIRENT_H is lib/readline/history.c - instead of calling write(2) twice for each history line, build a big buffer of all the history data to write, fill it, and call write(2) once subst.c - wrapped up the eight-bit changes by making the single-quoted strings and double-quoted strings code in expand_word_internal simply discard a word if it's "" or '' and that's not the entire word. This preserves sh semantics. parse.y - If process substitution is compiled into the shell, there was a mistake by which <[ and >[ were treated the same as $[ lib/glob/glob.c, lib/readline/readline.c - Reorganized the twisty maze of defines for HAVE_DIRENT 2/14 ---- posixstat.h - removed lines consisting of only a single #. Some ANSI cpps don't like lines like that execute_cmd.c - added a call to QUIT between commands in cmd1 ; cmd2 sequence test.c - removed redundant declaration of expr() in test_command() 2/16 ---- builtins/Makefile - added dependencies on the header files in the main shell directory jobs.c, jobs.h, builtins/fg_bg.def, builtins/kill.def - replaced the notified, foreground, and job_control members of the job structure with a flags field and bits J_NOTIFIED, J_FOREGROUND, and J_JOBCONTROL subst.c - fixed a typo (result[0] == '\0') in EIGHT_BIT version of dequote_string cpp-Makefile - added dependencies for the builtin object files execute_cmd.c - complete fix from 2/14 -- add QUIT calls to &&, ||, and `;' when executing a command and ignoring the return value jobs.c - if a job is suspended while running in a loop, break out of the loop nojobs.c - made the same wait_sigint_handler and wait_for changes as those made to jobs.c shell.c - moved the code that adds 128 to last_command_exit_value before any SIGINT trap handler is run subst.c - if a word is enclosed completely in "" or '', set the quoted flag when the word is returned from expand_word_internal. This keeps the globbing routines from being called 2/17 ---- shell.c - use shell_name instead of (++argv[0]) when testing for a restricted shell 2/18 ---- general.c - redid the defines for index and rindex to define and use HAVE_INDEX and HAVE_RINDEX, respectively machines.h - added HAVE_DIRENT to the AIXRT machine description jobs.c - define and use INVALID_SIGNAL_HANDLER as something old_sigint_handler cannot be set to 2/19 ---- config.h - made restricted shell mode configurable, #define RESTRICTED_SHELL shell.c, flags.c, execute_cmd.c, builtins/cd.def - add code to implement ksh/sh restricted shell mode shell.c - new function maybe_make_restricted (name) which turns the shell into a restricted shell if name == `rbash' lib/readline/readline.c - fixed rl_key_sequence_length problem when meta-ized characters are read (one too short). This left extra characters in macros when end-kbd-macro was bound to a meta-ized character builtins/common.c - added set_working_directory (name) as analog of get_working_directory variables.h - added `imported' variable attribute 2/20 ---- Makefile - DESTDIR -> bindir - aix-Makefile -> ansi-Makefile because an ANSI C compiler like that in SunOS5 (hah!) need not accept /**/# as a directive bashline.c - added code from bfox to do completion into brace expansions - use BUILTIN_ENABLED flag builtins.h - added a flags field to struct builtin to replace the `enabled' structure member cpp-Makefile - set SHELL=MAKE_SHELL if MAKE_SHELL is defined - added support for the LD_HAS_NO_DASH_L definition from machines.h - PROGRAM -> Program - support for the new LD_HAS_NO_DASH_L machine defintion variable execute_cmd.c - removed the subshell_environment variable - find_user_command_internal now calls find_variable_internal general.c - moved init_signal_handler here, changed name to set_signal_handler general.h - added definition for set_signal_handler for non-Posix systems jobs.c - now print `Done' when a background job exits with status 0 machines.h - combined all of the Sun machine descriptions into one - new descriptions for SunOS5, Alliant, Motorola Delta 68k - completely redid the HPUX description, making M_MACHINE much more specific rather than just `hpux' nojobs.c - change all instances of signal() to set_signal_handler() shell.c - removed definition of init_signal_handler - changed more instances of signal to set_signal_handler subst.c - monster reformat variables.c - added a function find_variable_internal that can be explictly told to search the temporary environment, changed find_variable to call it - changed all variables and functions from the initial shell environment to have the `imported' attribute - made set_func_auto_export return the pointer to the function struct builtins/Makefile - ar clq --> ar cq builtins/cd.def - `pushd_silent' is gone builtins/common.c - there is no more `enabled' member of a builtin struct; test with BUILTIN_ENABLED instead builtins/enable.def, builtins/help.def - use BUILTIN_ENABLED bitmask builtins/mkbuiltins.c - initialize all builtins to be BUILTIN_ENABLED | STATIC_BUILTIN lib/glob/Makefile - ar clq -> ar cq lib/glob/glob.c - added another shell interruption point - reorganized the twisty maze of dirent defines to use HAVE_DIRENT_H lib/readline/readline.c, lib/readline/funmap.c - put rl_arrow_keys back in lib/readline/Makefile - ar clq -> ar cq lib/readline/readline.c - reorganized the twisty maze of dirent defines to use HAVE_DIRENT_H - made the search string for i-searches dynamically allocated and expandable rather than using alloca - turned on USE_XON_XOFF again - RL_DEFAULT_INPUT_FILE -> DEFAULT_INPUTRC support/cppmagic - added `legal' to the list of unknown flags support/getcppsyms - now recognizes _M88KBCS_TARGET support/mksysdefs - code to distinguish SunOS5 from SunOS4 - aix-Makefile -> ansi-Makefile lib/readline/vi_mode.c - after completing with `*' or `\', Posix.2a says to go into insertion mode - for c[wW], don't move back any farther than we started to emulate c[eE] -- Posix.2 says the cursor position should not change variables.c - if we get PWD from the environment, and it's the same directory as `.' (calling same_file) set the_current_working_directory to that value builtins.h - added a #define for SPECIAL_BUILTIN mksysdefs - Xenix systems now have one of XENIX_22, XENIX_23, or XENIX_32 defined based on the OS release level - test for /dev/fd being a directory and /dev/fd/0 being readable to decide whether or not we have the /dev/fd way of naming open files 2/24 ---- builtins/common.c - set_working_directory is now a void general.c - new implementation of canonicalize_pathname from bfox (+ bug fixes, of course) bashline.c - make bash_symbolic_link_hook call canonicalize_pathname variables.c - set_func_auto_export no longer returns a SHELL_VAR * lib/readline/readine.c - added code to determine whether or not the terminal has a meta key and to use it while editing if one is available subst.c - minor bug fix to remove_quoted_escapes (logic bomb :-) 2/25 ---- machines.h - cleaned up the hpux section. Cannot define M_OS as HPUX_X, because HPUX_X is already defined as expanding to nothing; this results in a blank M_OS - attempted to rationalize Xenix support. Depending on the XENIX_nn define provided by support/mksysdefs, configure in -DREVERSED_SETVBUF_ARGS, -xenix, -lx, -ldir, and HAVE_DIRENT Xenix 2.2: -DREVERSED_SETVBUF_ARGS cc -lx Xenix 2.3: HAVE_DIRENT cc -ldir Xenix 3.2: HAVE_DIRENT cc -xenix -ldir 2/26 ---- builtins/source.def - POSIX_PENDANTIC -> POSIX_PEDANTIC 2/27 ---- support/getcppsyms.c - consolidated HP definitions to be of the form #if defined (__hp9000s300) || defined (hp9000s300) printf (" -Dhp9000s300") #endif /* __hp9000s300 || hp9000s300 */ machines.h - changed the way the hp9000s300 tests for hp9000s200 being defined support/mksysdefs - changed the XENIX_nn defines a little bit input.c - new input buffering package -- like stdio but allows syncing with the underlying file descriptor when creating child processes, and provides a fd-stream mapping. input.h, shell.c, jobs.c - changes for the input buffering package, using default_buffered_input in place of default_input general.c - fix canonicalize_pathname to keep from running off the end of the result string (check result[i] before assigning start = i++) jobs.c - change some calls to signal to call set_signal_handler instead 2/29 ---- shell.c - only initialize default_buffered_input to the input file descriptor if the shell is not interactive builtins/getopt.c - cast the arguments properly in calls to my_bcopy execute_cmd.c - added code to do_redirection_internal to change buffered streams if one of the file descriptors corresponding to a buffered input stream is modified. This lets the shell do proper buffering if the file descriptor from which the shell is reading input is modified by a redirection (e.g., exec 0b_size == 1, so that no special- case code is needed when reads are done. input.h - the member of the BASH_INPUT union in effect if it describes a buffered stream is now a file descriptor jobs.c - SCO 3.2.4 has fixed the sigsuspend() bug, so don't execute the hack workaround if SCOv4 is defined 3/1 --- builtins/common.c - made shell_builtin_compare perform some tests itself before calling strcmp to cut down the number of strcmp calls - did the same thing for builtin_address_internal parse.y - removed calls to strcmp from read_token, just test if token[0] == } and !token[1] - only call clearerr if bash_input.type == st_stream in shell_getc - removed a call to strcpy from shell_getc that only added a newline; changed it to two assignment statements - used token_index instead of a call to strlen at the end of read_token where the word is being constructed and returned unwind_prot.c - changed a strcmp to a STREQ in unwind_frame_run_internal variables.c - removed some dead code that had been #if'd out - added a variable to avoid a call to strlen in initialize_shell_variables - change a call to strncmp to a STREQN in initialize_shell_variables - changed strcmp to STREQ in non_unsettable 3/2 --- jobs.c - rearranged the code that calls flush_child (0) for SCO so it is easier to do something like SCO && !SCOv4 - changed flush_child so that the loop is performed in a blocking fashion only if SCO && !SCOv4 3/3 --- signames.c - new standalone program to create a signames.h file that contains the initialization code for the signal_names array trap.h - removed the signal_names array initialization code - include "signames.h" cpp-Makefile - make sure signames.aux builds signames.h correctly input.c - changed fd_is_seekable and bufstream_getc into macros mksysdefs - changes to define SCOv4 if uname returns the right info machines.h - changes to define BROKEN_SIGSUSPEND and NO_DEV_TTY_JOB_CONTROL for various SCO systems jobs.c - check for BROKEN_SIGSUSPEND and NO_DEV_TTY_JOB_CONTROL instead of using SCO 3/4 --- general.c - make set_signal_handler return the old signal handler again shell.c - set SIGINT handler to sigint_sighandler for non-interactive shells - remove SIGQUIT from list of terminating signals 3/5 --- builtins/trap.def - added special SIGINT handling for the case of reverting a signal handler to the default shell.c - added SIGINT back to the list of terminating signals for non-interactive shells variables.c - initialize mail variables in initialize_shell_variables only if interactive_shell is true - only check for command_oriented_history if interactive shell - only initialize the history variables if history expansion is being performed (remember_on_history == 1) - only make PS1 and PS2 non-unsettable if the shell is interactive 3/6 --- variables.c - set up a new temporary environment, FUNCTION_ENV, which is the temporary environment provided to a function - make find_tempenv_variable search both temporary_env and function_env, searching function_env if variable_context > 0 - change maybe_make_export_env to add variables from function_env to the environment - new function dispose_function_env to deallocate the temporary function environment and cause a new export_env to be made - added code to qsort_string_compare to compare the first characters of the strings passed before calling strcmp general.c - new function copy_array (char **array) returns a newly-allocated copy of ARRAY execute_cmd.c - added code to execute_builtin_or_function that initializes the temporary function environment and takes care of disposing of it on normal or abnormal exit - dispose of temporary environment after we initialize the function environment - added same code to execute_subshell_builtin_or_function - since the trap code now restores the SIGCHLD handler to the original, any time make_child is called and the shell needs to run in the child process, set_sigchld_handler should be called to reinstall the proper SIGCHLD handler jobs.c - new function set_sigchld_handler to reinstall flush_child as the SIGCHLD signal handler 3/9 --- bashline.c - swapped code around to avoid calling savestring (this_fignore) when this_fignore is null 3/10 ---- jobs.c - make sure the code in flush_child that calls the SIGCHLD trap handler saves last_made_pid and the_pipeline using unwind-protects lib/readline/readline.c - make sure the code that uses VLNEXT is protected by #ifdef TERMIOS_TTY_DRIVER shell.c - add a `beenhere' flag to avoid executing $ENV more than once parse.y - added a new token ASSIGNMENT_WORD - made read_token return ASSIGNMENT_WORD if in a simple command position, token contains `=', the `=' is not the first character, and the characters before `=' are a legal identifier (as Posix.2 specifies) - a simple_command_element can now also be an ASSIGNMENT_WORD - alias expansion is attempted if the last token was an ASSIGNMENT_WORD, as Posix.2a specifies 3/11 ---- execute_cmd.c - moved the code that checks command words for `/' down into execute_disk_command, and made it check only the first command word, like sh and ksh - vfree() is no longer static, so other code that needs to add unwind-protects that use free can use it trap.c - added a function set_sigchld_trap (command) to set the SIGCHLD trap handler to `command', because unwind-protects cannot take two arguments jobs.c - changed the code in flush_child to set up and use and unwind-protect frame to protect the things it needs to while running the SIGCHLD trap commands 3/12 ---- nojobs.c - added the BUFFERED_INPUT code to make_child subst.c - folded the test and increment of the string pointer into string_extract_double_quoted and string_extract_single_quoted - made string_extract_verbatim and string_extract static lib/readline/history.c - changed code that calls string_extract_single_quoted to not increment the string pointer after the call variables.c - added code to qsort_var_comp to compare the first character of the variable names before calling strcmp 3/13 ---- parse.y - include string.h or strings.h lib/readline/readline.c, lib/glob/glob.c - removed the code that defined HAVE_DIRENT_H if _POSIX_VERSION was defined -- it breaks on apollos, and is a bad idea anyway input.c - make sure close_buffered_fd closes the fd, whether or not it was a buffered stream 3/16 ---- machines.h - added a #define LD_HAS_NO_DASH_L to the Sequent Dynix entries trap.c - made trap_list[SIGINT] == IMPOSSIBLE_TRAP_HANDLER while running the interrupt trap, so we can tell if the trap handler sets another trap and not restore the original handler if so 3/17 ---- trap.c - a new function set_sigint_handler, which subshells doing `shellsy' things like command substitution and ( cmd ) call to make sure they handle interrupts right execute_cmd.c, subst.c - added calls to set_sigint_handler in the appropriate spots 3/18 ---- hash.c - replaced the old hash function with the one from Gnu cpp, which has a much better distribution jobs.c - make end_job_control call setpgid to reset the pgrp to the original only if original_pgrp >= 0 builtins/exec.c - remove the calls to restore_default_signal; restore_original_signals now does all the necessary work 3/19 ---- jobs.c, nojobs.c - make sure that make_child resets default_buffered_input to -1 after closing it with close_buffered_fd 3/23 ---- lib/glob/tilde.c - had an extern declaration for malloc rather than xmalloc general.h - added #define for REVERSE_LIST, a macro which calls reverse_list on a list only if the pointer is valid and there is more than one element parse.y - removed calls to legal_assignment in read_token; assignment() already does those checks general.c - reformatted reverse_list copy_cmd.c - changed calls to reverse_list in copy_word_list and copy_redirects to calls to REVERSE_LIST subst.c - changed a call to reverse_list in expand_word_internal to one to REVERSE_LIST 3/24 ---- builtins/common.c - replaced a call to sscanf with code to skip leading whitespace and calls to all_digits and atoi mailcheck.c - did the same for a call to sscanf in time_to_check_mail 3/26 ---- variables.c - made find_variable_internal call find_tempenv_variable only if temporary_env or function_env exists [gprof.int.4] alias.c, alias.h - rewrote the alias code so that it now uses a hash table instead of looking things up in a linear list subst.c - removed the inclusion of alias.h parse.y - added inclusion of alias.h cpp-Makefile - removed alias.h from subst.o's dependencies - added alias.h to y.tab.o's dependencies bashline.c, builtins/alias.def - rewrote code that knew about the internal alias data structure to use an array of alias structures to search, match, and print 3/27 ---- test.c - group_member() needs to check against gid and egid regardless of whether or not the system has getgroups(2); Posix.1 does not require that the primary group id show up in the group list, and some systems do not put it there 3/30 ---- parse.y - add `|' to the list of tokens that should not have a semicolon following them when adding a line to the history when command- oriented history is active lib/readline/readline.c - fixed up the control character display by making the code print c ^ 0x40 support/cppmagic - add support for recognizing the s5r4 c pre-processor, /usr/ccs/lib/cpp lib/readline/vi_mode.c - made rl_vi_delete_to pay attention to whether or not we're redoing, and to use the last motion key if we are - made rl_vi_char_search use the last char searched for if we're redoing 3/31 ---- parse.y - removed the check for non-interactive-ness when doing shell comments 4/1 --- lib/readline/readline.c - completion with tilde expansion needs to have any `/' present at the end of the user's directory name re-inserted manually, because pathname canonicalization strips any trailing `/', before tacking on the expanded filename subst.c - fixed a bug in dequote_string that caused reading beyond the end of the string if the last character in the string was an (unquoted) CTLESC - made list_string obey the setting of `quoted' and not do the initial strip of whitespace from the beginning and end of the word if it was set - expand_word_internal calls list_string with quoting == 1 if splitting a word after expanding "$@" error.c - new function itrace for interactive traces subst.c - command_substitute should give the terminal back to pipeline_pgrp only if the shell is interactive execute_cmd.c - execute_disk_command should turn off interactive while performing redirections for an asynchronous command. The problem was a race condition with command_subst. A command like date > `hostname` & would leave the subshell begun to run date and the primary shell fighting over the terminal. After the subshell did the command substitution, it wanted to give the terminal back to pipeline_pgrp, which was its own pid. Since it was in the background, though, that was wrong, and ended up taking the terminal away from the primary (interactive) shell, which thought it had the thing. lib/readline/readline.c - if SYSTEM_CALL_RESTART is not defined, declare c as an integer 4/3 --- bashline.c - put code into command_word_completion_func to skip all but pathname completion checks if the hint given is an absolute pathname - fix strncmp of basename against hint text (??); this always failed unless there was no pathname given 4/7 --- bashline.c - fixed the cases where the simple `last character is a command separator' test fails for distinguishing between program name completion and filename completion: the tokens >&, >|, and <&. - corrected fix of 4/3 to handle command word completion with and without leading paths 4/8 --- lib/readline/readline.c - break the declaration and initialization of a variable with a call to setjmp into a declaration and separate assignment statement (for Cray) 4/10 ---- subst.c - A word that uses both "" and '' to do quoting will not be marked as fully quoted by expand_word_internal. Wrote a fully_quoted_word () predicate function to solve that. - Quoted patterns with globbing characters are sent to the globbing functions because glob_pattern_p doesn't understand shell quoting. Wrote a new function unquoted_glob_pattern_p, to fix that. 4/13 ---- shell.c - make sure default_input is valid and being used for an interactive shell started without line editing 4/15 ---- builtins/common.c - redid part of the new get_numeric_argument code to avoid a call to atoi and just do everything ourselves variables.c - only call set_if_not on PS1 and PS2 in initialize_shell_variables if the shell is not interactive - check the variable returned by looking up PWD to make sure it's non-null before trying to use it in initialize_shell_variables jobs.c - add a descriptive tag to the call to get_working_directory in job_working_directory 4/17 ---- test.c - fixed a typo in group_member: gid -> pgid in assignment statement - in the normal Sun compilation environment, getgroups returns an array of ints, not gid_ts. getgid and getegid also return ints. stat structures contain a gid_t, though. Need to reorder the includes so that stat.h is included first, then uid_t and gid_t are redefined to int, then the rest of the files are included. Also need to cast the values from a stat structure to gid_t and uid_t before comparing them to the results of getgid and getuid when implementing -O and -G 4/21 ---- lib/readline/readline.c - added code to rl_getc to handle EWOULDBLOCK/EAGAIN and turning off no-delay mode 4/22 ---- builtins/cd.def - made change_to_directory canonicalize the pathname before attempting to chdir(2) if follow_symbolic_links is set 4/23 ---- builtins/type.def - made type handle absolute program names by just echoing the name builtins/alias.def - made single_quote correctly handle single quotes in aliases 4/28 ---- trap.c - made ignore_sig and restore_default_signal check that the value of the original signal handler (in original_signals) was valid before trying to use it. Bug noticed with `trap "" 1 2 3' as first line in script. 4/29 ---- lib/readline/readline.c - made rl_signal_handler only unblock the signal it just received on BSD and Posix systems 5/5 --- builtins/type.def - don't look up the function with find_function until we actually need the info execute_cmd.c - in do_redirection_internal, don't do unnecessary work. For instance, >&1 ends up duplicating fd 1 as itself (then adding a close for it, which is a bug) 5/8 --- general.h - don't attempt to declare index and rindex if `index' is defined (with #define) lib/readline/vi_mode.c - fixed the `c' command so that cl and c are equivalent -- formerly the c changed two characters instead of one. The same fix was made to rl_vi_change_to, rl_vi_delete_to, and rl_vi_yank_to parse.y - bash_add_history did not correctly handle lines that ended with an escaped newline. It would insert semicolons in the locations where the line breaks occurred. 5/12 ---- documentation/bash.1 - removed references to pushd_silent - added setion on process substitution subst.c - fixed a bug in expand_word_internal that caused $xxx"" to expand to nothing when `xxx' was unset. The code now explicitly turns a partially quoted string that expands to nothing (istring[0] == 0) into a QUOTED_NULL (istring[0] = CTLNUL) before returning the word list. 5/15 ---- documentation/bash.1 - added a missing .PD in the builtins section after the line summarizing `:' - added text describing the effect of additional arguments to the `.' command subst.c, general.c, jobs.c, nojobs.c, error.c, getcwd.c - only declare errno as `extern int' if it's not #defined builtins/{bind,exec,fc,kill,source}.def, lib/readline/{readline,history}.c - ditto with errno lib/glob/fnmatch.c - ditto with errno 5/17 ---- execute_cmd.c - shells compiled with job control active should perform the implicit ` before defining set_signal_handler (on Posix systems) builtins/command.def - change HPUX_7 to hpux_7 5/27 ---- builtins/times.def - added USGr3 to the list of systems that should have HAVE_RESOURCE undefined even though exists 5/28 ---- machines.h - added a description for 386/486 boxes running BSDI BSD/386 support/mksysdefs - looks for and writes a define to sysdefs.h if it's found maxpath.h - rewritten -- now includes limits.h if HAVE_LIMITS_H is defined, then tries to define MAXPATHLEN as PATH_MAX 5/29 ---- lib/readline/history.c - added definition for rl_string_extract_single_quoted so the code inhibiting history expansion inside quotes does not depend on the shell - change to use rl_string_extract_single_quoted - removed code that would have inhibited history expansion in double-quoted strings subst.c - make string_extract_{single,double}_quoted static again 6/1 --- trap.c - systems with _POSIX_VERSION defined need not reset the signal handler inside trap_handler - set_signal should use set_signal_handler() to install the signal handler rather than signal() - initialize_traps needs to use set_signal_handler for SIGINT and SIGQUIT rather than signal() - restore_default_signal needs to use set_signal_handler parse.y - the readline interface code needs to use set_signal_handler to install the SIGINT handler lib/readline/readline.c - new function rl_set_sighandler, which is the readline analogue of the bash set_signal_handler - rl_set_signals and rl_clear_signals need to use rl_set_sighandler for SIGINT and SIGALRM 6/2 --- signames.c - fixed a typo (signame_names -> signal_names) 6/3 --- subst.c, general.c - AIX machines need to use sysv_getc rather than getc when reading from the command substitution pipe -- read(2) is not restarted automatically when interrupted by a signal and returns EINTR 6/5 --- documentation/bash.1 - removed documentation of M-C-j command in emacs editing mode - added description of M-{ (complete-into-braces) - added description of M-! and C-x ! command completion - added description of M-TAB dynamic history completion lib/readline/search.c - new file containing code to perform non-incremental history searches. Functions to call are rl_noninc_forward_search and rl_noninc_backward_search lib/readline/emacs_keymap.c - bound M-^R to non-incremental-search-backward, M-^S to non-incremental-search-forward lib/readline/readline.h - extern defintions for rl_noninc_{forward,backward}_search lib/readline/funmap.c - added names `non-incremental-forward-search-history' and `non-incremental-reverse-search-history' lib/readline/vi_mode.c - rl_vi_yank_arg should put readline into insertion mode when it is done lib/readline/vi_keymap.c - ^I should just insert when in vi insertion mode, rather than attempt completion 6/6 --- lib/readline/funmap.c - removed the `vi-dosearch' bindable string, since rl_vi_dosearch is really a private function for vi_mode.c. It does not fit the calling conventions of the bindable readline functions (and I've since removed it) lib/readline/readline.h - removed the extern definition for rl_vi_dosearch lib/readline/search.c - added new functions rl_noninc_forward_search_again and rl_noninc_backward_search_again to search for the last saved search string from the current `noninc' history position lib/readline/vi_mode.c - removed the vi history search code and changed rl_vi_search and rl_vi_search_again to call the non-incremental search code from search.c 6/8 --- [changes from bfox version dated 5/10] bashline.c - changed the conditional clause that decides whether a token is in a command position for command name completion to be a little simpler bracecomp.c - new version from bfox config.h - moved BUFFERED_INPUT define here flags.c - new flag for interactive comments - reformatted find_flag flags.h - added interactive_comments and an extern declaration of restricted machines.h - new cray definition from bfox maxpath.h - don't include limits.h if BUILDING_MAKEFILE is defined shell.c - moved the check for restricted to immediately after the sourcing or .profile test.c - now includes shell.h in the initial block of includes trap.c - new function get_original_signal to take care of the bookkeeping of correctly setting up original_signals[sig] trap.h - signal_decode -> decode_signal builtins/exec.def - adjusted the help text to make it clear that only non-interactive shells check the no_exit_on_failed_exec variable and exit if the execve fails builtins/set.def - added description and code to implement set -o interactive_comments lib/glob/glob.c - if PAT is empty when glob_vector is called, skip the loop and return one empty filename. This is how to make echo */ echo only directory names lib/readline/parens.c - new file from bfox implementing parenthesis matching for readline lib/readline/emacs_keymap.c - if PAREN_MATCHING is defined, perform `show-matching' on `)', `}', and `]' lib/readline/history.c - add `$' to the list of separating characters in history_tokenize so that two-character `$' tokens ($$, $!, $() are parsed correctly lib/readline/readline.c - Make an argument of 1 to rl_rubout and rl_delete work the same as if any other argument had been given by saving the text on the kill ring - in rl_getc, check that the value returned from read == sizeof unsigned char lib/readline/readline.h - added declaration of rl_event_hook, which is the address of a function to call periodically while readline is awaiting character input support/cppmagic - new implementation from bfox, now returns a full cpp specification, complete with system dependent flags support/mksysdefs - added a variable MAKE_ANSI which, if set to true, causes the ansi Makefile to be generated - added code to recognize various types of cray/unicos machines [end of fixes from bfox] getcwd.c - integrated changes that allow getcwd to handle paths longer than PATH_MAX by shifting to using a dynamically-allocated buffer builtins/set.def - make the check for emacs or vi check to make sure the shell is interactive 6/10 ---- builtins/common.c - the dollar_arg_stack was never being reallocated in push_dollar_vars because of a stray `if (!dollar_arg_stack)' before the realloc call 6/12 ---- cpp-Makefile - added some missing $(RM) $@ in explicit targets for objects (the ones that don't go through the default rules) as well as the targets for the auxiliary programs subst.c - redid the way bash handles assignment statements on command lines to fix two bugs: 1) variable assignments are not supposed to affect expansion performed on the same line, if a command is to be run 2) if the words left after removing the variable and environment assignments don't expand to a command word, the assignments should affect the shell's environment new function: separate_out_assignments removes variable assignments that precede other words and puts them on VARLIST removes environment assignments in the rest of the words, if set -k is in effect, and puts them on ENVLIST just before expand_words_internal returns, it checks varlist and envlist (if it is doing expansion) and performs the assignments, if any. If it's returning a null list, these assignments affect the shell's environment 6/13 ---- subst.c - eliminated ENVLIST; VARLIST can serve for both variable and environment assignments - sped up expand_words_internal's section for brace expansion by eliminating unnecessary copies -- original word is used unless brace expansion occurred, in which case the original word is linked to a list of words to dispose when brace expansion is completed - sped up the word expansions section of expand_words_internal by (possibly) eliminating a call to reverse_list on the results of word expansion and splitting on $IFS, because the most common case will expand to only a single word - `expanded' needs to be freed only if expansion and word splitting took place, no moving the call to dispose_words up after the call to word_list_split means that the common case no longer needs to copy the list - sped up globbing by eliminating copying as was done for brace expansion -- keeping a list of `disposable' words and using the original list contents if expansion failed or was not performed - in the case that we're not globbing a word because it has no unquoted globbing characters, eliminated the copy and creation of a brand new list - added a define GLOB_FAILED that handles the cases of using and not using the GNU libc Posix.2 globbing library - moved the code that dequotes the original word so it's executed only if the glob fails - wrapped the code that performs globbing inside an if (new_list) clause - call REVERSE_LIST only if we're actually doing globbing; otherwise dequote the list and go on to performing assignments 6/15 ---- lib/glob/glob.c - if the directory portion of a pathname to be globbed contains quoted globbing characters, the quotes (backslashes) need to be removed before the code tries to open and read that directory 6/17 ---- execute_cmd.c - index -> indx in extract_colon_unit nojobs.c - make wait_for_single_pid return the status of the pid it's waited for, instead of throwing it away - added a simple pid-status array to avoid multiple calls to wait_for and calling wait on dead processes. make_child adds pids to this array, and the status of a pid is updated when it's returned from wait(2) or waitpid(2) - removed the checks for whether or not the pid is valid (using kill(2)) in favor of using the information in the pid_list parse.y - call cleanup_dead_jobs on non-job-control systems to clean up the pid_list 6/18 ---- subst.c - include config.h before trying to include string.h or strings.h so USG is properly defined 6/19 ---- support/mksysdefs - look for /usr/include/string.h and define HAVE_STRING_H if found. This is the file mandated by ANSI C. cpp-Makefile - look for the HAVE_STRING_H definition from sysdefs.h and define it as part of SYSTEM_FLAGS if found - added the HAVE_STRING_H to LIBRARY_CFLAGS, so readline can decide what to include general.c, parse.y, subst.c - use the HAVE_STRING_H define in deciding which flavor of the include file to use builtins/common.c - include strings.h or string.h, depending on the definition of HAVE_STRING_H - added extern declaration of rindex and index at file scope - removed extern declaration of rindex in find_hashed_filename lib/readline/rldefs.h - removed the messy #ifdef clauses and such from readline.c and moved them to this new file - added a section on string functions (string.h vs. strings.h, whether or not index and rindex need to be defined) lib/readline/readline.c - removed the messy #ifdef clauses that attempt to parameterize things and define constants on a system-specific basis - removed the definition of the unused variable xoff_state flags.c - corrected a typo in the comment describing jobs_m_flag jobs.c - new function, current_working_directory (), which returns the cwd without calling malloc to allocate memory, even indirectly. This can safely be called from a signal handler, like when flush_child calls notify_of_job_status if async notification is on - changed call to job_working_directory in pretty_print_job to call current_working_directory - moved assignment to DIR in notify_of_job_status after the calls to sigprocmask to block SIGCHLD and SIGTTOU - in notify_of_job_status, DIR is now assigned via a call to current_working_directory and hence does not need to be freed - notify_of_job_status now initializes DIR to NULL and calls current_working_directory only if it needs to - changed a call to reverse_list in stop_pipeline to REVERSE_LIST, because most pipelines will be only one process long builtins/jobs.def - make an illegal jobspec cause a failure instead of returning 0 all the time builtins/times.def - times now ignores any arguments for sh and ksh compatibility 6/20 ---- execute_cmd.c - fixed execute_until_or_while to actually return the status of the last command executed in the body rather than last_command_exit_value, which is the status of the test (which has just failed) 6/23 ---- execute_cmd.c - fixed execute_subshell_builtin_or_function to exit with last_command_exit_value if a builtin longjmps to top_level with value EXITPROG, rather than with EXITPROG (3) 6/25 ---- cpp-Makefile - added rldefs.h to READLINE_SOURCE builtins/type.def - `type' now returns 0 if no arguments are given jobs.c - make wait_sigint_handler obey interrupt_immediately as well as whether the wait builtin is the current command (XXX - in the future remove the check for wait_builtin entirely and just use interrupt_immediately, because this_shell_builtin could be changed by the code that runs from a SIGCHLD trap) - make the code that runs commands from SIGCHLD traps set interrupt_immediately to 1 each time through the loop 6/26 ---- builtins/common.c - declare extern void vfree and use it in the add unwind protect call, to avoid having to declare what type free returns execute_cmd.c, builtins/common.c - removed all references to builtin_pipe_in_hack, which is no longer used parse.y - removed all references to current_token_being_expanded and pending_token_being_expanded, since their function is subsumed by expanded_token_stack. Also no need to save this on the pushed string stack, so that element is removed from the struct. (current_token_being_expanded == expanded_token_stack->saved_token) builtin/jobs.def - removed immediate return if job_control == 0. This makes it work in command substitution subshells 6/29 ---- expr.c - added unary `+' - added bitwise not (`~') at same precedence as logical not (`!') - added left and right shifts (<<, >>) between +,- and the comparisons - added bitwise and, or, xor (&, |, ^) - added logical and, or (&&, ||) - changed exp1 to allow multiple consecutive ! and ~ (in the same way that exp0 allows multiple consecutive leading - and + lib/readline/history.c - close memory leak -- in history_do_write, free the output filename before returning - close same memory leak in read_history_range builtins/enable.def - make `enable' with no arguments print only the enabled builtins, and `enable -n' with no other arguments print only the disabled builtins builtins/setattr.def - make readonly and export return failure when given -f with an argument that is not a function name - added -n to the documentation for readonly execute_cmd.c - cleaned up the code that checks for #! and binary files some: made sure the file descriptor was always closed, made sure sample_len was > 0 before checking the first two characters, collapsed two if statements into one jobs.c - changed call to job_working_directory in start_job to call to current_working_directory - changed input_tty to a macro - changed the call to QUIT in wait_for after the wait_loop label to depend on whether job_control is enabled; the test against the terminal process group is superfluous now that we use wait_sigint_handler builtins/fg_bg.def - Posix.2a specifies that fg and bg should return failure if run when job control is disabled 7/2 --- variables.c - when an existing variable is given a new value by bind_variable, turn off the invisible attribute shell.c - dup default_buffered_input using fcntl(fd, F_DUPFD, 10) to put it above the shell's user-manipulatable range execute_cmd.c - in add_undo_redirect, make the redirection added a r_duplicating_input so buffered streams get duplicated as necessary. It makes no difference for the non-buffered-stream code 7/3 --- subst.c - command_substitute needs to set interactive = 0 and leave interactive_shell reflecting the interactive state of the parent shell signames.c - prevent SIGGRANT and SIGRETRACT from overriding other already-defined signal names, since, on the RT at least, they override SIGUSR2 and SIGEMT, respectively, which are much more common jobs.c - in notify_of_job_status, if job control is not enabled, do not print the status messages. Mark dead jobs as notified so they get cleaned up properly braces.c - when checking for `,' if a closing brace was not found, make sure the , is unquoted - make sure we found an unquoted , before attempting to perform the expansion -- since brace_gobbler purports to understand quoting with \, the rest of the code should support it - disabled the code that caused a failure longjmp if a matching closing brace was not found -- the pattern should be left unchanged, as with any other failed expansion trap.c - new function maybe_set_sigchld_trap, which sets the trap on SIGCHLD if and only if the signal is not currently trapped jobs.c - call maybe_set_sigchld_trap after running SIGCHLD trap commands on the death of a child to restore the trap handler, so if the trap handler calls `trap xxx CHLD' it will not be overwritten lib/glob/fnmatch.c - fnmatch must treat [ without a matching ] as a `regular' character to be matched against the string so that the Posix.2 rules for case command matching are not broken shell.c - change the call to fcntl that sets default_buffered_input to one to dup2(fd, getdtablesize() - 1) to hopefully get the highest file descriptor 7/6 --- parse.y - if read_token reads a character that matches the current delimiter character, it should make sure the character is `"' before checking delimited_paren_level and blindly accepting it. There are other values for `delimiter' besides `"'. shell.c - turn on no_line_editing for non-interactive shells builtins/set.def - removed test against interactive_shell when deciding whether or not emacs or vi is `on' [backed out of fix from 6/8] 7/8 --- lib/readline/history.c - changed get_history_event so that shell metacharacters (;&()|<>) can terminate an event spec subst.c - the TERM and TERMCAP variables need special handling only if READLINE is defined - ditto for history_completion_file machines.h - new description for HPs running OSF/1 7/9 --- lib/readline/readline.c - new variable `eight-bit-input'. If this is on, readline disables ISTRIP for the Posix or sysv tty drivers execute_cmd.c, variables.c - new variable `subshell_environment' set in children right after forking and reset in shell_reinitialize. It means to look in the temporary environment first when looking up variables and functions 7/13 ---- config.h, parse.y - changed CSH_HISTORY_EXPANSION to BANG_HISTORY_EXPANSION shell.c - made all the history-related code #ifdef HISTORY - made maybe_save_shell_history be called only if the shell is interactive and we're remembering history lines parse.y, flags.c, flags.h, subst.c, variables.c - made all the history-related code #ifdef HISTORY - assignment_acceptable and command_token_position no longer are dependent on ALIAS being defined, since they are used to return ASSIGNMENT_WORD tokens builtins/bind.def - removed inclusion of readline/history.h builtins/exec.def, builtins/common.c - made all the history-related code #ifdef HISTORY builtins/fc.def, builtins/history.def - added a $DEPENDS_ON HISTORY line builtins/mkbuitins.c - line_error should not try to print error_directory without checking to see whether it is NULL builtins/Makefile - add $(DIRECTDEFINE) to the command line that builds builtins.c lib/glob/tilde.c - use getpwuid(getuid()) to look up the home directory of the user executing the shell for tilde expansion ~/foo if $HOME unset cpp-Makefile, subst.c, config.h - Fixes to make brace expansion a configuration option, on by default 7/14 ---- builtins/set.def - fixed unset so an attempt to unset a readonly variable or function is an error (as Posix.2 specifies) general.h - removed extern declarations of index, rindex - added extern declarations for strchr, strrchr - changed `member' to use strchr subst.c, general.c, bashline.c, execute_cmd.c, parse.y, test.c - changed calls to index to calls to strchr, calls to rindex to calls to strrchr builtins/echo.def, builtins/fc.def, builtins/common.c - changed calls to index to calls to strchr, calls to rindex to calls to strrchr lib/glob/glob.c - changed calls to index to calls to strchr, calls to rindex to calls to strrchr lib/readline/history.c, lib/readline/readline.c, lib/readline/vi_mode.c - changed calls to index to calls to strchr, calls to rindex to calls to strrchr lib/readline/vi_mode.c - changed calls to strchr to inline checks, since we're only checking for two characters 7/15 ---- variables.c - If PPID is imported, turn off export status 7/17 ---- general.h - for USG and Posix systems, define NO_READ_RESTART_ON_SIGNAL general.c - sysv_getc --> getc_with_restart - compile in getc_with_restart if NO_READ_RESTART_ON_SIGNAL is defined subst.c - call getc_with_restart in command_substitute if on a system with NO_READ_RESTART_ON_SIGNAL defined parse.y - call getc_with_restart in yy_stream_get if NO_READ_RESTART_ON_SIGNAL is defined input.c - change b_fill_buffer to restart reads on EINTR general.h - wrap the declarations of strchr and strrchr inside an #ifdef strchr because some ANSI C compilers (e.g., RS/6000) make them defines in /usr/include/string.h 7/20 ---- lib/readline/readline.c - wrap the declarations of strchr and strrchr inside an #ifdef strchr because some ANSI C compilers (e.g., RS/6000) make them defines in /usr/include/string.h 7/21 ---- lib/readline/parens.c - wrap all parameters and variables associated with the select call into #ifdef FD_SET execute_cmd.c - added tilde expansion to the pattern list members of case statement clauses, as specified by Posix.2 d11.3 lib/readline/readline.c - when comparing members of the c_cc array directly against _POSIX_VDISABLE, cast both sides to unsigned char support/getcppsyms.c - recognized __svr4__ machines.h - for Sun machines, if __svr4__ is defined and USGr4 is not, define USGr4 shell.c - some machines need sys/types.h included before stdio.h (mostly for size_t) lib/malloc/malloc.c - add SunOS5 to the list of systems that do no redefine valloc (?) 7/22 ---- make_cmd.c - save and restore the value of line_number around reading a here-document lib/glob/glob.c - change to use HAVE_STRING_H to decide which version of the header files to include 7/25 ---- execute_cmd.c - fixed execute_command_internal so that failure to perform redirections attached to a shell compound command like if or while causes the command to return failure right away - eliminated use of redir_result in execute_builtin_or_function - changed execute_while_or_until so that body_status is initialized to EXECUTION_SUCCESS, and then directly returned without a check for commands_executed, so that the Posix.2 behavior of returning success when no body commands are executed is preserved 7/27 ---- jobs.c - make sure that trap_list[SIGCHLD] is not set to IGNORE_SIG before trying to run commands when a SIGCHLD is caught test.c - define and use UID_T and GID_t, which are equivalent to uid_t and gid_t on all systems but SunOS 4.1.?, because SunOS makes `int' the return value of all the uid and gid functions (except stat!) 7/28 ---- shell.c - call end_job_control in termination_unwind_protect variables.c - if PWD is imported from the environment and it is wrong (i.e., not the same as the current directory), rebind it to the current directory (as obtained by get_working_directory) 7/29 ---- lib/readline/history.c - do not history expand ! when immediately preceded by [, assuming it's the globbing pattern negation character execute_cmd.c - plug some memory leaks -- redirectee_word needs to be freed before returning from do_redirection_internal - changed the noclobber code to open the file with O_EXCL after verifying that it's not there with stat to shorted possible race conditions (this doesn't help over NFS) 7/30 ---- lib/readline/history.c - treat a negative arg to stifle_history as 0 lib/readline/readline.c - #undef PC before declaring it as a variable because some systems (Solaris2) define it in system header files - changed type of insert_some_chars, update_line, and delete_chars to void - added a check when doing filename completion in filname_completion_function to see if the first characters of the filename and directory entry match before calling strncmp (inline expansion of STREQN) 7/31 ---- lib/readline/vi_keymap.c - Make arrow keys work for history in vi command mode by binding `o' and `[' in vi_escape keymap to rl_arrow_keys 8/6 --- subst.c - broke the code that quotes strings for the globbing functions into a separate function: quote_string_for_globbing (), so there are not two copies of it execute_cmd.c - rewrote execute_case_command so that quote_string_for_globbing is called for the patterns in a pattern list and reordered some other code for clarity - execute_case_command now turns quoted null strings into empty strings because quote_string_for_globbing does not do it 8/7 --- lib/readline/readline.c - added generic code to init_terminal_io to fetch the termcap codes for the arrow keys (ku, kd, kl, kr) and bind the right functions to them lib/readline/vi_keymap.c, lib/readline/emacs_keymap.c - removed bindings to `rl_arrow_keys' from all keymaps 8/13 ---- subst.c - command_substitute: only close fildes[1] if it's > 2 8/26 ---- lib/readline/readline.c - rewrote get_y_or_n to get rid of label and goto - added code to the completion listing function that makes it skip padding the line out with blanks after writing what will be the last filename on the line machines.h - added -DHAVE_SETDTABLESIZE to SYSDEP_CFLAGS for Sequents running Dynix/ptx 8/28 ---- machines.h - added a machine description for the BBN Butterfly from Kaveh Ghazi variables.c - HPOSF1 machines cannot redefine getenv() support/getcppsyms.c - recognize __hp_osf parse.y - allow reserved word recognition after done, fi, and esac Posix.2 section 3.4 seems to allow this lib/readline/readline.c - include on OSF/1 machines for TIOCGWINSZ subst.c - in command_substitute, when checking to see that we're not overflowing `istring', allow for the insertion of two characters in the check to account for possible quoting 9/3 --- builtins/bashgetopt.c - force reset_internal_getopt to set loptend to NULL - force internal_getopt to set loptend to NULL when the list it gets is NULL, and when it detects that it's been called with a different word list 9/8 --- variables.c - make adjust_shell_level clamp the value of $SHLVL at 1 [Fixes from bfox 1.13] bashline.c - remove `%' from list of readline special prefixes config.h - BANG_HISTORY_EXPANSION -> BANG_HISTORY cpp-Makefile - add HAVE_STRCHR - changes to macros that build libraries - reorganized library declarations and support execute_cmd.c - indx -> p_index in extract_colon_unit general.c - provide definitions of strchr, strrchr for systems that do not have them machines.h - define `Solaris' for Suns running Solaris 2.x - turn all the definitions of M_OS into strings parse.y - replace delimiter and old_delimiter with a stack of delimiters encountered while parsing the current token subst.c - removed all traces of EIGHT_BIT variables.c - new function dispose_temporary_vars, for both dispose_used_env_vars and dispose_function_env lib/readline/readline.c - `eight-bit-input' -> `meta-flag' lib/tilde - new directory for the tilde expansion library code [end of bfox changes] cpp-Makefile - pass $(RM) down to makes in libraries 9/10 ---- parse.y - remove the bfox change that set CMD_FORCE_SUBSHELL for async commands 9/14 ---- builtins/bind.def - surround the code with #ifdef READLINE builtins/fg_bg.def - surround the body of the code with #ifdef JOB_CONTROL builtins/getopts.def - surround the body of the code with #ifdef GETOPTS_BUILTIN builtins/alias.def - surround the body of the code with #ifdef ALIAS 9/15 ---- lib/readline/emacs_keymap.c - bind rl_noninc_reverse_search to M-P and rl_noninc_forward_search to M-N, respectively lib/readline/readline.c - made name_key_alist struct static - added new functions to manipulate keymaps: rl_get_keymap_by_name() rl_get_keymap() rl_set_keymap() lib/readline/keymaps.h - added declarations for the new keymap functions builtins/bind.def - added -m map option to allow bind commands to specify the keymap to be used when binding key sequences to readline commands 9/16 ---- builtins/alias.def - in single_quote, allocate a new string three times as big as the old to handle the possible quoting characters bashline.c - set last_fignore to null after freeing it in setup_ignore_patterns 9/17 ---- parse.y - added code to handle the functionality of `ignoreboth' as a value for history_control (ignore both lines beginning with spaces and duplicates of the last history entry) - don't use history_control for the second and subsequent lines of a multi-line command when command_oriented_history is in effect 9/18 ---- bashline.c - fix attempt_shell_completion to call command_word_completion_function even if the supplied text begins with `/' - fix command_word_completion_function to make sure that absolute program names passed are executable before returning them as possible matches 9/20 ---- parse.y - If we read a blank line (shell_input_line[0] == 0) and we have reached EOF (shell_input_line_terminator == EOF) then don't echo the line, even if -v has been turned on 9/23 ---- lib/malloc/malloc.c - changed to use USG rather than SYSV - changed BSD42 to BSD4_2 like emacs malloc.c - removed conditional compilation code dealing with VMS - include getpagesize.h only if BSD4_2 is not defined - changed conditionally compiled code dealing with BSD, since BSD is not defined by bash and malloc.c does not include sys/param.h, which defines BSD on 4.x BSD systems lib/malloc/getpagesize.h - new implementation, inspired by gdb 4.6 uses _SC_PAGESIZE, if present defaults to 4096 lib/readline/vi_keymap.c - when in insert mode, Posix.2a says that \ is quoted-insert - remove the binding to vi_escape_keymap; Posix.2a says that ESC in movement mode does nothing (vi description) 9/24 ---- shell.c - shell should send SIGHUP to all it's jobs when it receives SIGHUP only if it is an interactive login shell execute_cmd.c - systems running the Andrew File System don't use the Unix file mode bits to decide whether or not a file is executable (they're unused, since AFS as ACLs), so executable_file needs to call access (file, X_OK) if running on AFS 9/25 ---- jobs.c - make sure a non-interactive shell initializes original_pgrp to NO_PID, so it does not attempt to give the terminal back to that pgrp when it exits or calls the `exec' builtin 10/3 ---- machines.h - add -DHAVE_RESOURCE to the NeXT machine description as SYSDEP_CFLAGS - add -DHAVE_GETDTABLSIZE and -DHAVE_SETDTABLESIZE to Dynix/ptx description shell.c - make a non-interactive script shell call dup2 on the fd it has open to the script file to move the descriptor to one that hopefully user programs will not attempt to use general.c - make the definition of getdtablesize() depend on HAVE_GETDTABLESIZE not being defined. Auto-define that for non-USG systems (or HPUX). This allows a SYSDEP_CFLAGS entry to override it builtins/ulimit.def - new function canraise(cmd, curlim, newlim) to call on systems without HAVE_RESOURCE to decide whether or not the limit can be raised. Maybe we should remove the test altogether and let the system call fail instead 10/8 ---- execute_cmd.c - If a command is not found, make the exit status 127 like Posix.2 says 10/14 ----- print_cmd.c - changed cprintf(s) to cnprintf(args_length, s) and made cnprintf malloc the buffer it uses for vsprintf to avoid overrun of the 5000-character temp buffer used previously. args_length is the expected total length of all the arguments 10/15 ----- jobs.c - set last_command_exit_value before calling a trap handler for SIGINT: new function process_exit_status(), changes to use it 10/18 ----- print_cmd.c - removed `cnprintf' changes - re-implemented cprintf as a miniature vsprintf interpreting %s, %d, and %c and using a dynamically-allocated buffer support/mksysdefs - look for /usr/include/varargs.h and define HAVE_VARARGS_H if found cpp-Makefile - pass HAVE_VARARGS_H down to the makes in the various libraries 10/26 ----- lib/glob/glob.c - free `result' before using temp_results to return the value of glob_dir_to_array -- plugs a small memory leak 11/2 ---- [Fixes from bfox version dated 10/18] bashline.c - separated definitions of BRACE_COMPLETION and the extern declaration of the brace completion functions config.h - make PROCESS_SUBSTITUTION depend on the value of MKFIFO_MISSING cpp-Makefile - add posixstat.h, tilde.[ch], xmalloc.c to the readline library sources (also the corresponding object files) - make the definition of HAVE_TILDE_SOURCE depend on the definition of HAVE_READLINE_SOURCE lib/posixheaders - new directory, for posix support functions and header files - various cleanups to the library support rules execute_cmd.c - make the practice of checking hashed filenames for executability dependent on $POSIXLY_CORRECT general.c - The `hppa' running hpux-8 does not have `getdtablesize' general.h - make the extern declaration of strchr and strrchr go away if __STDC__ is defined jobs.h - test for and define all of the W* macros individually machines.h - completely new alliant description from bfox - add -DMKFIFO_MISSING to NeXT SYSDEP_CFLAGS - add description for Siemens MX500 running `sinix' builtins/common.c - move code that depends on BANG_HISTORY being defined inside #ifdef HISTORY blocks, since you can't have BANG_HISTORY without HISTORY builtins/echo.def - make -E work all the time, not just on sys5 systems builtins/enable.def - add -all option (with synonym of -a) - change `DISABLED' to 2 and make argument to list_some_builtins a bitmask builtins/kill.def - it is an error if `signum' == NSIG documentation/bash.1 - added -E flag to `echo' - added description of -all to enable lib/readline/tilde.c, lib/readline/xmalloc.c - links to these files for standalone readline lib lib/readline/{funmap.c,history.c,keymaps.c,readline.c} - make xmalloc and xrealloc static again and dependent on the definition of STATIC_MALLOC lib/readline/readline.c - include only if NO_SYS_FILE is not defined - add support for a `stat' char after filenames when listing completion alternatives if VISIBLE_STATS is defined - add support for _GO32_ definition (PC) - add LibraryVersion internal variable - initialize rl_instream and rl_outstream to NULL, because all of a sudden stdin and stdout may no longer be constants - make readline_default_bindings `static void' - add support for quoting a portion of the input line to make it immune from completion support/getcppsyms.c - recognize `alliant' support/mksysdefs - presence of /bin/fxc.info indicates that the machine is an alliant support/{FAQ,PORTING,mklinks,fixdist} - new files [end of changes from bfox] machines.h - added support for HP-UX 9.0 (hpux_9) 11/12 ----- machines.h - added -lsocket to the REQUIRED_LIBRARIES define for ICL RS6000 - removed the `#undef HAVE_WAIT_H' from the isc386 description lib/readline/rltty.c - split off almost all tty-related code from readline.c to this file 11/13 ----- lib/readline/rltty.c - changed the way the bsd tty code works to use a `struct bsdtty' that encapsulates all of the bsd tty state into a single structure that can be passed around by reference - changed the bsd tty setup and teardown code to be more like the ce version of things lib/readline/rldefs.h - added code to define HAVE_USG_SIGHOLD for svr3 machines. The prepping and deprepping code uses them to block SIGINT while getting and setting the tty attributes 11/14 ----- lib/readline/rltty.c - encapsulated the system-specific code for setting up the terminal into a function: `prepare_terminal_settings'. This means that the code for rl_prep_terminal and rl_deprep_terminal is basically identical between tty driver versions - changed the BSD version of rltty_set_default_bindings to use a struct bsdtty and get_tty_settings - rl_prep_terminal and rl_deprep terminal are now non tty-driver specific -- there is only one version of each function. The tty-driver specific code is now in {set,get}_tty_settings and prepare_terminal_settings 11/24 ----- general.c - make the function definitions for bcopy and bzero depend on a HAVE_BCOPY define machines.h - define HAVE_BCOPY for RS/6000s, RTs running AIX, and Linux - new description for Linux shell.c, variables.c - don't declare getpwuid for Linux systems support/getcppsyms.c - recognize `linux' and `__linux__' builtins/psize.c - don't redefine memset() for USG machines general.c - add extern declaration of getdtablesize() to dup2() replacement - don't compile in bcopy and bzero on Linux machines test.c - don't declare getgid, getegid, or geteuid on Linux lib/readline/rldefs.h - don't try to include on Linux machines lib/readline/readline.c - only call rl_parse_and_bind on non-empty lines when reading ~/.inputrc - allow backslash to quote characters in the key sequence to be bound, which allows you to bind C-x \ for example - allow delimiter characters in the body of a macro, quoted with a backslash - changed rl_function_dumper so that it outputs backslash-quoted " and \ when called by bind -d lib/readline/funmap.c - fixed a typo in the entry for `vi-replace' subst.c - make sure the $(( xxx )) case sets this_command_name to NULL so there are no confusing garbled error messages - fix a memory leak in $[ xxx ] code (free temp) - make $(( xxx )) case do the same variable expansion that the $[ xxx ] case does 11/25 ----- parse.y - removed CMD_FORCE_SUBSHELL assignments command.h - add a new flag for commands: CMD_NO_FORK shell.c - added a function run_one_command for -c shells that just sets up the top_level stuff for longjmp and calls parse_and_exec. This is controlled by the definition of ONESHOT execute_cmd.c - execute_disk_command takes an extra argument: nofork. If non-zero, this tells it to not fork for a command without pipes in or out - set NO_FORK for a simple command run in a subshell with want_subshell ( `( xxx )' ) builtins/common.c - if the from_file argument to parse_and_execute is "-c", then assume this is a one-shot -c command and set NO_FORK for simple commands. This is controlled by the definition of ONESHOT 12/1 ---- support/getcppsyms.c - add defines for bsdi and __386BSD__ machines.h - add a section for 386bsd 12/2 ---- input.c - added a new function check_bash_input (fd) which checks whether or not file descriptor fd is the buffered fd which bash is using to read a script, and, if so, swaps the buffered fd to a new file descriptor and reinits bash_input - input buffering now solves these problems: parent-child synchronization using the script fd in a user redirection auto-restart of interrupted reads on all systems speed execute_cmd.c - call check_bash_input from do_redirection_internal before a call to dup2 and a call to duplicate_buffered_fd 12/3 ---- builtins/getopt.c - only redefine `const' if it is not already #defined lib/readline/rltty.c - make sure HANDLE_SIGNALS is defined here as it is in readline.c 12/7 ---- lib/malloc/malloc.c - change the conditional around get_lim_data to be HAVE_RESOURCE (ulimit if not defined, getrlimit if it is) - removed the 4.1BSD version of get_lim_data - conditionalize the inclusion of sys/resource.h on the definition of HAVE_RESOURCE 12/11 ----- lib/readline/readline.c - changed the name of strpbrk to rl_strpbrk to avoid any conflicts with OS include files and libraries 12/15 ----- bashline.c - changed initialize_readline to type void execute_cmd.c - execute_for_command called expand_words with an extra argument jobs.c - changed stop_pipeline to use xrealloc instead of realloc lib/readline/readline.c - changed rl_complete_internal to call xmalloc instead of malloc variables.c - dispose_used_env_vars, non_unsettable declared void builtins/common.c - include because we cast things to struct stat * builtins/exit.def - change exit_or_logout to be declared static builtins/psize.c - removed call to memset and therefore the need to #ifdef it's definition builtins/bind.def, builtins/ulimit.def - add extern declaration for strerror() builtins/exec.def - add extern declaration for strerror() - add extern declaration for full_pathname() and remove casts to char * - add extern declaration for make_word_array() and remove casts to char ** builtins/fc.def, copy_cmd.c, shell.c, parse.y - add extern declaration for reverse_list() builtins/read.def - change free to vfree so systems don't complain about the extern declaration (type clashes, etc.) lib/tilde/tilde.c - include string.h or strings.h as appropriate to get the correct declaration of strcpy before the savestring macro uses it parse.y - add extern declaration for sub_append_string and remove casts to char * - add extern declaration for add_string_to_list and remove casts to WORD_LIST * 12/16 ----- lib/malloc/malloc.c - move the check for RLIMIT_DATA after the inclusion of (duh!) bashline.c - added extern declaration for get_working_directory jobs.c - added extern declaration for polite_directory_format execute_cmd.c - added extern declaration for copy_redirects subst.c - added extern declaration for reverse_list machines.h - new entry for KSR1 running KSROS (OSF/1) support/getcppsyms.c - recognize `ksr1' general.h - make sure that strcpy is declared before the definition of savestring alias.c, bashline.c, bracecomp.c, braces.c, copy_cmd.c, execute_cmd.c, expr.c, general.c, hash.c, jobs.c, mailcheck.c, make_cmd.c, print_cmd.c, trap.c, variables.c, parse.y - make sure that string.h or strings.h is included before general.h (which is included by shell.h) builtins/mkbuiltins.c - add extern declaration of strcpy if __STDC__ and strcpy not defined - include or as needed builtins/cd.def, builtins/shift.def, builtins/source.def, builtins/test.def, builtins/command.def, builtins/declare.def, builtins/fc.def, builtins/getopts.def, builtins/hash.def - include or before definition of savestring lib/tilde/tilde.c, lib/readline/chardefs.h - include or before definition of savestring lib/readline/readline.c - made glean_key_from_name cast NAME to unsigned char * before dereferencing it to better handle 8-bit character sets 12/17 ----- subst.c - made command_substitute set up top_level with setjmp so that shells running command substitution won't longjmp all the way back to main() if they're interrupted and call throw_to_top_level 12/18 ----- lib/readline/readline.c - split the code that handles setting the screen size off into a new function: set_screen_size - changed init_terminal_io to call set_screen_size - changed rl_handle_sigwinch to call set_screen_size instead of totally reinitializing the world on each SIGWINCH - added a new function cr() that simply puts the cursor at physical column 0 - changed rl_handle_sigwinch to call cr() and rl_forced_update_display() after resetting its idea of the screen size 12/20 ----- lib/readline/history.c - changed the way history_expand treats `\' to make it a general quoting character like the shell treats it so that allows single quotes to be quoted 12/23 ----- machines.h - changed M_OS define in BSDI description to BSD386, since cpp doesn't like BSD/386 12/28 ----- execute_cmd.c - changed execute_case_command so that expand_word_no_split is called on the `word', as Posix.2 specifies 1/5 --- machines.h - new machine description for Dec Alpha running Dec OSF/1 support/getcppsyms.c - recognize alpha, __alpha, osf, and __osf__ 1/7 --- lib/readline/readline.c - removed definition of HANDLE_SIGNALS - changed rl_signal_handler so that systems with HAVE_POSIX_SIGNALS defined will not set the SIGINT handler to SIG_IGN - include for _386BSD and BSD386 for TIOCGWINSZ lib/readline/rldefs.h - added definition of HANDLE_SIGNALS lib/readline/rltty.c - added GETATTR and SETATTR macros for termios/termio systems for use by get_tty_settings and set_tty_settings 1/9 --- shell.c - new variable: startup_state. Set to 0 for scripts, 1 for interactive shells, and 2 for -c command shells. Superset of the functionality provided by the `interactive_shell' variable builtins/common.c - changed parse_and_execute to use startup_state to detect that it's being called as a result of -c command, rather than the ad-hoc method previously employed 1/11 ---- support/getcppsyms.c - recognize `m88k' machines.h - new description for Motorola M88K Delta running SVR4 support/mksysdefs - moved the defaulting of `SYSDEF' to `cadmus' until just before the definition is written out shell.c - changed ambiguous assignment to `login_shell' by introducing a dummy variable (~line 400: login_shell = -++login_shell) lib/malloc/malloc.c - moved the code that decides whether or not to define USG or BSD4_2 inside checks for USG and USGr4, since USGr4 passes the tests for the various signals alias.c - changed a call to index() to strchr() 1/12 ---- lib/readline/readline.c - moved inclusion of posixstat.h before inclusion of rldefs.h (rldefs.h requires that stat.h be included before it) - don't test whether or not a file is a symlink or a socket in stat_char unless S_ISLNK and S_ISSOCK are defined, respectively 1/13 ---- machines.h - added -I/usr/ucbinclude to SYSDEP_CFLAGS and a #define USE_GNU_TERMCAP for the ICL DRS6000 description support/bashbug.c - added definition for gethostname() for systems that do not have it (USG except for SGI and HP) 1/14 ---- test.c - made the #define of uid_t also dependent on HAVE_UID_T being undefined. That way, hosts which have trouble can add a -DHAVE_UID_T to SYSDEP_CFLAGS in the machines.h entry - made the extern declaration of getgid() be conditionalized out on Sony non-Posix machines machines.h - added -DHAVE_UID_T to SYSDEP_CFLAGS in the Sony/BSD entry 1/15 ---- parse.y - made type of `report_syntax_error' be static void - made type of `handle_eof_input_unit' be static void - added an error message when EOF is reached unexpectedly (if EOF_Reached is 1 when report_syntax_error is called) - added `extern void make_here_document ();' make_cmd.c - made type of make_here_document be void execute_cmd.c - added declarations of set_clexec to function prologues for do_redirection and do_redirection_internal variables.c - added `extern long atol()' to assign_seconds () jobs.c - changed type of `making_children ()' to void - removed unused label `wait_exit' in wait_for() - changed `sigset_t set' to `sigset_t suspend_set' inside the BROKEN_SIGSUSPEND definition because `set' shadows the definition used in BLOCK_CHILD and UNBLOCK_CHILD mailcheck.c - changed type of add_mail_file to void alias.c - changed type of delete_all_aliases to void - changed block-local declaration of `tl' to `tlen', because `tl' shadows a function-scope variable input.c - made duplicate_buffered_stream return new fd (like dup2) when it finishes - made free_buffered_stream() a void-valued function bashline.c - cleaned up the precedence of the expression that checks whether or not the ignore patterns have changed in setup_ignore_patterns lib/readline/readline.c - made rl_gather_tyi a void-valued function - made rl_dispatch a void-valued function - made rl_redisplay a void-valued function - made free_history_entry a void-valued function - removed unused label `some_matches' from rl_complete_internal lib/readline/vi_mode.c - removed check of return value from rl_dispatch in rl_vi_redo, since rl_dispatch never returned one anyway lib/readline/history.c - removed unused label `search_won' in get_history_event - removed unused label `read_which' in get_history_event - removed unused label `bad_word_spec' in history_expand - removed unused label `error_exit' in history_expand - changed block-local declaration of `len' to `slen' in history_expand because len shadows a function-local variable - changed block-local declaration of `l' to `ll' in history_expand because len shadows a function-local variable - removed unused label `get_first' in get_history_word_specifier 1/18 ---- parse.y - fixed up the support for `unexpected EOF' errors by making read_token set `EOF_Reached' to 1 before returning yacc_EOF when it reads EOF while looking for the start of a token - added better messages for unexpected eof to report_syntax_error - added better messages for unexpected tokens to report_syntax_error - made handle_eof_input_unit reset EOF_Reached to 0 if the shell is interactive - made report_syntax_error reset EOF_Reached to 0 if the shell is interactive - changed the non-interactive error messages to add `line' before printing the line number rather than simply use filename:digit: 1/19 ---- builtins/type.def - changed code so that simple `type' (-all not specified) takes the same path as a regular command search (find_user_command() rather than user_command_matches()) 1/20 ---- shell.c - new variable `passwd_shell' set from the pw_shell field in the password file - new variable `passwd_dir' set from the pw_dir field in the password file variables.c - used passwd_shell and passwd_dir to eliminate the calls to the getpw* functions - if $SHELL is unset at shell startup, it is set to the value of passwd_shell 1/21 ---- support/mksysdefs - look for sys/ptem.h, define HAVE_SYS_PTEM_H if found - look for sys/pte.h, define HAVE_SYS_PTE_H if found cpp-Makefile - pass HAVE_SYS_PTEM_H and HAVE_SYS_PTE_H to the readline make lib/readline/rldefs.h - include sys/ptem.h and sys/pte.h depending on the above two definitions lib/readline/readline.c - include if on an AIX system to get TIOCGWINSZ and struct winsize machines.h - added #undef HAVE_ALLOCA to hpux_6 description. alloca seems to have problems when passing alloca'd memory to other functions (esp. in the globbing code, passing directory_name) 1/22 ---- machines.h - make the cadmus definition active only of M_MACHINE is not defined when the code gets there 2/1 --- builtins/set.def - changed the reference to $9 in the help string - added `-' to the help string listing the options documentation/bash.1 - changed the reference to $9 in the set builtin description - added `-' to the set builtin synopsis listing the options 2/2 --- machines.h - added REQUIRED_LIBARIES = -lPW -lc_s to SCO unix description when not using gcc variables.c - new variable builtin_env; builtin analogue of function_env - new function dispose_builtin_env to free up all strings in builtin_env - find_tempenv_variable now looks in builtin_env after the temporary environment execute_cmd.c - execute_builtin_or_function and execute_subshell_builtin_or_function now set up builtin_env for the `source' builtin so that things like this work: foo contains: echo XXX=$XXX echo XXX=$XXX and you run XXX=aaa . foo which should output XXX=aaa XXX=aaa (bug report by mfg@castle.ed.ac.uk) 2/3 --- execute_cmd.c - when a command is forced into a subshell with ( ), turn off its INVERT_RETURN bit in the flags so the exit status of the subshell is not inverted. In execute_command_internal 2/5 --- [work to make readline configurably 8-bit clean] lib/readline/readline.c - added variable convert_meta_chars_to_ascii, which controls whether meta characters are converted into ESC-prefixed key sequences. Set to 1 by default - added a readline variable `convert-meta', settable in a .inputrc, that controls the value of convert_meta_chars_to_ascii lib/readline/keymaps.h - changed the hard-coded keymap size of 128 to a #define of KEYMAP_SIZE, which is initially 128 lib/readline/keymaps.c - changed all instances of 128 to KEYMAP_SIZE - changed rl_make_keymap to initialize positions 128-256 to rl_insert if KEYMAP_SIZE > 128 lib/readline/chardefs.h - properly define _CHARDEFS_ to protect against multiple inclusion documentation/bash.1 - documented new `convert-meta' readline variable 2/7 --- lib/readline/keymaps.h - increased KEYMAP_SIZE to 256 lib/readline/emacs_keymap.c - added entries to make the keymaps 256 entries. The entries in emacs_standard_keymap are the ISO Latin-1 characters lib/readline/vi_keymap.c - added entries to make the keymaps 256 entries. The entries in vi_insertion_keymap are the ISO Latin-1 characters 2/8 --- lib/readline/readline.c - make sure that rl_display checks that there is room for 8 more characters when deciding whether or not to realloc the line, since we might have to insert a tab - rl_display_search should not use MESSAGE as a printf format string, since it might contain % - reversed arguments in calls to rl_kill_text in rl_unix_word_rubout so that killed text is prepended to the undo data rather than appended 2/9 --- builtins/alias.def - moved single_quote() to builtins/common.c and made it global builtins/trap.def - made sure that the output of `trap' is suitable for re-input to the shell as a trap definition by using proper single-quoting of the command lib/readline/readline.c - new readline variable `completion-query-items' to control the value of rl_completion_query_items (initially and by default 100) - new function rl_insert_completions which performs a call to rl_complete_internal ('*') lib/readline/readline.h - added extern declaration for rl_insert_completions () lib/readline/funmap.c - added bindable command name `insert-completions' that maps to a call to rl_insert_completions () documentation/bash.1 - added documentation for new `completion-query-items' readline variable - added documentation for new `insert-completions' readline command 2/10 ---- subst.c - made ${xxx} behave correctly when the -u option was on and xxx was not set - made $xxx with -u enabled and xxx unset set $? to 1 lib/malloc/malloc.c - made free() a void function, like ANSI and Posix say to support/mksydefs - look for /usr/include/stdlib.h and define HAVE_STDLIB_H if found cpp-Makefile - pass HAVE_STDLIB_H to all makes ansi_stdlib.h - new file containing the extern function declarations that ANSI puts into that bash uses; really a link to lib/posixheaders/ansi_stdlib.h lib/posixheaders/ansi_stdlib.h - real copy of ansi_stdlib.h alias.c, bashline.c, variables.c, shell.c, error.c, hash.c, signames.c, expr.c, general.c, input.c, builtins/mkbuiltins.c, builtins/fc.def, lib/glob/glob.c, lib/tilde/tilde.c, lib/malloc/xmalloc.c - include if HAVE_STDLIB_H is defined, include ansi_stdlib.h if not general.h, alias.h - removed extern declarations for malloc and realloc lib/readline/{readline,history,funmap,keymaps,vi_mode}.c - include or ansi_stdlib.h - remove extern char *getenv() declarations cpp-Makefile - added dependencies on ansi_stdlib.h support/fixdist - changes to make things work with ansi_stdlib.h (basically just dupliating the lines for posixstat.h) alias.h, braces.c, expr.c, general.h, hash.h, vprint.c, builtins/fc.def, builtins/getopts.def, lib/glob/glob.c, lib/tilde/tilde.c - define NULL as ((void *)0) if NULL undefined and compiling in an ANSI C environment (__STDC__) 2/11 ---- lib/readline/readline.c - moved declaration of convert_meta_chars_to_ascii into the `forward' declarations section, before its first use 2/13 ---- expr.c - if x is a char *, don't compare *x to NULL, use '\0' instead 2/15 ---- lib/readline/readline.c - add a call to rl_initialize_funmap at the beginning of rl_named_function to make sure all of the function names will be found 2/16 ---- parse.y - handle double-quoted ${...} words like the Posix.2 spec says -- count braces and skip command substitutions and quoted strings to find the end of the pattern: new variables delimited_brace_level and dollar_brace_level - add new variable embedded_quoted_string so that the parser can skip embedded quoted strings while parsing $() and ${} constructs subst.c - new function: extract_dollar_brace_string () which implements the Posix.2 rules about ${...} extraction: counting braces while skipping quoted strings and command substitutions. Called from extract_string_double_quoted and expand_word_internal - changed the way pattern removal was done: the pattern is now run through tilde expansion, parameter expansion, command substitution, and arithmetic substitution, then quoted in a way acceptable to fnmatch with quote_string_for_globbing - add code so that expansions like ${HOME:`xxxx`} are errors, as they should be, and put the full expansion string in the error message 2/17 ---- subst.c - changed expand_word_internal to call parameter_brace_expand_rhs with the `quoted' parameter set to 0 except when the separator between PARAM and WORD is `+'. This makes things like echo "${undef-"foo bar"}" echo `foo bar' without the quotes. I'm still not sure this is right, but it is compatible with other versions of sh 2/18 ---- parse.y - add code to reserved_word_acceptable so that bash will parse a reserved word after a `}' getcwd.c - make it compilable on machines without dirent.h and struct direct or unistd.h (like the NeXT) using the proper conditional inclusion with HAVE_DIRENT_H and HAVE_UNISTD_H general.c - moved the getwd() replacement out from inside #ifdef USG and just protected it with #ifdef HAVE_GETWD machines.h - added #undef HAVE_GETWD and #undef HAVE_GETCWD to the NeXT machine description subst.c - added `forward' declarations for tilde_expand and expand_string_unsplit and removed the function-local extern declarations 2/19 ---- getcwd.c - changed to do conditional inclusion of limits.h, stdlib.h, string.h 2/22 ---- builtins/cd.def - if the chdir to the canonicalized form of the pathname in change_to_directory fails, try what the user passed. If that succeeds, reinitialize the_current_working_directory to what getwd() returns, and return success. Fix for pathological cases like mkdir x cd x ( cd .. ; mv x y ) cd . 2/24 ---- command.h - added extern declarations for make_word_array, make_command, make_bare_simple_command, and make_here_document - added extern declarations for functions in copy_command.c: copy_command, copy_word, copy_word_list, copy_redirect, copy_redirects copy_cmd.c - made all functions not used outside this file static execute_cmd.c - removed extern declaration of make_word_array 2/25 ---- shell.c - made non-interactive shell look for $BASH_ENV startup file rather than $ENV (conflict with Posix.2) command.h - broke the `union redirectee' out of the struct redirect, made the union it's own typedef (REDIRECTEE), then added REDIRECTEE redirectee to the struct redirect - made the `dest' member of a REDIRECTEE a long. It matters on some machines (sizeof(long) == sizeof(pointer) != sizeof(int) and works on those machines with all those sizes being 32 bits (this should really be a typedef rather than a long) execute_cmd.c, parse.y - changed all calls to make_redirection to pass a WORD_DESC * or a long as the third argument to make_redirection [this should conclude the changes needed for the alpha] 3/2 --- subst.c, variables.c - moved some function-scope extern function declarations to file scope subst.c - changed paramter_brace_expand_pattern to call expand_string_internal on the removal pattern, since we do not want word splitting jobs.c - call get_tty_state or set_tty_state in wait_for() depending on a job's exit status when interactive_shell is set, rather than testing interactive. This makes stty commands in scripts executed with `.' `stick' nojobs.c - make sure we only call {set,get}_tty_state when interactive_shell is set 3/3 --- unwind_prot.c - make sure there is actually something on unwind_protect_list before calling without_interrupts to run something on it or delete something from it jobs.c - make sure job_slots is not empty in cleanup_dead_jobs and delete_all_jobs before actually doing something 3/4 --- machines.h - add #undef HAVE_GETWD to Xenix286 machine description lib/readline/history.c - fixed an off-by-one error in the history expansion code: if the length of the result string after adding the current piece is (allocated_len - 1), the strcpy will write over the first marker placed there by the malloc debugging code. - changed the history realloc code to work in 256-character chunks rather than 255-character ones 3/8 --- execute_cmd.c - new variable exec_redirection_undo_list that holds redirections that must be undone even when `exec' throws away redirection_undo_list. These are copies of open files for constructs like 7<&1. Set in add_undo_redirect and used in execute_builtin_or_function. Disposed of otherwise. 3/9 --- execute_cmd.c - fixed a memory leak in execute_builtin_or_function by adding an unwind_protect to dispose of saved_undo_list - anywhere do_redirections is called with INTERNAL==1 (which means we make redirection_undo_list), arrange to clean up exec_redirection_undo_list print_cmd.c - massive namespace cleanups -- made almost all functions static - new function `colon' to be called in place of `cprintf(";")' to ensure that we don't print a `;' right after a `&' from compound command printing functions (if, while, until, for) [put code out for FTP on 3/10] 3/11 ---- documentation/bash.1 - removed the description of >&word as a way to redirect both standard output and standard error endian.c - moved new-endian.c to this. This handles 64-bit machines directly lib/readline/readline.c - rl_copy -> rl_copy_text to avoid clashes with Sun's libraries - moved the completion code to a new file lib/readline/complete.c - new file with the completion code from readline lib/readline/Makefile, cpp-Makefile - added complete.c and complete.o to the necessary make variables subst.c - added an entry to special_vars to make a change to $TERMINFO cause readline to reset itself (sv_terminal()) 3/12 ---- builtins/exec.def - free `command' if the exec fails machines.h - change sgi machine description to define HAVE_GETWD lib/readline/history.c - fixed a memory leak in read_history_range -- need to free `buffer' before returning - if read(2) returns <= 0 in history_truncate_file, then immediately exit - start checking at buffer[chars_read - 1] for newlines lib/readline/readline.c - fixed a memory leak in rl_read_init_file -- `buffer' must be freed before we return - rearranged code in update_line so that we check for ols and nls being in bounds before trying to compare their values parse.y - fixed memory leak in read_token -- don't need to save `token' into a fresh variable before calling push_string because push_string does its own savestring in save_expansion subst.c - fixed memory leak in expand_words_internal -- the word_list allocated by the `@' case when expanding $@ needs to be freed after turning it into a string with string_list - fixed memory leak in expand_word_internal -- the string returned by extract_dollar_brace_string needs to be freed - fixed memory leak in expand_word_internal -- the string returned by substring() in the `default:' case needs to be freed variables.c - fixed a free-memory reference in makunbound -- have to save the value of `name' before calling dispose_variable, because it might directly reference old_var->name. If so, then stupidly_hack_special_variables will refer to freed memory dispose_cmd.c - fixed a memory leak in dispose_command: if a group_command is being disposed, need to free command->value.Group after calling dispose_command (command->value.Group->command); - fixed a memory leak in dispose_command: if a case command is being disposed, need to free command->value.Case after freeing everything else mailcheck.c - fixed memory leak in remember_mail_dates -- need to free the value returned by get_mailpaths() - fixed memory leak in remember_mail_dates -- need to free the value returned by extract_colon_unit() 3/13 ---- bashline.c - fixed memory leak in bash_symbolic_link_hook -- get_working_directory always returns newly-allocated memory that must be freed - fixed memory leak in bash_symbolic_link_hook -- if `*dirname' is going to be replaced, the current contents have to be freed (if non-null) - make bash_symbolic_link_hook call get_working_directory with a non-empty string for the value of `for_whom' execute_cmd.c - make sure that execute_command cleans up after itself by disposing the fd_bitmap it allocates shell.c - fixed memory leak in reader_loop -- if throw_to_top_level is called with DISCARD, the current command needs to be disposed lib/readline/complete.c - when we return NULL to indicate the end of a set of completion matches, free dirname, filename, and users_dirname -- there's no reason to let them persist between calls, consuming memory 3/16 ---- shell.c - when moving the `script' fd to the highest available fd, check for getdtablesize returning -1 and default to 20 in that case jobs.c - if getdtablesize returns something < 0, default to 20 - check that getdtablesize() leaves `nds' set to something valid before trying to dup2 shell_tty to it machines.h - changed M_OS in KSR/1 description to OSF1 maxpath.h - include sys/param.h if __ksr1__ defined parse.y - changed declaration of the_time from long to time_t lib/readline/readline.c - changed extern declarations for rl_basic_word_break_characters and rl_completer_word_break_characters to file scope rather than block scope - changed declaration of chars_avail (param to FIONREAD ioctl) to int, which it should have been all along 3/17 ---- jobs.c - clamp nfds in initialize_jobs at 256 shell.c - clamp the value returned by getdtablesize() to 256 3/19 ---- execute_cmd.c - make find_user_command_in_path return a pathname if it exists and the caller wants FS_EXISTS files. This affects the `.' builtin and files as script arguments to the shell (shell.c) - clamp the highest-numbered file descriptior at 256 in close_all_files(). jobs.c - make get_tty_info print error message on tcgetattr failure only if interactive != 0 (that is, we're really interactive now) lib/readline/rltty.c - changed SETATTR macro to call tcsetattr with TCSANOW flag, since this call is being used to affect an input file descriptor. Ditto for the sys5 tty driver code and TCSETA (was TCSADRAIN and TCSETAW, respectively) - added a flag for ksr1 machines `ksrflow' which is the state of suspended output for this process. If 1, this process has called tcflow (tty, TCOOFF) to suspend output and tcflow(tty, TCOON) may be called safely - temporarily (?) disabled the code that simulates at ^Q at the end of set_tty_settings. Let's see if it makes any difference 3/22 ---- execute_cmd.c - new global variable (yucch) `current_fds_to_close' that is set to the fd_bitmap passed to execute_simple_command while expand_words is being executed so that this information is available to the process substitution code - set current_fds_to_close to NULL at start of execute_command subst.c - change call to close_all_files in process_substitute to call close_fd_bitmap (current_fds_to_close) - fixed memory leak in parameter_brace_expand_length() -- need to free the memory used to expand the PS1 in something like ${#PS1} - fixed memory leak in expand_word_internal ${3:+posix} did not free the memory used to expand the $3 documentation/bash.1 - && and || have equal precedence; fixed up man page to reflect this 3/23 ---- [fixes from bfox version of 1.13 dated 3/21/93 from eos.ucsb.edu] config.h - #undef alloca before redefining it as __builtin_alloca cpp-Makefile - compile newversion.c with $(CFLAGS) instead of $(DEBUG_FLAGS) general.h - new #define: maybe_free(x) jobs.c - alliant has same problem as NeXT wrt /usr/etc/rlogind and /dev/tty - make delete_all_jobs be static void builtins/cd.def - use maybe_free define builtins/common.c - HAVE_VPRINTF --> HAVE_VFPRINTF builtins/test.def - document -h as a synonym for -L lib/readline/history.c, lib/readline/rldefs.h - #undef alloca before redefining it as __builtin_alloca lib/readline/history.c - new functions history_get_state and history_set_state lib/readline/tilde.c - put in #pragma alloca if on AIX machine support/getcppsyms.c - recognize __GNUC__ and __STDC__ and pass them along as output 3/24 ---- subst.c - removed fully_quoted_word(), since it was unused execute_cmd.c - added extern declarations for functions in dispose_cmd.c - removed extern declaration of atol() parse.y - added extern declaration for dispose_words() documentation/bash.1 - re-added the description of >&filename as a way to redirect both stdout and stderr to filename machines.h - slight changes to the alpha description shell.c - moved all the extern function declarations to have file scope print_cmd.c - colon --> semicolon parse.y - in read_token, if we're parsing an embedded quoted string, don't bother with special processing of `$' and characters following 3/25 ---- print_cmd.c - added a new function the_printed_command_resize to expand the printed command buffer in cprintf() builtins/bind.def - removed the unwind-protect code, because unwind_protect_pointer is not guaranteed to work on a FILE * lib/readline/readline.c - assign in_stream and out_stream immediately, because they may be used before readline_internal is called 3/26 ---- cpp-Makefile - allow for use of different compress programs with the use of $(COMPRESS) and $(COMPRESS_EXT) 3/29 ---- general.c - new function set_lines_and_columns to set $LINES and $COLUMNS in response to a SIGWINCH lib/readline/readline.c - call set_lines_and_columns() in set_screen_size() to set the right environment variables on a SIGWINCH (code needed to be rearranged a bit to make this happen) jobs.c - add a SIGWINCH handler to set $LINES and $COLUMNS if readline is not being compiled into the shell and TIOCGWINSZ and SIGWINCH are defined subst.c - made dequote_string extern so `read' can use it builtins/read.def - added CTLESC characters to represent escapes instead of doing backslash processing internally braces.c - fixed the brace expansion code so that backslash can correctly act as an escape character, and escape `"' in a double-quoted string 3/31 ---- make_cmd.c - the `<>' redirection needs to open the file O_RDWR|O_CREAT for Posix.2 compatibility 4/1 --- parse.y - the function read_a_line was changed to take a flag telling it whether or not to remove quoted newlines - read_secondary_line was changed to call read_a_line with an arg of 1, telling it to strip \ pairs These two changes fix two bugs with here documents: 1. delimiter check occurs after \ stripping 2. leading tab deletion occurs after \ stripping lib/readline/rldefs.h - include if on Linux lib/readline/readline.c - don't declare PC, BC, and UP if on Linux (??) - change the conditional parsing code that handles the `$if term=' construct to test the name given in the if command against both the `long' and `short' forms of rl_terminal_name. For instance, if `rl_terminal_name' were `sun-cmd', it would be tested with stricmp against both `sun' and `sun-cmd' machines.h - add HAVE_VFPRINTF to the Linux description unwind_prot.h - change the unwind_protect_int macro to cast the second argument to unwind_protect_var to a (char *), which is what unwind_protect_var expects unwind_prot.c - change unwind_protect_var to allocate memory and do a bcopy if the size of the variable passed to save is not sizeof(int). That's what restore_variable expects lib/readline/complete.c - fixed rl_complete_internal so that it pays attention to the value of rl_completer_quote_characters and quotes a match if the match contains a word break character bashline.c - set rl_completer_quote_characters to ' and " 4/5 --- lib/readline/complete.c - changed rl_complete_internal so that an `attempted completion function' may tell readline not to perform filename completion if it fails by returning (char **) -1 bashline.c - attempt_shell_completion should return (char **) -1 if doing command word completion and no matches are found. This will tell readline not to perform filename completion 4/6 --- builtins/common.c - fixed the error message printer by get_working_directory: `for_whom', shell_name, or `bash: ' is printed first; the first non-empty one being printed. Explanatory text is added to the error message 4/7 --- machines.h - in the Sun section, define Solaris of either `USGr4' or __svr4__ is defined - Solaris 2 systems have sys_siglist, so don't #undef HAVE_SYS_SIGLIST jobs.c - don't declare sys_siglist if on Solaris 2 4/8 --- lib/readline/rldefs.h - do not define USE_XON_XOFF. This causes output to be swallowed when using bash over a relatively slow line (like a modem line). This means that ^S and ^Q don't work on termio/termios systems; use ^V to quote characters instead variables.c - don't perform a get_working_directory on startup unless we did not inherit $PWD or the inherited value of $PWD is wrong trap.c - new functions: free_trap_strings and reset_original_signals. Together they do the same thing as restore_original_signals() jobs.c, nojobs.c - removed call to restore_original_signals from make_child. Now callers have to handle this themselves execute_cmd.c - added a call to restore_original_signals after make_child in the child process everywhere make_child is called subst.c - added call to restore_original_signals after make_child in process_substitute - added call to reset_signal_handlers after make_child in command_substitute for the child process [THERE IS A PROBLEM WITH A TRAP on `0' -- it is inherited in the child process started to run the command substitution] [These are fixes to make savetraps="$(trap)" work as Posix.2 specifies] 4/11 ---- bashline.c - supply a value for rl_completer_word_break_characters; `$' is not a shell word break character 4/13 ---- lib/readline/complete.c - only look at adding quote characters to completion matches if we're doing filename completion bashline.c - don't supply a value for rl_completer_word_break_characters 4/14 ---- documentation/bash.1 - clarify what the readline function shell-expand-line does jobs.c - clean up dead jobs in wait_for even in non-interactive shells rather than waiting for the next call to the parser 4/15 ---- bashline.c - reorganized the shell_expand_line code; broke it up into several discrete functions - added new functions: history_and_alias_expand_line, history_expand_line - added a new emacs-mode command, M-!, bound to history-expand-line 4/18 ---- unwind_prot.c - more fixes to the save-variable and restore-variable code, mostly to make things work better on machines like the alpha where sizeof(int) != sizeof(char *): save and restore now use identical logic and nearly identical code to decide whether or not to use malloc and bcopy or assignment builtins/common.c - new functions to manage the state of the dollar variables: dollar_vars_changed - return 1 if the dollar variables have been changed set_dollar_vars_changed - set the state of dollar variable modification to `changed' set_dollar_vars_unchanged - set the state of dollar variable modification to `unchanged' builtins/source.def - new function: maybe_pop_dollar_vars. This is called so that the `.' command will restore the dollar variables only if the script run with . has not changed them. If the script changed $@, the new values should stay in place - changes to source_builtin to set the state of the dollar variables to `unchanged' before executing the script, and calling maybe_pop_dollar_vars() to decide whether or not to restore the dollar variables and to do so if warranted machines.h - new description for NEC EWS4800, from m-hirano@sra.co.jp via hikichi@sra.co.jp 4/19 ---- support/mksysdefs - check for both /hp-ux and /bin/uname before deciding a machine should be checked for an HP/UX revision level 4/22 ---- input.h, general.h, lib/readline/readline.h, lib/tilde/tilde.h - added typedefs for CPFunction (pointer to function returning pointer to char) and CPPFunction (pointer to function returning pointer to pointer to char) execute_cmd.c - replaced all instances of (int)redirectee in do_redirection_internal with a variable redir_fd, which is set to redirectee.dest print_cmd.c - replaced all instances of (int)redirectee in print_redirection with a variable redir_fd, which is set to redirectee.dest maxpath.h - #include on OSF/1 systems subst.c - added extern declaration for list_append - changed sv_allow_null_glob_expansion to compare the return value from find_variable to NULL to set the value of allow_null_glob_expansion parse.y - fix the assignment_acceptable macro so we cannot return ASSIGNMENT_WORD while in the middle of a case statement pattern list (in_case_pattern_list != 0) general.c - Linux has gethostname() and does not need the emulation jobs.c - Linux has a declaration for sys_siglist that conflicts with the extern declaration; use the one from the standard include file - the sigprocmask emulation did not handle NULL arguments in oldset and newset; check them before using 4/23 ---- lib/readline/complete.c - use single_quote() to quote a completion replacement with embedded occurrences of characters from rl_completer_quote_characters 4/26 ---- print_cmd.c - redid cprintf() for systems without varargs to be what bfox has (using char * where bfox has void *) parse.y - make read_secondary_line take an argument telling it whether or not to have read_a_line remove quoted newlines make_cmd.c - pass an argument to read_secondary_line saying whether or not to remove quoted newlines, set to 1 if the delimiter of a here document is unquoted 4/28 ---- builtins/ulimit.def - added -u option to set and get the max number of processes available to a user; available on systems which define RLIMIT_NPROC - added better handling of getrlimit failures to ulimit_builtin cpp-Makefile - made $(HOSTTYPE_DECL) appear on the cc command line before the $(CPPFLAGS) when making variables.o 4/29 ---- lib/readline/complete.c - added an extern declaration for getpwent() for isc386 machines where __STDC__ is not defined and _POSIX_SOURCE is 4/30 ---- general.c - new function legal_identifier, which returns 1 if a string passed is a legal shell identifier and 0 otherwise. Used to decide what is and is not a legal variable name for the expansion functions subst.c - make expand_word_internal check that a ${ } expression that starts with a digit is composed of all digits before deciding that a variable starting with a digit is special (setting var_is_special to 1) - new function valid_brace_expansion_word (name, var_is_special) returns 1 if name is a legal lhs of a brace expansion expression - make expand_word_internal check an identifier for validity before passing it off to parameter_brace_expand_word by calling valid_brace_expansion_word () - new function valid_length_expression (name) returns 1 if NAME is something that can be passed to parameter_brace_expand_length(); called from expand_word_internal before calling parameter_brace_expand_length() These fix the following: ${#} was treated as x=$, ${#x} ${} was treated as ${} ${} was not flagged as an error ${#} was not flagged as an error 5/2 --- input.c - make check_bash_input change the value of default_buffered_fd if it moves the input fd to a new fd as the result of a redirection execute_cmd.c - don't make do_piping try the dup2 and close if pipe_out == REDIRECT_BOTH (-2) -- it's useless work - add error checking to do_piping to see if the dup2 calls fail and why error.c - new function internal_error for shell internal error messages jobs.c - changed some fprintf(stderr, ...) calls to internal_error() calls 5/3 --- execute_cmd.c - do not change the buffered stream associated with a file descriptor when processing an r_inputa_direction redirection in do_redirection_internal jobs.c, nojobs.c - don't sync the buffered stream associated with default_buffered_input in make_child if the shell is reading input from fd 0 and running an asynchronous command 5/4 --- execute_cmd.c - if the shell is not interactive, clean up the dead jobs each time we call execute_command () jobs.c - new function, mark_dead_jobs_as_notified - if the shell is not interactive, mark all dead jobs as notified in notify_and_cleanup so that cleanup_dead_jobs frees up the slot in the jobs array nojobs.c - make cleanup_dead_jobs call reap_zombie_children on Posix systems, so the shell doesn't keep growing in size as more jobs accumulate before a call to wait_for() 5/6 --- jobs.c - take the code that resets the signal handler out of flush_child; it should be done in wait_for - new function reap_dead_jobs to be run by non-interactive shells that marks all dead jobs as notified and cleans up the job list - removed the code from notify_and_cleanup that marks dead jobs as notified if the shell is not interactive execute_cmd.c - took the code that cleaned up dead jobs out of execute_command There is a problem when this is run as the result of a trap on SIGINT and the trap command is called directly from flush_child -- a job slot can disappear out from underneath flush_child and wait_for and cause the shell to abort - added a new define REAP that causes a non-interactive shell to clean out the job table by calling reap_dead_jobs or cleanup_dead_jobs - added calls to reap to execute_for_command and execute_until_or_while nojobs.c - changed wait_sigint_handler to not do anything when it is called, not even run a signal handler - changed wait_for to call the old sigint handler if a foreground process exits due to a SIGINT [these make nojobs.c behave like jobs.c when waiting for a job in a non-interactive shell] config.h.mini - new `minimal' configuration file 5/7 --- subst.c - make sure that command_substitute closes the pipe file descriptors if there is a goto error_exit 5/10 ---- nojobs.c - add a SIGWINCH handler to set $LINES and $COLUMNS if readline is not being compiled into the shell and TIOCGWINSZ and SIGWINCH are defined [code put out for FTP on slc2.ins.cwru.edu] 5/11 ---- braces.c - commas within backquotes inside matching braces are now treated as quoted (e.g., echo {`echo foo:bar | sed s/:/,/`}) lib/readline/search.c - added extern declarations for xmalloc, xrealloc 5/12 ---- lib/malloc/malloc.c - added a #define wrapper around the sbrk() declaration so that it's not declared as char * if hpux_8 or VOID_STAR_SBRK are defined subst.c - changed sense of #ifdef so that unless KSH_INCOMPATIBLE is defined ${#@} and ${#*} are equivalent to $# 5/13 ---- execute_cmd.c - don't create the export env unless we are running a command with shell_execve (in execute_disk_command) jobs.c, nojobs.c - don't create the export env in make_child (why were we doing this in the first place?) hash.c - removed declaration of initialize_hashed_filenames, which is unused subst.c - make list_rest_of_args, list_string, and the brace expansion code in expand_words_internal use the REVERSE_LIST macro rather than a call to reverse_list() make_cmd.c, copy_cmd.c - change uses of reverse_list to REVERSE_LIST 5/17 ---- execute_cmd.c - make execute_disk_command look in the temp environment for an assignment to PATH, and disable hash lookup for the command if such an assignment is present 5/18 ---- parse.y - changed read_a_line so that a backslash can quote a \ pair and prevent its removal when remove_quoted_newline is 1 5/19 ---- siglist.h - new file, to encapsulate the declarations of sys_siglist and provide a `strsignal' macro jobs.h, siglist.c, longest_sig.c - include siglist.h jobs.c, nojobs.c - removed declaration of sys_siglist 5/20 ---- execute_cmd.c - don't set up the loop_redirections unwind-protect unless there are actually some redirections - combined the AND_AND and OR_OR cases of execute_command_internal to remove some duplicated code - folded two tests together in the simple command case of execute_command_internal to remove a layer of indentation and braces - don't set up the unwind_protect in execute_simple_command unless the command actually expands to something - broke the code that executes functions and builtins out into new functions (execute_function and execute_builtin) and changed execute_builtin_or_function and execute_subshell_builtin_or_function to call them - replaced the async_redirections unwind-protect in execute_disk_command, since there's no reason to do it if we're already in a subshell and simply going to exit if the redirections fail - set up the unwind-protect on saved_undo_list in execute_builtin_or_function only if there are redirections saved in saved_undo_list - only call do_redirections in execute_disk_command if there are redirections to perform -- no need for the side effects since we're in a subshell 5/21 ---- parse.y - make read_a_line, shell_getc, decode_prompt_string, prompt_again, bash_add_history, reset_readline_prompt, read_token, discard_until, shell_ungetc static functions - eliminated the after_preprocess label in shell_getc - broke the prompt command execution code out into a separate function: execute_prompt_command subst.c - combined some common code in extract_string_double_quoted for the $( ) and ${ } cases - changed the allocation scheme in string_list_internal to hopefully reduce the number of allocations - added a new define SET_INT_VAR and changed all of the sv_* functions that set a variable depending on whether or not a variable exists to use it variables.c - declare argument to getenv as `const char *' on Linux machines.h - Linux has the fixed include files if gcc is being used to compile the shell 5/23 ---- subst.c - only call rl_reset_terminal in sv_term if no_line_editing is 0 (which means we're actually using readline) 5/25 ---- execute_cmd.c - changed execute_for_command to explicitly call the functions that were to be called by the unwind-protect code (e.g., dispose_words), and changed the run_unwind_frame call to a call to dispose_unwind_frame. This is to avoid using the kernel to block interrupts as much as possible - did the same for execute_case_command and execute_builtin jobs.c - only run traps on SIGCHLD if job_control != 0 6/3 --- unwind_prot.c - have without_interrupts call QUIT only if interrupt_immediately is set to 1 6/7 --- machines.h, jobs.h, lib/readline/chardefs.h, maxpath.h - changes for Solaris 2 with gcc from Greg Onufer lib/malloc/malloc.c - define NO_SBRK_DECL if hpux_8 or Solaris - declare sbrk as extern char * unless NO_SBRK_DECL is defined. VOID_STAR_SBRK has been removed lib/readline/readline.c - changed a call to alloca to a call to xmalloc to avoid problems on the DEC alpha (can't pass memory allocated with alloca to another function) - moved key binding and startup file code to bind.c lib/readline/rldefs.h - created common definitions for emacs_mode and vi_mode lib/readline/bind.c - new file containing the key binding and startup file code. 6/8 --- lib/readline/readline.c - changed rl_message to use varargs, if HAVE_VARARGS_H is defined lib/readline/rldefs.h - include if HAVE_VARARGS_H is defined lib/readline/{readline.c,bind.c,rltty.c,vi_mode.c,search.c} - cleaned up the namespace by prefixing all pseudo-global readline variables (variables private to the library but used in multiple files) with _rl_ 6/10 ---- [changes from bfox] bashansi.h - new file, including both string.h and ansi_stdlib.h dispose_cmd.h, make_cmd.h, subst.h - new files containing extern function declarations endian.c - for machines with sizeof(long)==8, shift by 31, then 1 to fake out gcc 2.4, which complains when you shift by 32 general.h - added an include of string.h or strings.h - changed the declarations of the savestring() and member() macros shell.c - changed the structure of the long_args struct to be more portable subst.c - made dequote_string and dequote_list static [end of changes from bfox] general.h - added extern declarations for all of the non-int functions defined in general.c - removed extern declarations that appear in one of the bash header files 6/15 ---- lib/readline/readline.c - incorporated a patch to rl_transpose_chars from Tom Tromey which allows C-t to be undone - fixed rl_rubout so the fast screen fixup when deleting the last character on the line handles characters that are more than one screen position wide by erasing the right number of physical characters 6/16 ---- siglist.h - don't declare sys_siglist on 4.4 BSD builtins/mkbuiltins.c, lib/readline/history.c - include if HAVE_UNISTD_H is defined 6/19 ---- machines.h - new description for the Intel Paragon running OSF/1 support/getcppsyms.c - new variables for the paragon (__i860__, __PARAGON__, etc.) documentation/bash.1 - make it clear the the -noprofile switch disables the sourcing of ~/.bash_login and ~/.profile as well as /etc/profile and ~/.bash_profile 6/23 ---- shell.c - instead of calling maybe_execute_file on "/etc/profile", use a #define for SYS_PROFILE, which is initially defined to be "/etc/profile" by default lib/readline/isearch.c - new file, with the isearch code lib/readline/display.c - new file, with the incremental redisplay code lib/readline/readline.c - removed the isearch, display code 6/24 ---- lib/readline/readline.c - removed the signal-handling code lib/readline/signals.c - new file with the signal-handling code 7/1 ---- test.c - changed the `advance' macro to get around some picky compilers machines.h - machine description for hp9000 running 4.4 BSD support/getcppsyms.c - recognize __BSD_4_4__ for 4.4 BSD machines builtins/souirce.def - cast the st_size stat struct member to int because it's 64 bits on 4.4 BSD lib/readline/signals.c - include if compiling on a 4.4 BSD machine 7/2 --- builtins/read.def - if $IFS is unset it defaults to "" when splitting the line read into words (so no splitting is performed) 7/5 --- shell.c - remove SIGKILL from terminating_signals[] -- it can't be caught or ignored - make terminating_signals[] static - make terminating_signals[] an array of structs that hold the signal number and the original handler - change initialize_terminating_signals to use the new struct termsig and to set the original handlers for all the terminating_signals - new function reset_terminating_signals to restore original handlers for all terminating signals in terminating_signals[] trap.c - new function signal_is_special, returns 1 if a signal is one of the signals the shell treats specially - call reset_terminating_signals from restore_original_signals getcwd.c - changed call to `stat' to call `lstat' to keep symlinks that point to non-existant files from causing getcwd to fail - if S_ISLNK is not defined after inclusing `posixstat.h', use a cpp #define lstat stat machines.h - new entry for Symmetric 375 running 4.2 BSD support/getcppsyms.c - recognize and pass along `scs' for the Symmetric 375 lib/readline/bind.c - new function: rl_set_keymap_from_edit_mode, which sets the keymap appropriately depending on the editing mode as if we were about to edit a command line 7/6 --- lib/termcap - new code from the GNU termcap library distribution 1.02 endian.c - include bashansi.h shell.c - fall back to sourcing $ENV if $BASH_ENV is not found variables.c - make add_or_supercede search `array' only if it is non-null 7/7 --- subst.c - made do_assignment_internal an int function that returns 1 if the assignment was made correctly and 0 if it was not - do_assignment and do_assignment_no_expand now return the value from do_assignment_internal variables.c - made assign_in_env return 1 if everything appeared to go successfully (which it always does) cpp-Makefile - add variables.c as an explicit dependency for variables.o; there appears to be a bug in Gnu make braces.c - removed static version of copy_array since there's already one in general.c, declared extern in general.h lib/malloclib - updated to sources from Gnu libc 1.06 7/9 --- shell.h - new struct: user_info, containing uid, gid and passwd file info about the current user shell.c - new variable current_user of type struct user_info - eliminated passwd_shell, passwd_dir, and current_user_name subst.c - rewrote sv_uids to use the info in current_user.uid and .euid and to use itos rather than sprintf variables.c, mailcheck.c, test.c, execute_cmd.c, parse.y - changed to use current_user.user_name rather than current_user_name and to use current_user.shell and current_user.home_dir instead of passwd_shell and passwd_dir, respectively flags.c, flags.h - new flag, `-p' for `privileged', a la ksh. This is set automatically if uid != euid || gid != egid - if +p, set the real and effective uids and gids to the real uid and gid flags.c - include shell.h for the current_user struct and don't explicitly include header files included by shell.h builtins/set.def - code to handle -p and -o privileged documentation/bash.1 - added documentation for set -p/set -o privileged - added documentation for bind -m keymap - added documentation to readline section for non-inc search bindings builtins/bind.def - documented the -m keymap option 7/10 ---- machines.h - new description for NeXTstep running on intel 486 lib/tilde/tilde.c - fixed up definition of savestring macro bashline.c - changed attempt_shell_completion so that when completing command words and no matches are found, it tells readline to perform filename completion but sets the completion ignore function to one that will ignore all filenames matched, leaving only directories in the list of matches - generalized the ignore processing, breaking the body of the existing ignore function into a generic function that takes as an argument a pointer to a function used to test each filename in the match list for `acceptability' - added a new ignore function to support the `ignore filenames' behavior described above 7/12 ---- machines.h - add #undef HAVE_GETCWD to Motorola M88100 description [put code out for FTP on slc2.ins.cwru.edu] 7/13 ---- builtins/type.def - broke the code that does the work of the type builtin out into a separate function and added a couple of other display options, for eventual use by command -v and -V builtins/bashgetopt.c - added a new function `report_bad_option' builtins/jobs.def, bultins/histctl.def - changed to use report_bad_option builtins/command.def - added the Posix.2 -v and -V options 7/14 ---- execute_cmd.c - make sure that execute_command_internal sets redirection_undo_list and exec_redirection_undo_list to NULL after making local copies so things don't get undone twice. This can happen as the result of an `fc' redoing a command with redirections: wc subst.c > xxx & r [bug report from Ian Watson] builtins/setattr.def - converted to use internal_getopt, so export and readonly both use it builtins/bashgetopt.c - changed the default error messages a little bit shell.h - new exit values: EX_NOEXEC, for when a command name is not executable (126), and EX_NOTFOUND, for when a command is not found (127) execute_cmd.c - change to use EX_NOEXEC and EX_NOTFOUND parse.y - broke function definitions off into their own production, function_def 7/15 ---- builtins/kill.def - added code so that signals are listed by kill -l in the manner specified by Posix.2 if the POSIXLY_CORRECT variable exists in the environment - Posix.2 UPE says kill can take % job control arguments even if job control is disabled, so let interactive shells use them parse.y - decode_prompt_string now performs the Posix.2 ! expansion for $PS1 and $PS2, if POSIXLY_CORRECT is turned on builtins/exec.def - changed exit status to be in line with Posix.2 specification (127 for not found, 126 for not executable) builtins/wait.def - unknown jobs should cause wait to return 127 shell.c - change the behavior of sh -c so that if POSIXLY_CORRECT is in the environment, the first argument after -c command is assigned to $0, and the rest of the arguments, if any, are bound to $1 ... $n Posix.2 4.56.3 specifies this behavior - move the code that does -c command out of the !local_skip_execution block. I can't see why it was there in the first place - made some of the private variables static to clean up the name space - moved the code that runs the startup files into a separate function: run_startup_files. This is called with an argument telling it whether or not to use the Posix.2 startup file sequence ($ENV). This argument is 1 if POSIXLY_CORRECT is found in the environment at startup builtins/fg_bg.def - bg needs to set last_asynchronous_pid when restarting a job in the background, as per Posix.2, 5.4.2 jobs.c - make sure the status of exited jobs is printed as Done(n) where `n' is the exit status, if POSIXLY_CORRECT is specified 7/16 ---- general.c - fixed a problem with canonicalize_pathname which made it get confused with xxx/./yyy if yyy was `.' or `..' parse.y - broke the code in read_token that checked for reserved words into a macro: CHECK_FOR_RESERVED_WORD - if posixly_correct is 1, read_token does not allow reserved words to be aliased (checks for reserved words before doing alias expansion). See Posix.2 3.3.1 - changed the function_def production to make redirections specified with a function definition bind to the function rather than to the definition. This introduced 66 (!) bison shift/reduce conflicts. From Posix.2 3.9.5 - if `posixly_correct' is set, <>word will open word for read/write on fd 0, rather than fd 0 and fd 1 as normal builtins/source.def - removed the ALLOW_RIGID_POSIX_COMPLIANCE define; the check for POSIXLY_CORRECT will always be performed shell.c - new long option: -posix, sets posixly_correct to 1 - posixly_correct set to 1 in main if POSIXLY_CORRECT found in shell environment subst.c - new function sv_strict_posix, sets value of posixly_correct depending on $POSIXLY_CORRECT - if posixly_correct is set, don't do tilde expansion on =~ in words that are not shell assignment statements execute_cmd.c, jobs.c - removed calls to getenv("POSIXLY_CORRECT") with checks of posixly_correct - if posixly_correct is set, don't translate >&x into >x 2>&1 expr.c - implemented the OP= Posix.2 arithmetic assignment operators (see Posix.2 table 2.15, section 2.9.2.1, and section 3.6.4) documentation/bash.1 - added documentation of new arithmetic evaluation assignment operators - documented the new -posix long option 7/17 ---- builtins/setattr.def - made set_or_show_attributes correctly quote the values of shell variables it prints so the output of `export' or `readonly' can be used as input to the shell builtins/fc.def - made fc write its output as Posix.2 5.12.6.1 specifies: when not numbering, the command should still be output with a leading tab variables.c - if `posixly_correct' is true, bash uses ~/.sh_history as the default value of $HISTFILE shell.c, subst.c - if posixly_correct is true, turn on interactive comments, since that's what Posix.2 says to do 7/20 ---- lib/malloclib/{malloc.c,free.c,malloc.h} - bug fix from Mike Haertel builtins/mkbuiltins.c - added code so that the Posix.2 `special' builtins have SPECIAL_BUILTIN added to the flags in their entry in the builtins array defined in builtins.c shell.c - declare `restricted' as `extern int', since it's already declared in flags.c lib/readline/bind.c - only try to set the keymap to vi_insertion_keymap in rl_set_keymap_from_edit_mode if VI_MODE is #defined lib/malloc/malloc.c - define NO_SBRK_DECL for hpux_9 machines.h - hpux_9 needs to link with libPW.a to pick up alloca(), which has reportedly been fixed lib/tilde/Makefile - add a definition for RM to the makefile 7/21 ---- documentation/Makefile - added info, dvi targets - changed `squeaky-clean' to `distclean' - use $(MAKEINFO) in recipes rather than `makeinfo' bashline.c - fixed memory leak in cleanup_expansion_error - fixed up some extern declarations of pre_process_line cpp-Makefile - define HAVE_FIXED_INCLUDES by default if we're using gcc 7/27 ---- machines.h - add -ldgc to the DG/UX description if we're not building an `M88KBCS_TARGET' 7/28 ---- shell.c - always initialize top_level_mask from what the shell inherits, even for login shells lib/tilde/tilde.c - declare the getpw functions only for USG systems 7/30 ---- lib/readline/readline.c - new function: _rl_kill_kbd_macro () to cancel any keyboard macros being defined on a SIGINT lib/readline/signals.c - call _rl_kill_kbd_macro on a SIGINT bashline.c - don't bind anything with a META via rl_add_defun; change those to add the definition unbound, then explicitly bind it into emacs_meta_keymap 8/3 --- bashline.c - save and restore the value of rl_startup_hook when using it in special editing functions 8/4 --- general.c - new global variable: global_error_list, returned instead of -1 from functions returning lists - changed delete_element to return &global_error_list instead of (char **)-1 braces.c, general.c, expr.c - removed the conditional definition of NULL; it should be defined in general.h lib/glob/glob.c - new global variable: glob_error_return, returned instead of (char **)-1 to signal a glob error - changed functions to return &glob_error_return instead of (char **)-1 subst.c - fix the GLOB_FAILED macro to test against &glob_error_return rather than (char **)-1 builtins/ulimit.def - cleaned up the casts like (long) -1; changed to -1L, which is equivalent and more correct lib/readline/complete.c - use the address of a new local variable `dead_slot' to mark dead slots in the list of completion matches rather than (char *)-1, which doesn't work everywhere lib/readline/history.c - have get_history_word_specifier return the address of a static variable `error_pointer' in case of error, rather than (char *)-1 lib/readline/signals.c - if SHELL is defined, don't mess with SIGTSTP, SIGTTIN, or SIGTTOU lib/readline/vi_mode.c - make rl_vi_change_case skip over characters that are neither upper nor lower case 8/5 --- lib/readline/funmap.c - made qsort_string_compare compare the first characters of the two strings before calling strcmp() builtins/bind.def - rewrote to use internal_getopt - map specifications made with -m now affect all other options and binding specifications - no processing is done until all the options have been processed - the -q option is now limited to a single argument, as the documentation has always stated lib/readline/vi_mode.c - fixed the `r' command so that the replacement is saved, and it is redoable command.h - add `line' members to the simple_command and command structs to keep track of the line number the command appears on for $LINENO make_cmd.c - save line number when making a `bare' simple command to the value of line_number - save the first line of a function definition in make_function_def copy_cmd.c - make sure that the line number information is copied with a command execute_cmd.c - use the line number attached to the start of a function definition and the line number of commands to update line_number while a function is executing 8/6 --- config.h, config.h.mini, cpp-Makefile - made ONESHOT a configuration option rather than a cpp define in cpp-Makefile builtins/fc.def, builtins/getopts.def - removed the code that defines NULL if undefined -- these files include general.h, which already does that lib/posixheaders/stdc.h - new file containing macros so that functions can be defined with prototypes using the __P macro and compile on both ANSI C and `traditional' C compilers lib/malloc/malloc.c - changed the ASSERT macro to use a new __STRING define when calling botch(), so that ANSI C systems see the correct error string rather than `p' (unfortunately, the MAGICx constants are expanded in the string passed to botch()) 8/7 --- bashline.c, execute_cmd.c, variables.c, parse.y, make_cmd.c, jobs.c - removed extern declarations of functions already declared as extern in bash header files execute_cmd.c - include lib/tilde/tilde.h - include builtins/common.h - include builtins/builtext.h for the extern declarations for the shell builtins - moved vfree() to general.c builtins/common.c - made dotted_filename static - made builtin_address_internal static builtins/common.h - new file with extern declarations for all functions defined in common.c variables.h - added extern declaration of qsort_string_compare, assign_in_env mailcheck.c - removed full_pathname (), since it is a function of general use general.c - moved full_pathname () here from mailcheck.c - moved vfree() here from execute_cmd.c general.h - added extern declaration for full_pathname subst.h - added extern declaration for dequote_string jobs.h - added external declarations for wait_for_background_pids and wait_for_single_pid parse.y - new function: find_reserved_word builtins/{alias,builtin,cd,exec,exit,hash,read,setattr,shift,trap,wait}.def - removed extern declarations, replaced with inclusion of common.h builtins/type.def - include common.h, remove extraneous extern declarations - call find_reserved_word instead of searching word_token_alist builtins/bashgetopt.h - new file, extern declarations for stuff defined in bashgetopt.c builtins/{bind,command,fc,histctl,jobs,setattr}.def - include bashgetopt, removed internal getopt extern declarations cpp-Makefile, builtins/Makefile - add dependencies on bashgetopt.h to builtins - add dependencies on common.h to builtins nojobs.c - wait_for_background_pids should be void 8/9 --- builtins/common.c - new function, double_quote(), to double-quote strings documentation/bash.1 - added text specifying return value of `command -[vV]' - added description of the -E option to echo - added text specifying that `enable' accepts -a in place of -all 8/10 ---- shell.c - since non-Posix systems with job control use top_level_mask, it needs to be initialized correctly by initialize_terminating_signals mailcheck.c - fixed mailpath-parsing code to correctly handle backslash-quoted `?' and `%' in the $MAILPATH entries by adding a function parse_mailpath_spec to return a pointer to the first unquoted `?' or `%' and having remember_mail_dates and check_mail call it documentation/bash_builtins.1 - new man page for bash builtins, from jaws@pangaea.dme.nt.gov.au (implemented by using number registers as flags and sourcing bash.1) 8/16 ---- bashline.c - have maybe_make_readline_line use rl_delete_text rather than rl_kill_text because the text need not be saved on the kill ring 8/17 ---- jobs.h - don't include extern declarations for fork(), getpid(), or getpgrp() if __SVR4_2__ is defined (Unixware, SVR4.2). __SVR4_2__ used as in siglist.h test.c - don't include extern declarations for getegid(), getgid(), or geteuid() if __SVR4_2__ is defined (Unixware, SVR4.2) 8/18 ---- execute_cmd.c - don't check that the current directory in the path is `.' if we've already found `.' in the path in find_user_command_internal - new function make_full_pathname, to glue `path' and `name' together in find_user_command_internal rather than using sprintf, which is very slow 8/19 ---- support/mksysdefs - packaged all of the uname calls into one block at the top of the script; uname sets up some script variables: UNAME UNAME_R UNAME_M RELEASE LEVEL - make sure machines running SVR4.2 have __SVR4_2__ defined machines.h - for i386 machines running SVR4.2, make sure that __SVR4_2__ is added to SYSDEP_CFLAGS test.c - changed the test_exit define to use the do { ... } while(0) idiom - made GID_T and UID_T be int for BSD/386, since that's what getgroups() returns - cast both sides of a test to UID_T or GID_T to make sure we're on the same page when testing lib/readline/bind.c, lib/readline/readline.c - fixes to deal with the Cray's pointers of different sizes -- pointers to functions are a different size than pointers to structs 8/20 ---- machines.h, test.c, jobs.h, siglist.h, support/mksysdefs - changed __SVR4_2__ to USGr4_2 support/getcppsyms.c - added support for recognizing __SVR4_2__ and USGr4_2 8/23 ---- variables.c - added a static variable that keeps track of whether or not function local variables have been created with the `local' or `typeset' builtins and short-circuits the call to kill_all_local_variables if none have been created lib/readline/vi_mode.c - extern declaration for rl_vi_check and rl_digit_loop1 - declare `count' argument to rl_vi_delete - made rl_vi_set_last a void function lib/readline/bind.c - declare `count' argument to strnicmp lib/readline/readline.c - made rl_add_undo, free_undo_list void functions lib/readline/readline.c, lib/readline/bind.c, lib/readline/search.c, lib/readline/vi_mode.c - changed return; to return 0; and added explicit returns to many `int' returning functions that didn't return a value 8/24 ---- builtins/ulimit.def - check for RLIMIT_RSS being defined before trying to use it machines.h - fixes to cray machine description from Bill Jones builtins/common.c - make all of the dollar_arg_stack stuff static lib/malloc/alloca.c - new version, from emacs 19 8/26 ---- lib/readline/complete.c - use double quotes to quote replacement text with word breaks rather than single quotes, which inhibit tilde expansion lib/readline/vi_keymap.c - changed TAB to default to completion for the VI insert keymap bashline.c - new function: posix_readline_initialize to make any changes to the readline keymaps when switching into and out of Posix.2 mode - call posix_readline_initialize from initialize_readline subst.c - call posix_readline_initialize from sv_strict_posix 8/27 ---- subst.c - changed USE_GLOB_LIBRARY to USE_POSIX_GLOB_LIBRARY to make the intent clear shell.c - new function, issock(fd) returns 1 if FD is a socket according to fstat(2) -- note that this only works if S_ISSOCK is defined in posixstat.h - run_startup_files calls issock to see whether or not to run the .bashrc input.c - include general.h for declarations of xmalloc, xrealloc lib/tilde/tilde.c, lib/tilde/tilde.h - tilde_expansion_failure_hook is now a pointer to a CPFunction, since that's how it's used lib/readline/history.c - include or as appropriate 8/29 ---- machines.h - avoid `M_MACHINE redefined' messages in the hpux description 8/30 ---- jobs.h - added #defines for sigfillset, sigdelset, and sigismember to fill out the Posix.1 signal functions general.h - add an extern declaration for getwd() general.c - NeXT machines already have a vfree() with a declaration in stdlib.h, so don't define our vfree() on those systems cpp-Makefile - NeXT machines don't have a link to `gcc', so make sure that HAVE_GCC is not defined on those machines, even if __GNUC__ is lib/readline/readline.h, lib/readline/complete.c - rl_attempted_completion_function is now declared as a pointer to a CPPFunction, since that's how it is used bashline.c, bracecomp.c - fixed assignments to rl_attempted_completion_function, since it's now a pointer to a CPPFunction lib/readline/keymaps.h - fleshed out declarations of function types inside __FUNCTION_DEF macro to match other files lib/readline/readline.h - removed typedefs for function pointer types, since they are now declared in keymaps.h 8/31 ---- lib/readline/complete.c - if there is more than one match, don't quote the replacement text unless the matching prefix has a word break character. The old code quoted the replacement if any of the possible replacements had a word break character builtins/alias.def - fixed memory leak -- free the array returned by all_aliases when alias is called without arguments builtins/read.def - fixed memory leak -- need to free return value from string_list_dollar_star builtins/fc.def - fixed memory leak -- need to free return value from fc_readline builtins/hash.def - fixed memory leak -- need to free return value from find_user_command builtins/alias.def - fixed memory leak -- remove_alias needs to free the key in the hash table entry it deletes execute_cmd.c - fixed memory leak in find_user_command_in_path: if we're not returning full_path, we need to free it lib/readline/bind.def - fixed memory leak -- need to free the returned arrays from recursive calls to invoking_keyseqs_in_map 9/1 --- builtins/bind.def - return failure immediately if no_line_editing is set builtins/shift.def - fixed memory leak -- make sure all of the word list element from rest_of_args is freed when shifting it into dollar_vars[9] builtins/hash.def - fixed memory leak -- only need to save the key for a particular hash item once in remember_filename expr.c - fixed memory leak -- free `tokstr' after performing the assignment statement and before assigning to it with savestring execute_cmd.c - fixed memory leak -- need to free the copy of the command line passed to make_child in execute_disk_command if the command is not found lib/readline/display.c - fixed call to tgoto in delete_chars -- caused the delete to fail when using term_DC on some systems [code made available via ftp -- first redistributable version]