hush: fix bug 207 and "hush -c" parameter passing.

Now hush -c 'printf "%s\n" "$@"' (prints "\n")
 and hush -c 'printf "%s\n" "$@"' qwe asd (prints "asd\n")
 both work correctly
This commit is contained in:
Denis Vlasenko 2009-03-20 12:05:14 +00:00
parent 5368ad53e9
commit a8b6dff97f
3 changed files with 16 additions and 2 deletions

View File

@ -1219,8 +1219,13 @@ static int o_glob(o_string *o, int n)
* Otherwise, just finish current list[] and start new */
static int o_save_ptr(o_string *o, int n)
{
if (o->o_glob)
if (o->o_glob) { /* if globbing is requested */
/* If o->has_empty_slot, list[n] was already globbed
* (if it was requested back then when it was filled)
* so don't do that again! */
if (!o->has_empty_slot)
return o_glob(o, n); /* o_save_ptr_helper is inside */
}
return o_save_ptr_helper(o, n);
}
@ -4285,6 +4290,11 @@ int hush_main(int argc, char **argv)
switch (opt) {
case 'c':
G.global_argv = argv + optind;
if (!argv[optind]) {
/* -c 'script' (no params): prevent empty $0 */
*--G.global_argv = argv[0];
optind--;
} /* else -c 'script' PAR0 PAR1: $0 is PAR0 */
G.global_argc = argc - optind;
opt = parse_and_run_string(optarg, 0 /* parse_flag */);
goto final_return;

View File

@ -1,2 +1,3 @@
Should be printed
Should be printed
Empty:

View File

@ -12,3 +12,6 @@ for a in "$@"""; do echo Should not be printed; done
for a in """$@"; do echo Should not be printed; done
for a in """$@"''"$@"''; do echo Should not be printed; done
for a in ""; do echo Should be printed; done
# Bug 207: "$@" expands to nothing, and we erroneously glob "%s\\n" twice:
printf "Empty:%s\\n" "$@"