mirror of
https://github.com/sheumann/hush.git
synced 2025-02-12 21:30:37 +00:00
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:
parent
5368ad53e9
commit
a8b6dff97f
12
shell/hush.c
12
shell/hush.c
@ -1219,8 +1219,13 @@ static int o_glob(o_string *o, int n)
|
|||||||
* Otherwise, just finish current list[] and start new */
|
* Otherwise, just finish current list[] and start new */
|
||||||
static int o_save_ptr(o_string *o, int n)
|
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_glob(o, n); /* o_save_ptr_helper is inside */
|
||||||
|
}
|
||||||
return o_save_ptr_helper(o, n);
|
return o_save_ptr_helper(o, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4285,6 +4290,11 @@ int hush_main(int argc, char **argv)
|
|||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'c':
|
case 'c':
|
||||||
G.global_argv = argv + optind;
|
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;
|
G.global_argc = argc - optind;
|
||||||
opt = parse_and_run_string(optarg, 0 /* parse_flag */);
|
opt = parse_and_run_string(optarg, 0 /* parse_flag */);
|
||||||
goto final_return;
|
goto final_return;
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
Should be printed
|
Should be printed
|
||||||
Should be printed
|
Should be printed
|
||||||
|
Empty:
|
||||||
|
@ -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 not be printed; done
|
for a in """$@"''"$@"''; do echo Should not be printed; done
|
||||||
for a in ""; do echo Should 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" "$@"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user