pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/shells/osh Update to 041028, closing PR 27765.



details:   https://anonhg.NetBSD.org/pkgsrc/rev/75209a2bfe2c
branches:  trunk
changeset: 486382:75209a2bfe2c
user:      wiz <wiz%pkgsrc.org@localhost>
date:      Mon Dec 27 21:13:01 2004 +0000

description:
Update to 041028, closing PR 27765.

Changes that improve compatibility w/ the Sixth Edition Unix shell
are marked w/ a `C:' in the details below.

-------------------------------------------------------------------------------
[osh-041028]:
*.1:
        * Fixed a few typos in osh.1 and sh6.1.

        * Did a little fine tuning of osh.1 and sh6.1 to hopefully
          eliminate some incomplete and/or unclear explanations.

        * Did the same for both if.1 and goto.1.

osh and sh6:
        * Fixed an annoying bug introduced in the previous release...
          The way error messages were printed in error() was not accounting
          for the fact that the standard error stream is quite often (if not
          always) unbuffered by default.  This could make some error messages
          difficult to read when a pipeline was involved.  A little example:
          Before (unfixed):
                % foo|bar|baz
                foo: not foundbar: not foundbaz: not found


          After (fixed):
                % foo|bar|baz
                foo: not found
                bar: not found
                baz: not found

-------------------------------------------------------------------------------
[osh-041018]:
        This release includes sh6 in addition to osh, if, and goto.
        Sh6 is simply osh without the enhancements.  It is built from the
        same sources as osh, but it is not built or installed by default.

Makefile:
        * Added targets for sh6 so that it can optionally be built, tested,
          and installed if desired.

osh and sh6:
        * Split the code into modules.
          This is primarily for developer sanity... ;)
          The new files are osh.h, main.c, parse.c, and exec.c.

        * If (geteuid() != getuid() || getegid() != getgid()) is true,
          print a nice error message and exit with a status of 2.

        * Strip all NUL characters from the shell's standard input as it is
          being read into the command line buffer.  Input to the shell is
          expected to be text.

        * Changed the way the shell handles non-seekable files.
          This is for both initialization files (osh only) and command files.
          Do not block on open(2); open it and determine if it is a regular
          file (or seekable).  If it is not a regular file or is not seekable,
          exit with an error.  If seekable, reset the file for blocking I/O
          and continue as normal.

          Note that you can still read commands from FIFOs if you want.
          Instead of doing `osh myfifo', you can either do `osh <myfifo'
          or `osh - my list of positional parameters <myfifo'.

        * Changed the error handling to use stdarg(3).
          This allows for more code consistency and makes it easier
          to handle all errors with just one line of code.

osh only:
        * Added another possible initialization file for osh: $HOME/.oshrc
          Osh only attempts to execute commands from this file if it is an
          interactive shell.  In the case of a login shell, osh tries this
          file only after it tries both /etc/osh.login and $HOME/.osh.login.

        * Made osh less strict about errors in initialization files.
          Previously, common shell-detected errors in any of the files
          were generally treated in the same way as they would have been
          treated in a command file (i.e., the error was fatal).  Realizing
          that this potentially caused difficulty and annoyance for the user,
          I opted to change it so that these types of errors are handled as
          they are when osh is interactive.

          This should make it easier for the user to debug
          initialization files if needed.

        * Added a `source' special command.
          It is functionally similar to the way this command works in csh(1).
          See osh(1) for details.

