diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ash.c | 4 | ||||
-rw-r--r-- | shell/hush.c | 13 | ||||
-rw-r--r-- | shell/shell_common.c | 2 |
3 files changed, 15 insertions, 4 deletions
diff --git a/shell/ash.c b/shell/ash.c index 05c47950f..bcf7a3470 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -14161,6 +14161,10 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | |||
14161 | } | 14161 | } |
14162 | } | 14162 | } |
14163 | 14163 | ||
14164 | if (!ENABLE_ASH_BASH_COMPAT && !argptr) { | ||
14165 | bb_simple_error_msg("read: need variable name"); | ||
14166 | return 1; | ||
14167 | } | ||
14164 | params.argv = argptr; | 14168 | params.argv = argptr; |
14165 | params.setvar = setvar0; | 14169 | params.setvar = setvar0; |
14166 | params.ifs = bltinlookup("IFS"); /* can be NULL */ | 14170 | params.ifs = bltinlookup("IFS"); /* can be NULL */ |
diff --git a/shell/hush.c b/shell/hush.c index 144ad3edd..77921e11c 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -4251,7 +4251,7 @@ static int done_word(struct parse_context *ctx) | |||
4251 | || endofname(command->argv[0])[0] != '\0' | 4251 | || endofname(command->argv[0])[0] != '\0' |
4252 | ) { | 4252 | ) { |
4253 | /* bash says just "not a valid identifier" */ | 4253 | /* bash says just "not a valid identifier" */ |
4254 | syntax_error("not a valid identifier in for"); | 4254 | syntax_error("bad variable name in for"); |
4255 | return 1; | 4255 | return 1; |
4256 | } | 4256 | } |
4257 | /* Force FOR to have just one word (variable name) */ | 4257 | /* Force FOR to have just one word (variable name) */ |
@@ -10799,10 +10799,17 @@ static int FAST_FUNC builtin_read(char **argv) | |||
10799 | */ | 10799 | */ |
10800 | params.read_flags = getopt32(argv, | 10800 | params.read_flags = getopt32(argv, |
10801 | # if BASH_READ_D | 10801 | # if BASH_READ_D |
10802 | "!srn:p:t:u:d:", ¶ms.opt_n, ¶ms.opt_p, ¶ms.opt_t, ¶ms.opt_u, ¶ms.opt_d | 10802 | IF_NOT_HUSH_BASH_COMPAT("^") |
10803 | "!srn:p:t:u:d:" IF_NOT_HUSH_BASH_COMPAT("\0" "-1"/*min 1 arg*/), | ||
10804 | ¶ms.opt_n, ¶ms.opt_p, ¶ms.opt_t, ¶ms.opt_u, ¶ms.opt_d | ||
10803 | # else | 10805 | # else |
10804 | "!srn:p:t:u:", ¶ms.opt_n, ¶ms.opt_p, ¶ms.opt_t, ¶ms.opt_u | 10806 | IF_NOT_HUSH_BASH_COMPAT("^") |
10807 | "!srn:p:t:u:" IF_NOT_HUSH_BASH_COMPAT("\0" "-1"/*min 1 arg*/), | ||
10808 | ¶ms.opt_n, ¶ms.opt_p, ¶ms.opt_t, ¶ms.opt_u | ||
10805 | # endif | 10809 | # endif |
10810 | //TODO: print "read: need variable name" | ||
10811 | //for the case of !BASH "read" with no args (now it fails silently) | ||
10812 | //(or maybe extend getopt32() to emit a message if "-1" fails) | ||
10806 | ); | 10813 | ); |
10807 | if ((uint32_t)params.read_flags == (uint32_t)-1) | 10814 | if ((uint32_t)params.read_flags == (uint32_t)-1) |
10808 | return EXIT_FAILURE; | 10815 | return EXIT_FAILURE; |
diff --git a/shell/shell_common.c b/shell/shell_common.c index e3d6783b5..2e36d9208 100644 --- a/shell/shell_common.c +++ b/shell/shell_common.c | |||
@@ -59,7 +59,7 @@ shell_builtin_read(struct builtin_read_params *params) | |||
59 | while (*pp) { | 59 | while (*pp) { |
60 | if (endofname(*pp)[0] != '\0') { | 60 | if (endofname(*pp)[0] != '\0') { |
61 | /* Mimic bash message */ | 61 | /* Mimic bash message */ |
62 | bb_error_msg("read: '%s': not a valid identifier", *pp); | 62 | bb_error_msg("read: '%s': bad variable name", *pp); |
63 | return (const char *)(uintptr_t)1; | 63 | return (const char *)(uintptr_t)1; |
64 | } | 64 | } |
65 | pp++; | 65 | pp++; |