rc

[fork] interactive rc shell
git clone https://hhvn.uk/rc
git clone git://hhvn.uk/rc
Log | Files | Refs | README | LICENSE

ChangeLog (29622B)


      1 Changes since 1.2: (Too many to count!)
      2 
      3 A memory stomping bug was fixed (provoked by assigning a variable
      4 to its old value plus something else).
      5 
      6 Better signal handling; a real signal handler which manages a queue
      7 of pending signals was added.
      8 
      9 rc now ignores SIGQUIT and traps SIGINT even in non-interactive
     10 mode. Thus,
     11 
     12 	rc ed.sh
     13 
     14 will not do mysterious things if the shell script "ed.sh" calls a
     15 command like "ed" and then you hit ^C.
     16 
     17 rc now opens 0, 1, 2 on /dev/null if they are inherited closed.
     18 rc -o prevents this.
     19 
     20 A couple of stupid O(n^2) string appends were replaced with O(n)
     21 loops. This should make foo=`{cat /etc/termcap} bar=$^foo a little
     22 faster :-)
     23 
     24 Returning a list of signals from a function is now legal, so "return
     25 $status" should always work.
     26 
     27 The code has been revised, new printing routines have been added.
     28 
     29 rc no longer uses redundant braces when exporting functions.
     30 
     31 A first stab at a verification suite has been added (trip.rc).
     32 (someone, please help me make this comprehensive!)
     33 
     34 rc -p now does not initialize functions from the environment. This
     35 should make it easier to write shell scripts that don't need to
     36 assume anything about the environment.
     37 
     38 Inherited ignored signals are now ignored in the current shell and
     39 passed on ignored to the child processes. whatis -s also reflects
     40 this information.
     41 
     42 A file descriptor leak in the /dev/fd implementation of >{} was
     43 fixed.
     44 
     45 A variable set to '' was not imported from the environment; this
     46 has been fixed.
     47 
     48 Changes since 1.3beta:
     49 
     50 New Makefile/config.h setup.
     51 
     52 builtin echo may now be conditionally included out, to use a Goldwynism.
     53 
     54 builtin exit takes any legal exit status. If the status is not all zeros,
     55 rc exits with 1. (having "exit sigiot" produce a core dump would be going
     56 a little far, I think.)
     57 
     58 limit does not append a unit after a zero limit; 0g was too confusing.
     59 
     60 exec > /nonexistentfile does not cause rc to exit any more.
     61 
     62 If a noninteractive rc is started with sigint ignored, rc does not install
     63 its own signal handler.
     64 
     65 error messages produced by rc in a subshell were cleaned up. (rc erroneously
     66 reset the 'interactive' flag after a fork)
     67 
     68 print.c was cleaned up a little; no functionality was changed, but should
     69 be more portable now.
     70 
     71 a bug in rc-1.3beta (not previous versions) was fixed: setting the first
     72 element of $path to '' caused PATH to be exported as '':etc..
     73 
     74 getopt's "illegal option" message was gratuitously changed to something
     75 less abrupt.
     76 
     77 some dead code was removed from input.c
     78 
     79 %term was changed to %token in parse.y; apparently newer yacc's don't grok
     80 %term any more.
     81 
     82 a race condition in the signal handler was fixed.
     83 
     84 the variable in for() was getting evaluated each time through the loop
     85 (e.g., for (`{echo i;date>[1=2]} in 1 2 3)echo $i would print the date
     86 three times). This was cleaned up.
     87 
     88 a redundant fork() was removed from walk.c; this showed up when running
     89 a braced command with a redirection in the background. e.g., {a;b}>c&
     90 
     91 man pages for history and rc were cleaned up by david (thanks).
     92 
     93 rc set SIGQUIT and SIGTERM to SIG_DFL on background jobs---even when
     94 trying to do old-style backgrounding (i.e., don't use process groups,
     95 just ignore SIGINT & SIGQUIT & SIGTERM).
     96 
     97 $0 is now changed to the name of the signal when entering a signal
     98 handler. Thus it's possible to write code like
     99 
    100 	fn sigint sigterm sigquit {
    101 		switch ($0) {
    102 		case sigint
    103 			...
    104 		case sigterm
    105 			...
    106 
    107 wait with no arguments now prints the pid of any and all children
    108 that died with a signal. e.g.,
    109 
    110 	; wait
    111 	25321: terminated
    112 	25325: terminated
    113 
    114 as opposed to
    115 
    116 	; wait
    117 	terminated
    118 
    119 An error saving/restoring state in the input stream code would
    120 cause rc to exit with the (erroneous) command:
    121 
    122 	eval '|[a'
    123 
    124 FIFO's were not removed in a backgrounded command, e.g.,
    125 
    126 	cat <{echo hi}&
    127 
    128 Changes since rc-1.4beta:
    129 
    130 getopt was renamed to rc_getopt to avoid libc collisions.
    131 
    132 $cdpath with a / in it caused a cd to sometimes have two //'s at the
    133 front of the path. This is reserved by POSIX, so I changed it to skip
    134 one of the /'s.
    135 
    136 signal handling now emulates sh in the way I described in a previous
    137 message: the race condition present in older rc's whereby some SIGINTs
    138 got lost is now gone; any SIGINT received during a wait() is acted upon
    139 at the end of the wait(), unless of course SIGINT is being deliberately
    140 ignored.
    141 
    142 getopt was renamed to avoid naming conflicts with libc. Also a sound
    143 move since rc_getopt is no longer quite libc-getopt compatible; I had
    144 to add in a mechanism for resetting getopt.
    145 
    146 signal handler code in fn.c was cleaned up; there were several bugs
    147 in rc-1.4beta, notably the shell sometimes spawned background jobs
    148 with SIGTERM ignored. I took the opportunity to make things a little
    149 cleaner here.
    150 
    151 a quasi-memory leak in the code for while() was fixed: a long-running
    152 while that had rc commands allocating memory in it could cause the
    153 shell to grow without bounds. I fixed this by placing the while loop
    154 (*and* test!) inside a new allocation arena each time through the loop.
    155 
    156 A new configuration parameter, NOJOB, was added to allow you to force
    157 v7-style backgrounding (no setpgrp, ignore SIGINT and SIGTERM).
    158 
    159 The FIFO code was reworked a little. It should be more robust now---
    160 FIFOs get removed at the end of the command of the argument list
    161 that they were on:
    162 
    163 		fn foo {echo $*; cat $*}
    164 		foo<{echo hi}
    165 
    166 now works as expected. Also FIFO names are pushed onto the exception
    167 stack so that their removal occurs in the face of exceptions and so
    168 on.
    169 
    170 A memory leak in treefree() was plugged up --- the root node of a
    171 function was not getting freed.
    172 
    173 Changes since rc-1.4:
    174 
    175 General changes:
    176 
    177 	Some small memory leaks/uninit references revealed by Purify.
    178 
    179 	$bqstatus for querying the exit status of a backquote.
    180 
    181 	Globbing through unreadable directories.
    182 
    183 	More options to whatis.
    184 
    185 	History append which always re-opens the file (avoids
    186 	inconsistencies over multiple NFS-mounted accesses to
    187 	$history).
    188 
    189 	Support "rc -s".
    190 
    191 ---------
    192 
    193 Makefile:	Added comment referring to README for yacc/malloc problem.
    194 
    195 uiltins.c:	Added more options to whatis, protected rlimit prototypes
    196 		with #ifndef SYSVR4, renamed SIGCHK to sigchk.
    197 
    198 except.c:	Patched nl_on_intr printing to happen only in interactive
    199 		shells.
    200 
    201 exec.c:		Added comment explaining nl_on_intr variable, renamed SIGCHK
    202 		to sigchk.
    203 
    204 fn.c:		Replaced by-hand consing of exception stack etc. for signal
    205 		handler execution with call to funcall(). Replaced fun2str
    206 		call with call on print routines.
    207 
    208 footobar.c:	Got rid of memory leak in get_name(), parenthesize count,
    209 		flat and var nodes for correctness in unparsing, removed
    210 		list2str, made get_name use nalloc space, merge in a
    211 		better parse_var from es.
    212 
    213 glob.c:		Split out a test so that closedir is called correctly, renamed
    214 		SIGCHK to sigchk.
    215 
    216 glom.c:		Added bqstatus, renamed SIGCHK to sigchk, removed spurious
    217 		setsigdefaults, patched uninit memory reference, rename
    218 		"clear" to "memzero", wait for bq subproc to finish on EINTR.
    219 
    220 hash.c:		Added options to function/variable print code.
    221 
    222 history/history.c: Added '@' to the list of chars which can precede an
    223 		ignored '-'.
    224 
    225 input.c:	Got rid of tiny memory leak in closefds, got rid of uninit
    226 		memory reference in popinput, moved nul ignored check into
    227 		realgchar(), changed history append to always reopen the
    228 		history file, replaced SIGCHK with sigchk. Freed memory
    229 		returned by call to readline().
    230 
    231 lex.c:		Corrected typo in comment, moved nul character ignore code
    232 		to input routines.
    233 
    234 main.c:		Added -s flag.
    235 
    236 nalloc.c:	Added convenience feature to erealloc. (Allow NULL parameter)
    237 
    238 print.c:	Changed use of va_start so broken compilers can compile
    239 		print code.
    240 
    241 proto.h:	Added fake memset.
    242 
    243 rc.h:		Replaced clear() function prototype with a macro call on
    244 		memset(), removed SIGCHK, fixed prototypes.
    245 
    246 signal.c:	Removed unconditional exit in catcher code, renamed SIGCHK
    247 		to sigchk.
    248 
    249 status.c:	Rewrite sgetstatus breaking out strstatus so that bqstatus
    250 		can be set from glom routines.
    251 
    252 utils.c:	Got rid of clear() (use memset from C library), rename SIGCHK
    253 		to sigchk.
    254 
    255 var.c:	 	Got rid of memory leak in listassign(), converted list2str()
    256 		call to something using the print routines.
    257 
    258 version.c:	New version string.
    259 
    260 wait.c:		Got rid of memory leak in rc_fork, renamed SIGCHK to sigchk.
    261 
    262 walk.c:		Fixed pre-redirection bug, removed spurious setsigdefaults(),
    263 		renamed SIGCHK to sigchk.
    264 
    265 
    266 Changes since rc-1.5beta1
    267 
    268   Configuration: rc now uses GNU autoconf.
    269 
    270   Portability: mksignal works on HPUX 10.
    271 
    272   Portability: resources can be (quad_t).
    273 
    274   Bug: if rc was started with SIGCLD == SIG_IGN (e.g. by Solaris's
    275   rshd) it would loop.  Fixed by resetting SIGCLD to SIG_DFL if it
    276   was SIG_IGN when rc was started.
    277 
    278   Portability: POSIXish systems don't have NGROUPS.
    279 
    280 Changes since rc-1.5b2
    281 
    282   Configuration: rc now uses GNU automake.
    283 
    284   Portability: use sigsetjmp() when available.
    285 
    286   Portability: improve tests for quad_t.
    287 
    288   Configuration: don't leave FIFOs in /tmp when configuring.
    289 
    290   Configuration: let configure find `-ltermcap' when using readline.
    291 
    292   Configuration: pick up default path from config.cache.
    293 
    294   Bug: sense of most HAVE_RESTARTABLE_SYSCALLS tests was wrong.
    295 
    296   Bug: print prompts with `-i', even with editline / readline.
    297 
    298   Testing: just say `false' (not `/bin/false').
    299 
    300   Bug: confusion over gid_t versus GETGROUPS_T in which.c.
    301 
    302   Feature: `-V' option added to report version number.
    303 
    304   Configuration: remove version.c; `id' is defined in main.c now.
    305 
    306   Bug: clear list of living children after fork(); `{ ls & wait } |cat'
    307   no longer hangs or panics.
    308 
    309   Testing: add regression test for above.
    310 
    311   Tidiness: all the system call wrappers to prevent calls being
    312   restarted now live in system-bsd.c.  The configure script decides
    313   whether to build system.c or system-bsd.c.  Also, signal.c is more
    314   careful to only declare slowbuf if it will be needed.
    315 
    316   Tidiness: similarly, configure decides whether to build execve.c or
    317   not.
    318 
    319   Portability: test for ssize_t and use it where available; use long if
    320   there's no ssize_t.
    321 
    322   Portability: use sigsetjmp where it's available and appropriate.  If
    323   no sigsetjmp, just use sigjmp; this probably fails in a traditional
    324   SysV environment.
    325 
    326   Portability: test explicitly for SysV SIGCLD semantics.  Main (and
    327   dubious) benefit is that you can now define a function called `sigcld'
    328   on systems where there is no signal called SIGCLD!
    329 
    330   Bug: rc has its own memory allocator; don't use malloc directly.
    331 
    332   Bug: the rc_wait() wrapper is only needed on systems which restart
    333   system calls.  On Linux, in particular, the wrapper leads to a race
    334   which causes rc to hang (or panic in later versions).  Other systems
    335   apparently don't exercise this race.
    336 
    337   Bug: waitforall() must return if rc_wait4() returns with errno ==
    338   EINTR.  Otherwise, the rc builtin `wait' cannot be interrupted if
    339   there are background processes (although apparently only if there is a
    340   handler for SIGINT).
    341 
    342   Portability: dreadful hack to track down the real locations of
    343   signal.h to find signal names. rc now builds under CygWin32!
    344 
    345   Portability: replace above dreadful hack with mksignal.c, contributed
    346   by Vincent Broman.
    347 
    348   Portability: use POSIX wait() macros (WIFEXITED and friends).
    349   Unfortunately, POSIX omitted to supply WIFDUMPED, so this doesn't buy
    350   a great deal.
    351 
    352   Distribution: remove the dependencies of y.tab.[ch] on parse.y from
    353   Makefile.am.  The justification for this is that, unless you're
    354   hacking on rc's grammar, there's no reason to use anything other
    355   than the distributed files (which were generated with byacc and very
    356   lightly edited to silence a few gcc warnings).
    357 
    358   Enhancement: the example in addon.c wasn't very useful, since it
    359   depended on files which weren't included with the distribution.  There
    360   is now a working, if trivial, example.
    361 
    362   Tidiness: the code was compiled with as many gcc warnings enabled as
    363   I could find.  Very few problems turned up.  Some unused function
    364   arguments were removed.  Where unused arguments could not be removed
    365   (because the function is one of a set that must all have the same
    366   prototype), they were renamed to `ignore'.
    367 
    368   Portability: some versions of readline define the name `Function',
    369   which rc also uses.  Its use in rc has been renamed to `rc_Function'.
    370 
    371   Documentation: the `history' man page didn't explain what end of line
    372   does in editing mode.  It now does.
    373 
    374   Bug: the interaction with readline was broken, particularly with
    375   respect to signal handling.  I've incorporated some changes from Tom
    376   Culliton which should sort this out.  Unfortunately, we now have 3
    377   different code paths for readline 2.1, readline 2.2, and editline :-(.
    378 
    379   Configuration: if you say `--with-readline' or `--with-editline' it is
    380   now an error if the appropriate library is not found.
    381 
    382   Bug: rc didn't work on RedHat 5 systems.  This is because of
    383   peculiarities in the handling of signals and system calls on this
    384   system (the C library attempts to fake restartable system calls).
    385   The fix involves testing at configure time for sigaction() and
    386   SA_INTERRUPT: if both exist, we set up sys_signal() to be an "always
    387   interrupt" wrapper around sigaction().  (If we don't have sigaction(),
    388   we use signal() and check for restartable system calls as usual.)
    389 
    390   Portability: on AIX, lconv is defined by the system header files.
    391   Rename lconv in print.c to avoid the clash.
    392 
    393   Testing: add a test that `cd' prints the new directory if we are
    394   interactive and the directory was found via $cdpath.
    395 
    396 1998-07-23
    397 
    398   Testing: fix silly typo in above test.
    399 
    400   Configuration: `--with-vrl' added to support Gert-Jan Vons's readline
    401   library.
    402 
    403 1998-07-24
    404 
    405   Portability: the autoconf macro AC_FUNC_SETPGRP doesn't work on OSF1: that
    406   system supports arguments to setpgrp(), but also has a prototype in
    407   <unistd.h> to say that it is void.  Fix this by defining our own
    408   RC_FUNC_SETPGRP for now.
    409 
    410   Bug: <sys/wait.h> was included twice in some source files.
    411 
    412   Configuration: automake wants `make distclean' to remove *.tab.c.
    413   Rename y.tab.[ch] to parse.[ch] to avoid this.
    414 
    415 1998-07-27
    416 
    417   Portability: on Ultrix, `make trip' fails with `malloc: Invalid
    418   argument'.  Problem is that getgroups(0, NULL) in which.c returns -1.
    419   Add new configure test to check for POSIX getgroups() and fall back to
    420   NGROUPS if it's not available.  The magic is done by "getgroups.h".
    421 
    422   Tidiness: extract <sys/wait.h> magic into "wait.h".
    423 
    424 1998-10-20
    425 
    426   Tidiness: include prototype for add_history() when doing editline.
    427 
    428   Documentation: document the `-V' flag and mention Linux's
    429   /proc/self/fd as alternative to /dev/fd.
    430 
    431 1998-10-21
    432 
    433   Bug: shells need to be prepared for bogus applications to have set
    434   their input file descriptor to non-blocking, and set it back.
    435 
    436   Tidiness: <sys/types.h> is in "proto.h", so nothing else needs to
    437   include it explicitly.
    438 
    439   Documentation: document the ^A bug.
    440 
    441 1998-10-22
    442 
    443   Tidiness: makenonblock() was a rather poor choice of name for
    444   a function which makes a file descriptor *not* nonblocking :-).
    445 
    446 1998-10-26
    447 
    448   Portability: apparently some systems declare `char *basename(const
    449   char *)' in system header files.  Changing our basename() (in
    450   history.c) to match this prototype allows it to be compiled on such
    451   systems, and is harmless.  (Harmless, that is, if no system declares
    452   `char *basename(char *)'.)
    453 
    454 1998-10-28
    455 
    456   Bug: system-bsd.c needs to include "wait.h".
    457 
    458   Warnings: some versions of gcc warn about "ambiguous" `else' clauses.
    459 
    460   Portability: assigning va_list objects doesn't work everywhere (Linux
    461   on the PowerPC, specifically).  Use the C 9x invention va_copy()
    462   instead, if it exists, otherwise fall back to assignment.
    463 
    464   Documentation: help HP-UX users by mentioning that you need `cc -Ae'.
    465   Also, HP-UX make will build rc in a separate directory.
    466 
    467   Tidiness: remove unused functions from print.c.  Anybody wanting to
    468   use this library in another project should follow the pointer in the
    469   documentation to an improved version.
    470 
    471 1998-10-29
    472 
    473   Bug: the "null character ignored" warning was printed with the wrong
    474   line number.  Fix by adding an offset argument to pr_error.
    475 
    476   Portability: work around readline's broken treatment of a non-blocking
    477   input file descriptor.
    478 
    479   Testing: add `testing' auxiliary program; use `testing' to generate
    480   null character on the fly (since it's a nuisance having a literal
    481   null character in trip.rc); reset sigexit in `fn fail'; add test for
    482   nonblocking input file descriptor; fix test for cdpath.
    483 
    484   Portability: include <sys/types.h> before <sys/stat.h>.
    485 
    486 1998-10-30
    487 
    488   Portability: rename basename() to rc_basename(), since the former is
    489   quite widespread, and has a variety of different definitions (none of
    490   them, of course, static).
    491 
    492   Portability: work around i386 GCC 2.7.2.3 optimization bug triggered
    493   by a (really quite simple) expression in history.c.
    494 
    495 1998-12-04
    496 
    497   Bug: a debugging statement was left in history.c by mistake.
    498 
    499   Bug: `history' needs to check for `me' character preceded by `/', as
    500   well as all the other options.  An invocation like ../rc-1.5/- no
    501   longer loops.
    502 
    503   Documentation: it seems better to have but a single URL in the README
    504   file, which indirects to the other places of interest.
    505 
    506 1998-12-08
    507 
    508   Portability: use AM_PROG_CC_STDC.  This obviates the need for a
    509   special hack on HP-UX.
    510 
    511   Documentation: document all the flags to `whatis'.
    512 
    513 1998-12-09
    514 
    515   Tidiness: latest autoconf version has fixed AC_FUNC_SETPGRP, so we
    516   no longer need to supply our own.
    517 
    518   Portability: test for va_copy() needs to include <stdarg.h>.
    519 
    520 1998-12-10
    521 
    522   Tidiness: move most of the configure.in nastiness into acinclude.m4.
    523 
    524 1998-12-11
    525 
    526   Tidiness: the release date now only needs to be changed in one place.
    527 
    528 1999-01-05
    529 
    530   Documentation: the Bell Labs rc now has the list flattening operator,
    531   but spelt $"foo.
    532 
    533 1999-01-11
    534 
    535   Release: rc-1.5b4.
    536 
    537 1999-01-19
    538 
    539   Documentation: document the `-s' option.  Also, arrange the option
    540   documentation in alphabetical order.
    541 
    542   Tidiness: just install `history' to `$(bindir)/-'; don't create an
    543   extra link (which `make clean' failed to remove).
    544 
    545 1999-01-22
    546 
    547   Bug: `-s' should not imply `-i'.
    548 
    549   Testing: add regression test for `-s' behaviour.
    550 
    551 1999-01-27
    552 
    553   Documentation: default path was out of date; minor consistency
    554   improvements.
    555 
    556   Release: rc-1.5b5.
    557 
    558 1999-02-15
    559 
    560   Portability: AM_INIT_AUTOMAKE calls AC_ARG_PROGRAM and
    561   AC_PROG_INSTALL.  Don't do it explicitly.  For once, the configure
    562   script gets smaller!  Program name transformations work right now.
    563 
    564   Documentation: note that rc has no `set' builtin; fix weird variable
    565   name example; any character except `=' may be used in a variable name;
    566   document bqstatus; document rc's exit status; other tidying.
    567 
    568 1999-03-01
    569 
    570   Documentation: document the yacc-imposed limit on ; separated commands
    571   in a line.
    572 
    573 1999-05-06
    574 
    575   Portability: tgetent() might be in -lncurses instead of -ltermcap.
    576 
    577 1999-05-10
    578 
    579   Portability: Linux *almost* has SysV SIGCLD semantics, and we need to
    580   detect them.
    581 
    582   Bug: if we reset SIGCLD to SIG_DFL, we need to record the fact in the
    583   sighandlers[] array.
    584 
    585 1999-05-12
    586 
    587   Documentation: note that `$(a.b)' syntax only mostly works, and that
    588   list definitions in exported functions are noisier than they need to
    589   be.
    590 
    591   Release: rc-1.5b6.
    592 
    593 1999-05-19
    594 
    595   Documentation: minor fixes to man page.
    596 
    597 1999-05-26
    598 
    599   Tidiness: `make distclean' now removes sigmsgs.[ch].
    600 
    601 1999-05-28
    602 
    603   Release: rc-1.6.
    604 
    605 1999-08-19
    606 
    607   Portability: the proposed C 9x __va_copy() macro is called that, not
    608   va_copy(), as I thought.  Furthermore, it is defined to be a macro, so
    609   we don't need to use autoconf to check for it.
    610 
    611 1999-10-11
    612 
    613   Bug: absolute globs don't need special case in doglob().  Avoids
    614   creating path names like `//tmp', which is a UNC path under CygWin.
    615 
    616 1999-10-12
    617 
    618   Portability: status.c assumes traditional Unix layout of 0 and 1 exit
    619   statuses in the parent, which is not shared by BeOS.  Add mkstatval.c.
    620 
    621 1999-10-13
    622 
    623   Bug: a read(2) error in fdgchar() should call rc_raise(), not
    624   rc_exit().  This bug is easily tickled on systems (like Linux) which
    625   allow you to open(2) but not read(2) directories: `. /tmp'.  In all
    626   previous versions of rc, this caused the shell to exit.
    627 
    628   Portability: use POSIX strerror() where it's available; fake it with
    629   sys_errlist[] where not.
    630 
    631   Feature: replace `-V' with `version' variable.
    632 
    633 1999-10-14
    634 
    635   Portability: exporting `path' causes indigestion in CygWin.  Since
    636   it's virtually impossible for a child `rc' process to inherit `path'
    637   (which I consider a bug, but it's not going to be fixed now), simply
    638   don't export `path'.
    639 
    640   Portability: add /usr/bsd to default default path.
    641 
    642   Documentation: failing to search $path for a `.' command is at least
    643   an incompatibility with Tenth Edition rc, and probably a bug.
    644 
    645 1999-11-10
    646 
    647   Feature: make `version' a list.
    648 
    649 1999-11-11
    650 
    651   Documentation: when running configure, you need to set LDFLAGS for
    652   `-L' options, not LIBS.
    653 
    654   Release: rc-1.6b1.
    655 
    656 1999-12-10
    657 
    658   Bug: absolute globs do still need a special case.  `/*' works again now, but
    659   we still avoid creating names like `//tmp/foo'.
    660 
    661   Bug: avoid a putative race condition in signal.c.
    662 
    663   Documentation: extra parentheses around `~' and `!' expressions are
    664   forbidden.  Tom Duff's paper is not distributed with rc, but is
    665   available on the web.
    666 
    667   Release: rc-1.6b2.
    668 
    669 2000-04-19
    670 
    671   Bug: isatty() tests in input.c are relevant to any fd, not just 0.
    672   Now `. -i /dev/tty' works right.
    673 
    674   Bug: fn sigexit wasn't always cleared in child shells.
    675 
    676   Bug: `~ () '*'' dumped core.
    677 
    678 2000-05-25
    679 
    680   Portability: need special runes for read() returning EIO under job
    681   control systems.
    682 
    683 2000-06-20
    684 
    685   Feature: add `-I' flag (definitively not interactive) for
    686   compatibility with Plan 9 rc.
    687 
    688 2000-11-27
    689 
    690   Portability: configure fails to detect strerror() on NetBSD; we need
    691   to include <string.h>.
    692 
    693 2001-06-18
    694 
    695   Bug: you can't pass a short to a stdargs function!
    696 
    697 2001-09-27
    698 
    699   Documentation: we don't consider that `.' failing to search path is
    700   a bug.
    701 
    702   Feature: ^A in lists is now handled transparently.
    703 
    704 2001-10-01
    705 
    706   Bug: it's no longer possible to use parentheses to sneak a word that
    707   needs quoting past the "quoting detector", so `fn x { echo $(x.y) }'
    708   now works both in the current rc and its descendants.
    709 
    710   Documentation: mention the catastrophic effects of a semantic error
    711   in fn prompt.
    712 
    713 2001-10-03
    714 
    715   Feature: exported lists no longer use redundant parentheses.
    716 
    717 2001-10-04
    718 
    719   Bug: semantic errors in `fn prompt' no longer throw rc into a tailspin.
    720 
    721   Feature: don't export $cdpath or $home (the lower-case versions).
    722 
    723 2001-10-12
    724 
    725   Release: rc-1.6b3.
    726 
    727 2001-10-25
    728 
    729   Feature: large file support (thanks Scott Schwartz, Chris
    730   Siebenmann).
    731 
    732 2001-10-29
    733 
    734   Bug: space vs tab confusion in commented out Makefile rules to
    735   rebuild parser (thanks Gary Carvell).
    736 
    737 2001-10-31
    738 
    739   Documentation: subscripted variables don't work in here documents.
    740 
    741   Release: rc-1.6c4.
    742 
    743 2001-11-01
    744 
    745   Bug: more wrongly ordered header file includes (thanks Callum
    746   Gibson).
    747 
    748 2001-11-06
    749 
    750   Portability: rename print.c::utoa() to rc_utoa() to avoid QNX name
    751   clash; use "sh -c 'test ...'" in trip.rc for missing standalone
    752   `test' on QNX (thanks Stefan Dalibor).
    753 
    754 2001-11-20
    755 
    756   Documentation: tighten up various descriptions, and include some
    757   more examples.
    758 
    759   Release: rc-1.6c5.
    760 
    761 2001-11-23
    762 
    763   Bug: parselimit() was broken in various ways (thanks Chris
    764   Siebenmann).
    765 
    766 2002-02-08
    767 
    768   Bug: yet more wrongly ordered header file includes.
    769 
    770   Release: rc-1.6c6.
    771 
    772 2002-04-03
    773 
    774   Feature: make $version less magical, and exportable if it's changed
    775   from its default value.  Same for $prompt (thank Erik Quanstrom).
    776 
    777   Bug: make $bqstatus and $status not exportable.
    778 
    779   Feature: "stuttering" colons for multiple replacements in the
    780   history programs (thanks Callum Gibson).
    781 
    782 2002-05-22
    783 
    784   Documentation: possible warning in tripping.c (thanks Dan Moniz).
    785 
    786   Release: rc-1.6c7.
    787 
    788 2002-06-18
    789 
    790   Release: rc-1.7.
    791 
    792 2002-07-25
    793 
    794   Bug: fix globbing of broken symlinks.
    795 
    796 2002-07-31
    797 
    798   Bug: readline doesn't handle EIO either.
    799 
    800 2002-08-15
    801 
    802   Bug: variables that are sometimes exported (i.e. $prompt and
    803   $version) need to be made exportable if they are inherited from the
    804   environment.
    805 
    806   Portability: don't call sigaction() for SIGKILL or SIGSTOP; don't
    807   hand a garbage signal mask to sigaction() (thanks Jeremy
    808   Fitzhardinge).  Also, remove use of SA_INTERRUPT (SUSv3, BSD,
    809   etc. have SA_RESTART with the inverted meaning).
    810 
    811 2002-08-20
    812 
    813   Bug: don't call ealloc(0) on systems where getgroups() doesn't
    814   return egid (thanks Chris Siebenmann).
    815 
    816 2002-11-27
    817 
    818   Bug: history dumps core if more colons than substitutions (thanks
    819   Callum Gibson); history fails to avoid itself if it's the only
    820   command; history writes and reads outside allocated memory.
    821 
    822   Configuration: upgrade to autoconf-2.56 and automake-1.7.1.
    823 
    824 2003-07-17
    825 
    826   Testing: remove test for large file support, as it causes
    827   indigestion on file systems that don't support sparse files (thanks
    828   Scott Schwartz).
    829 
    830 2003-07-22
    831 
    832   Release: rc-1.7.1.
    833 
    834 2003-09-24
    835 
    836   Tidiness: minor improvements to input.c.
    837 
    838 2014-02-26
    839 
    840   Bug: fix for CVE-2014-1936 from Jakub Wilk.
    841 
    842 2014-06-29
    843 
    844   Documentation: update email and web addresses.
    845 
    846 2014-08-31
    847 
    848   Feature: support quoting for filename completion in GNU readline.
    849 
    850 2014-09-01
    851 
    852   Bug: quoting of glob characters was broken (thanks Leah Neukirchen);
    853   fix the "sneaky parens" bug properly (thanks Wolfgang Zekoll).
    854 
    855   Feature: allow $"x as a synonym for $^x
    856 
    857   Release: rc-1.7.2.
    858 
    859 2015-04-03
    860 
    861   Packaging: the rc.spec file was very out-of-date.
    862 
    863 2015-04-04
    864 
    865   Portability: the comment from 1999-08-19 may well have been true at
    866   the time, but the final version of the C99 standard called varargs
    867   copying macro va_copy().
    868 
    869 2015-04-07
    870 
    871   Portability: look in -ltinfo for tgetent.
    872 
    873   Packaging: various autoconf / automake updates and tweaks.
    874 
    875 2015-04-14
    876 
    877   Bug: in initinput(), the call ugchar(EOF) used the ungetcount member
    878   of the top Input structure without initializing it. Thanks to Jeff
    879   Johnson for finding this, Robert Scheck for reporting it, and Uli
    880   Drepper for implementing MALLOC_PERTURB_, a cheap way to find uses of
    881   uninitialized memory.
    882 
    883 2015-04-18
    884 
    885   Licensing: tweaked to match exactly the "zlib with acknowledgement"
    886   license which is used by nunit and is already approved by various
    887   distros.
    888 
    889 2015-04-20
    890 
    891   Release: rc-1.7.3.
    892 
    893 2015-05-12
    894 
    895   Licensing: due to GPL compatibility concerns, the license is changed
    896   again to the "zlib" license. (N.B. This license change was agreed and
    897   approved by Byron Rakitzis, who is the copyright holder.)
    898 
    899   Testing: swap arguments to mktemp to be kinder to NetBSD (thanks Piotr
    900   Meyer).
    901 
    902 2015-05-13
    903 
    904   Release: rc-1.7.4.
    905 
    906 2015-06-24
    907 
    908   Portability: eschew GNU-specific "date -I" (thanks Ross Lonstein;
    909   github #4).
    910 
    911 2015-10-26
    912 
    913   Bug: fix use-after-free bug (thanks Dražen Borković; github #9 and
    914   #13).
    915 
    916 2015-11-28
    917 
    918   Bug: fix bug with signal handlers and readline (thanks Bert Münnich).
    919 
    920 2016-02-26
    921 
    922   Bug: fix bug with "break" inside local variable block (thanks Dražen
    923   Borković and Bert Münnich; github #11 and #21).
    924 
    925 2016-08-25
    926 
    927   Bug: more signal / readline fixes (thanks Bert Münnich; github #14).
    928 
    929 2016-08-27
    930 
    931   Portability: replace reldate with "git describe" (thanks @RamKromberg).
    932 
    933   Documentation: "~ $x ()" is something of a special case. The man page
    934   now goes into some more detail.
    935 
    936 2017-02-27
    937 
    938   Feature: parse equals like a keyword, meaning it can appear unquoted in
    939   commands. For example, rather than having to write
    940 
    941     ls --color'='tty # or ls '--color=tty' or similar
    942 
    943   one may now write simply
    944 
    945     ls --color=tty
    946 
    947   Special thanks to Bert Münnich for fixing this major irritation
    948   (github #29).
    949 
    950 2017-05-11
    951 
    952   Bug: the "-e" flag did the wrong thing with respect to "while" loops (thanks
    953   Dražen Borković; github #34 and #35).
    954 
    955 2017-06-23
    956 
    957   Feature: new developer mode, enabled with "--enable-develop" at the
    958   "configure" stage, dumps each parse tree after it is built.
    959 
    960   Bug: the precedence of prefix redirect was lower than pipe, which led to
    961   some counter-intuitive parses (thanks Casper Ti. Vector; github #33).
    962 
    963   Bug: rc with readline support failed to notice window size changes correctly
    964   (thanks Chris Siebenmann; github #32).
    965 
    966 2017-08-25
    967 
    968   Testing: use "pwd -P" which is friendlier to macOS (thanks Dražen Borković;
    969   github #36).
    970 
    971 2017-08-25
    972 
    973   Feature: add a "continue" builtin (thanks Casper Ti. Vector and Dražen
    974   Borković; github #25 and #37).
    975 
    976 2017-10-27
    977 
    978   Bug: using "-e" led to incorrect exit status (thanks @hallik and Bert
    979   Münnich).
    980 
    981   Portability: burning the build date into the binary makes a
    982   reproducible build impossible. Replace it with the git description
    983   (thanks @RamKromberg; github #26).
    984 
    985 2018-02-17
    986 
    987   Portability: remove all references to SIGCLD (thanks Leah Neukirchen).
    988 
    989 2018-03-05
    990 
    991   Bug: the grammar disallowed local assignments and redirections in the true
    992   branch of `if` when there was an `else` clause (thanks Dražen Borković and
    993   Bert Münnich; github #31).
    994 
    995 2018-03-17
    996 
    997   Feature: implement the `flag` builtin (github #20).
    998 
    999 2018-03-19
   1000 
   1001   Feature: implement `if not` (github #19).
   1002 
   1003   Feature: default values for $nl and $tab (github #43).
   1004 
   1005 2018-03-20
   1006 
   1007   Tidiness: be consistent about using tabs everywhere, and add a .vimrc to
   1008   keep it so in the future.
   1009 
   1010 2018-05-30
   1011 
   1012   Feature: readline can now complete commands (thanks Bert Münnich; github
   1013   #2).