diff options
author | Eric Andersen | 2004-04-12 19:12:13 +0000 |
---|---|---|
committer | Eric Andersen | 2004-04-12 19:12:13 +0000 |
commit | 1e6aba967ce2e1225e7ed566e5b83cbfb117b6b4 (patch) | |
tree | 41aac1a849ce4ffe49359736f0c3419a8bf4489e /shell/ash.c | |
parent | e3efc9230c2f192e2738cee733c6d4fa20a2be2a (diff) | |
download | busybox-1e6aba967ce2e1225e7ed566e5b83cbfb117b6b4.zip busybox-1e6aba967ce2e1225e7ed566e5b83cbfb117b6b4.tar.gz |
Peter Milne writes:
Just upgraded from 0.6 to 1.00-pre8
Dot command handling handled args correctly (same as bash) in 0.60,
but failed in 1.00:
I fixed this by reverting the dotcmd function back to previous 0.60
instantiation,
please consider using the older version.
Thanks
Peter
Diffstat (limited to 'shell/ash.c')
-rw-r--r-- | shell/ash.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/shell/ash.c b/shell/ash.c index 1a0e0aa..977ae46 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -8125,21 +8125,40 @@ find_dot_file(char *name) /* NOTREACHED */ } -int -dotcmd(int argc, char **argv) +static int dotcmd(int argc, char **argv) { + struct strlist *sp; + volatile struct shparam saveparam; + exitstatus = 0; - if (argc >= 2) { /* That's what SVR2 does */ + for (sp = cmdenviron; sp; sp = sp->next) + setvareq(bb_xstrdup(sp->text), VSTRFIXED | VTEXTFIXED); + + if (argc >= 2) { /* That's what SVR2 does */ char *fullname; struct stackmark smark; setstackmark(&smark); fullname = find_dot_file(argv[1]); + + if (argc > 2) { + saveparam = shellparam; + shellparam.malloc = 0; + shellparam.nparam = argc - 2; + shellparam.p = argv + 2; + }; + setinputfile(fullname, 1); commandname = fullname; cmdloop(0); popfile(); + + if (argc > 2) { + freeparam(&shellparam); + shellparam = saveparam; + }; + popstackmark(&smark); } return exitstatus; |