> Date: Thu, 22 Jun 2006 05:38:39 +0200
> From: Roland Mainz <roland.mainz at nrubsig.org>
> X-Accept-Language: en
> MIME-Version: 1.0
> To: April Chin <April.Chin at eng.sun.com>, Korn Shell 93 
> integration/migration 
project discussion <ksh93-integration-discuss at opensolaris.org>
> Subject: Re: [ksh93-integration-discuss] ksh93 builtins in Solaris 
-thepatch...
> Content-Transfer-Encoding: 7bit
> X-ID: rfrBhvZ-8eYoLh+AhAThmobsCLPRC+7ODPe9z0p8FfZv8RgDJA6hQ0 at t-dialin.net
> X-TOI-MSGID: e3a50952-62f9-443a-a656-828c8d7a3f8b
> 
> April Chin wrote:
> > > Casper.Dik at Sun.COM wrote:
> > > > >If I understood correctly, the /usr/bin (and /bin) builtins are
> > > > >compatible with the Solaris version.  If that's true, then I think this
> > > > >is fine from an interface point of view.
> > > > >
> > > > >The fact that we need to crawl through code is a bad sign, though.
> > > > >Duplicate code introduces the possibility of making a change in one
> > > > >place and not the other, leading to bugs.  It would be better to
> > > > >refactor, so that ksh93 and the Solaris binary can share common code.
> > > >
> > > > Seconded.  I feel very uncomfortable about the whole "plain
> > > > commands as builtins" issue.  Unless they are refactored into
> > > > common apps,
> > >
> > > What do you mean with "are refactored into common apps" ? You mean that
> > > both should share the same souce ? That's easy from the engineering part
> > > (for example see
> > >
> > 
http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2006-June/000405
> > .html).
> > > The hard part seems to be to hunt down a matching lawyer at Sun and let
> > > him/her sign the mythical contribution form.
> > >
> > > > I'd be in favour of not enabling any of the builtins
> > > > except those which commonly are (test, echo, [ ).  Correctness trumps
> > > > performance.
> > >
> > > In theory, yes... that's why I accepted the massace of the builtins
> > > tagged with XPG4() for now.
> > > Finally we're taking about less than two hand full of builtins with a
> > > tiny codebase (which passes the SuSE testsuites and I've crawled through
> > > the sources, too) and IMO it's an overkill to disable them all. Or did
> > > you find any specific issue in the ksh93/AST implementation of these
> > > commands ?
> > 
> > Rather than disabling, we could initially include the commands and bind them
> > to /usr/ast/bin only.  Users who want the performance and the
> > AST versions of the commands can opt in by adding /usr/ast/bin to
> > their path.  This makes the AT&T commands easily accessible,
> > without affecting existing Solaris usage of these commands on ksh.
> 
> That's included in my patch already...

Okay, sounds good.  We'll want to document these
> 
> > I think my assumption about the binding of builtins to pathnames is that
> > the builtin command you are getting which bound to say, /bin,
> > is supposed to be the same as the binary command
> > in /bin.  Was this the intention, even though the way it works is that
> > the builtin gets executed even if the pathname it's bound to may not exist?
> 
> See David Korn's posting on builtins. Basically when ${PATH} is searched
> for a command which element of the path gets checked whether there are
> builtins which used be used instead. They do not need to be exactly the
> same code, they just need to be compatible in functionality.
> 
> > Please remember that all of the ten commands being proposed as
> > builtins bound to /usr/bin and /bin are listed as standards conforming.
> > Per our standards(5) manpage, users set up their paths to get
> > SUSv2 or SUSv3-conforming behavior--these paths will include
> > /usr/xpg4/bin ahead of /usr/bin.  However, with these
> > builtins bound to /usr/bin, users would get the builtin instead
> > of the conforming /usr/xpg4/bin or /usr/bin binary.
> 
> Erm, no. Builtins prefixed with a path (for example
> /usr/xpg4/bin/basename) will only replace the on-disk command when the
> shell searches the ${PATH} element "/usr/xpg4/bin". If ${PATH} does not
> contain "/usr/xpg4/bin" as element or another directory listed in
> ${PATH} contains a "basename" command before "/usr/xpg4/bin" is searched
> by the shell command lookup then this binary will be used instead of the
> builtin.

Ah, okay, sorry--for some reason I forgot that this is how it works...
For standards-conforming commands, the binary in /usr/bin on Solaris may be
the standards-conforming version if there is no /usr/xpg4/bin or /usr/xpg6/bin
command.  In this case, a ksh93 builtin bound to 
/usr/bin will override the Solaris /usr/bin version.

> 
> > Although users
> > can call the binaries using the full pathnames, they should expect
> > to get the conforming behavior without doing this.
> 
> They will get that behavour as they requested... don't worry... :-)
> 
> > I have not checked any others, but AST mkdir does have some non-standard
> > behavior that differs from Solaris /usr/bin/mkdir--
> > it does not take umask into account for mkdir -m <mode> <dir>
> 
> Erm... what do you mean here ? "-m" is supported:
> -- snip --
> mkdir
> --help                                                                        
>                                             
> Usage: mkdir [ options ] directory ...
> OPTIONS
>   -m, --mode=mode Set the mode of created directories to mode. mode is
> symbolic or octal mode as in chmod(1). Relative modes assume
>                   an initial mode of a=rwx.
>   -p, --parents   Ensure that each given directory exists. Create any
> missing parent directories for each argument. Parent
>                   directories default to the umask modified by u+wx. Do
> not consider an argument directory that already exists to
>                   be an error.
> -- snip --

Yes, -m is supported, but in this case, the builtin behavior is different
from Solaris.
In the below, /usr/bin/mkdir is the Solaris version; plain mkdir is the
ksh93 builtin.  The below case is similar to a test case in the 
VSC standards test suite:

$ umask 0777
$ /usr/bin/mkdir -m =rx d1
$ ls -ld d1
d---------   2 chin     staff        512 Jun 22  2006 d1
$ mkdir -m =rx d2
$ ls -ld d2
dr-xr-xr-x   2 chin     staff        512 Jun 22  2006 d2

> 
> > Also, we know that AT&T chmod does not include the ACL code and we don't
> > yet know that we can contribute this CDDL code to AT&T.
> 
> Yes, but as I said it's just one line to disable in the list... :-)
> 
> > The whole concept of builtins being bound to a pathname is fairly new to me,
> > and it may be new for others.  Or maybe I was just ignorant. :-)
> > Do other shells have this construct?
> 
> See David Korn's posting, too...
> 
> > It may not be as much of an issue for a separate /usr/bin/ksh93
> > as it would be for ksh93 as /usr/bin/ksh.
> 
> ;-(
> 
> > Also, it looks like there is a new project out on Open
> > Solaris that is proposing new /usr/gnu/bin commands.
> > See http://www.opensolaris.org/os/community/gnu_solaris/
> > The idea is that a user would put /usr/gnu/bin to their path
> > first to get the "GNU personality".
> > But what if they were using ksh93?  If there were a GNU command that was
> > the same name as a ksh93 builtin command bound to /usr/bin and /bin,
> > and they had /usr/gnu/bin followed by /usr/bin or /bin on their path,
> > they would instead get the AT&T command,
> 
> ... that's not correct, see below...
> 
> > which would not be what they
> > expected.
> 
> Erm, no. Builtin commands which have a path prefix are used at the point
> when the shell searched the matching element in ${PATH}. If
> "/usr/gnu/bin" is in front of "/bin" (e.g. PATH=/usr/gnu/bin:/bin) then
> the GNU version will be used if there is any in "/usr/gnu/bin".

Yes, you're right, this is not a problem--thanks for correcting
of my misunderstanding.
> 
> ----
> 
> Bye,
> Roland
> 
> -- 
>   __ .  . __
>  (o.\ \/ /.o) roland.mainz at nrubsig.org
>   \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
>   /O /==\ O\  TEL +49 641 7950090
>  (;O/ \/ \O;)


Reply via email to