hush: source builtin should override $N only if it has args

function                                             old     new   delta
builtin_source                                       174     184     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2013-03-17 14:11:04 +01:00
parent 4ef1439c59
commit 88b532d59a
3 changed files with 19 additions and 2 deletions

View File

@ -8880,6 +8880,9 @@ static int FAST_FUNC builtin_source(char **argv)
free(arg_path);
if (!input) {
/* bb_perror_msg("%s", *argv); - done by fopen_or_warn */
/* POSIX: non-interactive shell should abort here,
* not merely fail. So far no one complained :)
*/
return EXIT_FAILURE;
}
close_on_exec_on(fileno(input));
@ -8889,12 +8892,14 @@ static int FAST_FUNC builtin_source(char **argv)
/* "we are inside sourced file, ok to use return" */
G.flag_return_in_progress = -1;
#endif
save_and_replace_G_args(&sv, argv);
if (argv[1])
save_and_replace_G_args(&sv, argv);
parse_and_run_file(input);
fclose(input);
restore_G_args(&sv, argv);
if (argv[1])
restore_G_args(&sv, argv);
#if ENABLE_HUSH_FUNCTIONS
G.flag_return_in_progress = sv_flg;
#endif

View File

@ -0,0 +1,4 @@
0:arg0 1:arg1 2:arg2
Ok1:0
0:arg0 1:q 2:w
Ok2:0

View File

@ -0,0 +1,8 @@
echo 'echo "0:$0 1:$1 2:$2"' >sourced1
set -- 1 2 3
"$THIS_SH" -c '. ./sourced1' arg0 arg1 arg2
echo Ok1:$?
"$THIS_SH" -c '. ./sourced1 q w e' arg0 arg1 arg2
echo Ok2:$?
rm sourced1