[Vm-dev] search order for plugins
subbukk
subbukk at gmail.com
Mon Apr 30 10:08:00 UTC 2007
On Saturday 28 April 2007 10:31 pm, Ian Piumarta wrote:
> Regardless, it's the caller that sets up argv[] for the child in
> execv*(). Bash empirically (read the source code) preserves
> precisely the command name typed by the user;
What you say is true - for binary executables. For scripts, see below.
>> it makes no attempt to
> rewrite argv[0] to include dir information inferred from searching
> PATH....
For scripts, it does pathname expansion, opens the file to detect shebang
interpreter and then passes the fullpath as $0 to the interp. Therefore, $0
in a shell script will contain the full pathname.
E.g.:
# echo 'echo $0' >/bin/x.sh && x.sh
/bin/x.sh
# cat >/tmp/x.c <<EOF
#include <stdio.h>
#include <unistd.h>
main(int argc, char *argv[])
{
printf("arg0 is %s\n", argv[0]);
execlp("x.sh", "x.sh", (char *)0);
}
EOF
# cc -o /bin/x.tmp /tmp/x.c && x.tmp
arg0 is x.tmp
/bin/x.sh
Relocatable packages like autoconf and ghostscript (gs-common) have been
using 'dirname $0' in their launcher scripts for a long time now, so the
idiom is portable.
Coming back to my suggestions - we could simplify squeak vm by moving path
logic into a launcher script. Invoked with the fullpath, the vm's plugin
probe does not have to fail so many times before hitting the right location.
Secondly, we could also unify the standalone launcher and plugin launcher.
Regards .. Subbu
More information about the Squeak-dev
mailing list
|