summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-05-17 15:10:46 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2010-05-17 15:10:46 (GMT)
commitcd10dc40e4057d081caf7676a4fed31977f2d94d (patch)
tree6f6de28aa7a182b1fb0fba9a607131d32a12d909
parentbbf1aa1eaf6278e23ae75914c8d9b9be4d0e28f5 (diff)
downloadbusybox-cd10dc40e4057d081caf7676a4fed31977f2d94d.tar.gz
busybox-cd10dc40e4057d081caf7676a4fed31977f2d94d.tar.bz2
ash: fix ". empty_file" exitcode. +5 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c8
-rwxr-xr-xshell/ash_test/ash-misc/source2.tests1
2 files changed, 5 insertions, 4 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 75bfbf1..ef5b2d4 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -12031,13 +12031,16 @@ dotcmd(int argc, char **argv)
{
struct strlist *sp;
volatile struct shparam saveparam;
- int status = 0;
for (sp = cmdenviron; sp; sp = sp->next)
setvareq(ckstrdup(sp->text), VSTRFIXED | VTEXTFIXED);
+ /* "false; . empty_file; echo $?" should print 0, not 1: */
+ exitstatus = 0;
+
if (argv[1]) { /* That's what SVR2 does */
char *fullname = find_dot_file(argv[1]);
+
argv += 2;
argc -= 2;
if (argc) { /* argc > 0, argv[0] != NULL */
@@ -12056,9 +12059,8 @@ dotcmd(int argc, char **argv)
freeparam(&shellparam);
shellparam = saveparam;
};
- status = exitstatus;
}
- return status;
+ return exitstatus;
}
static int FAST_FUNC
diff --git a/shell/ash_test/ash-misc/source2.tests b/shell/ash_test/ash-misc/source2.tests
index ab63247..1870cdf 100755
--- a/shell/ash_test/ash-misc/source2.tests
+++ b/shell/ash_test/ash-misc/source2.tests
@@ -1,4 +1,3 @@
-# Not fixed yet
false
. /dev/null
echo Done: $?