summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--shell/ash_test/ash-misc/source3.right2
-rwxr-xr-xshell/ash_test/ash-misc/source3.tests6
-rw-r--r--shell/hush.c2
-rw-r--r--shell/hush_test/hush-misc/source3.right2
-rwxr-xr-xshell/hush_test/hush-misc/source3.tests6
5 files changed, 18 insertions, 0 deletions
diff --git a/shell/ash_test/ash-misc/source3.right b/shell/ash_test/ash-misc/source3.right
new file mode 100644
index 000000000..bdf9001a5
--- /dev/null
+++ b/shell/ash_test/ash-misc/source3.right
@@ -0,0 +1,2 @@
+Zero:0
+Zero:0
diff --git a/shell/ash_test/ash-misc/source3.tests b/shell/ash_test/ash-misc/source3.tests
new file mode 100755
index 000000000..1abf156ed
--- /dev/null
+++ b/shell/ash_test/ash-misc/source3.tests
@@ -0,0 +1,6 @@
+# Test both empty file, and one-empty-line file
+echo >sourced1
+true >sourced2
+false; . ./sourced1; echo Zero:$?
+false; . ./sourced2; echo Zero:$?
+rm sourced1 sourced2
diff --git a/shell/hush.c b/shell/hush.c
index e2b0a15b8..5698de686 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -9156,6 +9156,8 @@ static int FAST_FUNC builtin_source(char **argv)
if (argv[1])
save_and_replace_G_args(&sv, argv);
+ /* "false; . ./empty_line; echo Zero:$?" should print 0 */
+ G.last_exitcode = 0;
parse_and_run_file(input);
fclose_and_forget(input);
diff --git a/shell/hush_test/hush-misc/source3.right b/shell/hush_test/hush-misc/source3.right
new file mode 100644
index 000000000..bdf9001a5
--- /dev/null
+++ b/shell/hush_test/hush-misc/source3.right
@@ -0,0 +1,2 @@
+Zero:0
+Zero:0
diff --git a/shell/hush_test/hush-misc/source3.tests b/shell/hush_test/hush-misc/source3.tests
new file mode 100755
index 000000000..1abf156ed
--- /dev/null
+++ b/shell/hush_test/hush-misc/source3.tests
@@ -0,0 +1,6 @@
+# Test both empty file, and one-empty-line file
+echo >sourced1
+true >sourced2
+false; . ./sourced1; echo Zero:$?
+false; . ./sourced2; echo Zero:$?
+rm sourced1 sourced2