From 1e6aba967ce2e1225e7ed566e5b83cbfb117b6b4 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 12 Apr 2004 19:12:13 +0000 Subject: [PATCH] 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 --- shell/ash.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/shell/ash.c b/shell/ash.c index 1a0e0aa6e..977ae4647 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;