if:
        * Changed ARGMAX from 50 to 256.

        * If (geteuid() != getuid() || getegid() != getgid()) is true,
          print a nice error message and exit with a status of 2.

        * Added a few new primaries: `-h', `-s', `-t', and `-x'
          See if(1) for details.

goto:
        * Changed the size of the label buffer from 128 to 1024.

        * Do not require the `:' of a labelled line to appear in column 1.
          Instead, allow the `:' to optionally be preceded by blanks so that
          labelled lines can be indented in command files.  See goto(1) for
          more details if needed.

        * Eliminated unnecessary calls to strcmp(3) whenever a possible label
          cannot possibly match the label argument given on the command line.

        * Give an error if any NUL character is encountered in the input.

        * Give an error if a zero-length string is given as the label argument.

-------------------------------------------------------------------------------
[osh-040812]:
osh.c:
        * Changed the way unused pipe descriptors are handled in the child
          process after fork().  This fixes a bug where the pipe in a pipeline
          such as `( cat /dev/zero ) | sleep 1' would never enter an EOF state.
          Previously, the close-on-exec flag was being set for the descriptors
          in question.  Of course, this did not work for the above and similar
          cases.  So, the descriptors in question are now close()d explicitly.

        * Made some final changes to globbing to allow for more sensible
          behaviour WRT quoting.  The functions affected are: globargs(),
          globchar(), and striparg().  Read and/or run `tests/glob_test.osh'
          for details of the user-visible changes.  This script may cause
          previous versions of the shell to dump core.

          Basically, since striparg() had always been called *after* glob(3)
          and since the path names generated by glob(3) cannot be trusted, it
          ends up that the best course of action is to call striparg() *before*
          glob(3).  This relatively simple change fixes a variety of *possible*
          problems related to globbing.

-------------------------------------------------------------------------------
[osh-040731]:
osh.c:
        * Added bounds checking to striparg() to protect against a possible
          buffer overflow.  Though this is unlikely to happen in the general
          case, it is certainly *not* impossible.  This function had been
          unprotected since at least osh-020214.

        * Added a new diagnostic, `Arg too long', to go with the
          above-mentioned change.

        * Removed the `No directory' diagnostic from globargs().
          It was simply not worth the trouble.  In compatible mode,
          the `No match' diagnostic provides sufficient compatibility
          in my opinion...

        * Changed the `chdir' command so that it only attempts to change to
          the previous working directory when the `-' argument is *not* quoted.
          This alows the shell to change to a directory by that name.
          For example:
          % mkdir -; chdir -; pwd; chdir \-; pwd; chdir -; pwd; rmdir -
          chdir: no old directory
          /home/jneitzel/osh_stuff/osh-040731
          /home/jneitzel/osh_stuff/osh-040731/-
          /home/jneitzel/osh_stuff/osh-040731

          Remember that "-" or '-' has the same effect as the \- used above.
          This is perhaps a little silly, but I figure if a directory *can*
          exist then it should be possible to change to it.

        * Fixed the `<-' redirection argument so that it adheres to the
          documentation.  This fixes a file descriptor leak in addition
          to the incorrect behaviour.  It should be silently ignored in
          the following case: `echo hello | grep h <-'; now it is.

