summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorEric Andersen2004-04-12 19:12:13 +0000
committerEric Andersen2004-04-12 19:12:13 +0000
commit1e6aba967ce2e1225e7ed566e5b83cbfb117b6b4 (patch)
tree41aac1a849ce4ffe49359736f0c3419a8bf4489e /shell
parente3efc9230c2f192e2738cee733c6d4fa20a2be2a (diff)
downloadbusybox-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')
-rw-r--r--shell/ash.c25
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;