home *** CD-ROM | disk | FTP | other *** search
- Changes since 1.2: (Too many to count!)
-
- A memory stomping bug was fixed (provoked by assigning a variable
- to its old value plus something else).
-
- Better signal handling; a real signal handler which manages a queue
- of pending signals was added.
-
- rc now ignores SIGQUIT and traps SIGINT even in non-interactive
- mode. Thus,
-
- rc ed.sh
-
- will not do mysterious things if the shell script "ed.sh" calls a
- command like "ed" and then you hit ^C.
-
- rc now opens 0, 1, 2 on /dev/null if they are inherited closed.
- rc -o prevents this.
-
- A couple of stupid O(n^2) string appends were replaced with O(n)
- loops. This should make foo=`{cat /etc/termcap} bar=$^foo a little
- faster :-)
-
- Returning a list of signals from a function is now legal, so "return
- $status" should always work.
-
- The code has been revised, new printing routines have been added.
-
- rc no longer uses redundant braces when exporting functions.
-
- A first stab at a verification suite has been added (trip.rc).
- (someone, please help me make this comprehensive!)
-
- rc -p now does not initialize functions from the environment. This
- should make it easier to write shell scripts that don't need to
- assume anything about the environment.
-
- Inherited ignored signals are now ignored in the current shell and
- passed on ignored to the child processes. whatis -s also reflects
- this information.
-
- A file descriptor leak in the /dev/fd implementation of >{} was
- fixed.
-
- A variable set to '' was not imported from the environment; this
- has been fixed.
-
- Changes since 1.3beta:
-
- New Makefile/config.h setup.
-
- builtin echo may now be conditionally included out, to use a Goldwynism.
-
- builtin exit takes any legal exit status. If the status is not all zeros,
- rc exits with 1. (having "exit sigiot" produce a core dump would be going
- a little far, I think.)
-
- limit does not append a unit after a zero limit; 0g was too confusing.
-
- exec > /nonexistentfile does not cause rc to exit any more.
-
- If a noninteractive rc is started with sigint ignored, rc does not install
- its own signal handler.
-
- error messages produced by rc in a subshell were cleaned up. (rc erroneously
- reset the 'interactive' flag after a fork)
-
- print.c was cleaned up a little; no functionality was changed, but should
- be more portable now.
-
- a bug in rc-1.3beta (not previous versions) was fixed: setting the first
- element of $path to '' caused PATH to be exported as '':etc..
-
- getopt's "illegal option" message was gratuitously changed to something
- less abrupt.
-
- some dead code was removed from input.c
-
- %term was changed to %token in parse.y; apparently newer yacc's don't grok
- %term any more.
-
- a race condition in the signal handler was fixed.
-
- the variable in for() was getting evaluated each time through the loop
- (e.g., for (`{echo i;date>[1=2]} in 1 2 3)echo $i would print the date
- three times). This was cleaned up.
-
- a redundant fork() was removed from walk.c; this showed up when running
- a braced command with a redirection in the background. e.g., {a;b}>c&
-
- man pages for history and rc were cleaned up by david (thanks).
-
- rc set SIGQUIT and SIGTERM to SIG_DFL on background jobs---even when
- trying to do old-style backgrounding (i.e., don't use process groups,
- just ignore SIGINT & SIGQUIT & SIGTERM).
-
- $0 is now changed to the name of the signal when entering a signal
- handler. Thus it's possible to write code like
-
- fn sigint sigterm sigquit {
- switch ($0) {
- case sigint
- ...
- case sigterm
- ...
-
- wait with no arguments now prints the pid of any and all children
- that died with a signal. e.g.,
-
- ; wait
- 25321: terminated
- 25325: terminated
-
- as opposed to
-
- ; wait
- terminated
-
- An error saving/restoring state in the input stream code would
- cause rc to exit with the (erroneous) command:
-
- eval '|[a'
-
- FIFO's were not removed in a backgrounded command, e.g.,
-
- cat <{echo hi}&
-
- Changes since rc-1.4beta:
-
- getopt was renamed to rc_getopt to avoid libc collisions.
-
- $cdpath with a / in it caused a cd to sometimes have two //'s at the
- front of the path. This is reserved by POSIX, so I changed it to skip
- one of the /'s.
-
- signal handling now emulates sh in the way I described in a previous
- message: the race condition present in older rc's whereby some SIGINTs
- got lost is now gone; any SIGINT received during a wait() is acted upon
- at the end of the wait(), unless of course SIGINT is being deliberately
- ignored.
-
- getopt was renamed to avoid naming conflicts with libc. Also a sound
- move since rc_getopt is no longer quite libc-getopt compatible; I had
- to add in a mechanism for resetting getopt.
-
- signal handler code in fn.c was cleaned up; there were several bugs
- in rc-1.4beta, notably the shell sometimes spawned background jobs
- with SIGTERM ignored. I took the opportunity to make things a little
- cleaner here.
-
- a quasi-memory leak in the code for while() was fixed: a long-running
- while that had rc commands allocating memory in it could cause the
- shell to grow without bounds. I fixed this by placing the while loop
- (*and* test!) inside a new allocation arena each time through the loop.
-
- A new configuration parameter, NOJOB, was added to allow you to force
- v7-style backgrounding (no setpgrp, ignore SIGINT and SIGTERM).
-
- The FIFO code was reworked a little. It should be more robust now---
- FIFOs get removed at the end of the command of the argument list
- that they were on:
-
- fn foo {echo $*; cat $*}
- foo<{echo hi}
-
- now works as expected. Also FIFO names are pushed onto the exception
- stack so that their removal occurs in the face of exceptions and so
- on.
-
- A memory leak in treefree() was plugged up --- the root node of a
- function was not getting freed.
-