-------------------------------------------------------------------------------
[osh-040723]:
osh.c:
        C: Fixed a small idiosyncrasy with the `No directory' and `No match'
           diagnostics when running in compatible mode.  For example:
           Before:
           % if -d . -a -r . echo "`.' is a readable directory.";\
             echo foo*; echo ?; echo []
           `.' is a readable directory.
           No match
           No match
           No directory

           After:
           % if -d . -a -r . echo "`.' is a readable directory.";\
             echo foo*; echo ?; echo []
           `.' is a readable directory.
           No match
           No match
           No match

           The shell should only print `No directory' when a directory
           does not exist (ENOENT) or cannot be read (EACCES).  Yes, it is
           expected that invalid patterns such as `[' and `[]' result in
           the shell printing a `No match' diagnostic.

        * Changed the `<--' input redirection argument to `<-' instead.
          This seems more consistent and will allow for possibly clearer
          documentation in the future (if and when I add another feature
          I've been thinking about).

fd2.[1c]:
        * Removed the fd2 utility and its manual page because of
          possible licensing issues.

-------------------------------------------------------------------------------
[osh-040718]:
        This release is made primarily to synchronize with the new branch
        of the shell which is named `sh6'.

osh.1:
        * More revisions and clarifications...

-------------------------------------------------------------------------------
[osh-040714]:
Makefile:
        * Refined the description for _XOPEN_SOURCE a little.

osh.1:
        * General improvements...
          This includes documenting some things that have never been very well
          documented in this shell.

osh.c:
        C: Made changes to globbing which affect the shell in compatible mode.
           This includes the addition of the `No directory' diagnostic which
           was present in /etc/glob from Sixth Edition Unix.  Also, it looks
           like I had previously misinterpreted exactly when the `No match'
           diagnostic was supposed to be printed.  Now, when running in
           compatible mode the shell really is compatible.  Yay =)

        * Added a `umask' special command.

        * Disallow SIGCHLD from being trapped.
          When this signal is requested in a `trap' command, it is quietly
          disallowed.  This is the same behaviour seen with both SIGKILL and
          SIGSTOP.  Thus, doing a `trap + 9 17 20' quietly has no effect.

        * Made changes to how the shell builds a command's argument vector.
          Previously, malloc(3) was used.  Now, each command in the command
          line is simply split into `\0'-terminated words.  Each argument is
          actually a pointer to the corresponding word in the command line.

          The changes to parameter substitution in osh-040628 made this
          a perfectly sensible course of action.  This change also gives
          a microscopic improvement in run-time performance (as judged
          by time(1)).

          The only remaining use of malloc(3) in the shell's execution stage
          can be found in globargs().

-------------------------------------------------------------------------------
[osh-040628]:
        Thanks to Stephen M. Jones for suggesting that osh should be able
        to read a global rc file.  Thanks to Stephen C. VanDahm for assisting
        with some portability issues found in osh-040421.  Thanks also to
        Josep Portella Florit for reviewing osh-040421, making several useful
        suggestions, and sending patches.

        BTW, many changes were made to the manual pages.
        I hope they are clear, but I trust that if they are not then someone
        might be kind enough to tell me so and/or make suggestions.

        Some new files are included:
                examples/*:     initialization file examples
                  fd2.[1c]:     the fd2 utility

Makefile:
        * Added some notes about _XOPEN_SOURCE.

        * Added a target to optionally build and install fd2.

        * Removed the compile-time definition of `CLONE'.
          This is now a run-time option which can be toggled in order to
          enable or disable enhancements to the shell.

osh.c:
        C: Changed how the shell does parameter substitution.
           This was the last major incompatibility w/ the Thompson shell.
           Now, substitution is done *before* any command-line parsing
           takes place.

        * Added the ability for login shells to read the initialization files
          /etc/osh.login and/or $HOME/.osh.login if they exist.  A shell is
          considered to be a login shell if its first argument starts w/ a
          `-' character (e.g., -osh).

        * Added a `set' command to allow shell compatibility to be toggled
          at run time.  In addition, the shell now checks for `OSH_COMPAT'
          in the environment to tell future invocations of the shell which
          mode the user wishes to run in.

        * In addition to the `set' command mentioned above, the following
          special built-in commands have been added and are available when
          the shell is in "noclone" mode:
                exec, setenv, trap, unsetenv

        * In globargs(), use `gl_pathc == 0' to detect an unmatched pattern
          instead of checking if glob(3) returned `GLOB_NOMATCH'.  This allows
          for those cases where glob(3) may not be POSIX-compliant.

        * Made osh command files that are run asynchronously ignore interrupts.
          For example, `osh runcom&' should ignore SIGINT and SIGQUIT, and now
          it does.

        * Reverted a so-called compatibility fix made in osh-040421.
          Now, ignore SIGINT and SIGQUIT for asynchronous commands invoked
          from a command file.  From a usability perspective, it is simply
          too annoying to not do it this way.

        * Changed the `exit' command so that it always terminates a shell when
          reading commands from a file.  Previously, it only terminated a shell
          when invoked as `osh file'.  Note that `exit' still has no effect for
          interactive shells or `osh -c command'; this is intentional as it is
          compatible w/ the behaviour of `exit' under the Thompson shell.

if.c:
        * Include stdlib.h for exit(3) so that OS X doesn't complain.

        * Rename exp() to expr() to avoid conflicts w/ exp(3) on OS X.
          Strange, as math.h is not included there should not have been
          any conflict.  Oh well, it is fixed now.

        * Enable this utility to return a meaningful exit status to the user.
          In short, `if foo = foo' returns an exit status of 0; `if foo = bar'
          returns an exit status of 1.  Previously, exit status was always 0.

        * Made the usage less ambiguous; corrected the documentation to reflect
          the actual behaviour.  In short, usage is (and always has been) as
          follows:
                if expr [command [arg ...]]

        * Added some useful conditional primaries for constructing expressions.
          See the manual pages for details.

        * Use the stdio(3) functions instead of write(2) for printing
          the error messages.

        * In addition, added some useful diagnostic messages which were
          inspired by the test(1) utility from Seventh Edition Unix.

goto.c:
        * Give an error message when standard input is not seekable.
          Previously, a label not found error would be produced instead.

fd2.c:
        * A new utility and manual page...  It is an adaptation of the PWB/Unix
          (roughly PWB/1.0 ?) redirect diagnostic output command.  The original
          source came from the file `spencer_pwb.tar.gz' which can be found at:

                http://www.tuhs.org/Archive/PDP-11/Distributions/usdl/

diffstat:

 shells/osh/Makefile |  6 +++---
 shells/osh/distinfo |  6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diffs (25 lines):

diff -r 909d952b4297 -r 75209a2bfe2c shells/osh/Makefile
--- a/shells/osh/Makefile       Mon Dec 27 20:20:23 2004 +0000
+++ b/shells/osh/Makefile       Mon Dec 27 21:13:01 2004 +0000
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.8 2004/06/11 10:01:35 cjep Exp $
-# FreeBSD Id: ports/shells/osh/Makefile,v 1.3 2002/01/29 11:58:43 knu Exp
+# $NetBSD: Makefile,v 1.9 2004/12/27 21:13:01 wiz Exp $
+#
 
-DISTNAME=      osh-040421
+DISTNAME=      osh-041028
 CATEGORIES=    shells
 MASTER_SITES=  http://jneitzel.sdf1.org/osh/src/
 
diff -r 909d952b4297 -r 75209a2bfe2c shells/osh/distinfo
--- a/shells/osh/distinfo       Mon Dec 27 20:20:23 2004 +0000
+++ b/shells/osh/distinfo       Mon Dec 27 21:13:01 2004 +0000
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.4 2004/04/25 15:49:57 minskim Exp $
+$NetBSD: distinfo,v 1.5 2004/12/27 21:13:01 wiz Exp $
 
-SHA1 (osh-040421.tar.gz) = acce1ea52d7ceec5b802bebbb1da900cbfb4745d
-Size (osh-040421.tar.gz) = 36508 bytes
+SHA1 (osh-041028.tar.gz) = ff11fbf22832eb13b8ef4937cdb8e59065794e4a
+Size (osh-041028.tar.gz) = 55152 bytes



Home | Main Index | Thread Index | Old Index