ash: disable check for "good" function name, bash does not check this
No binary (build failed)
—
(log yok)
| @@ -12123,18 +12123,19 @@ simplecmd(void) | |
| if (args && app == &args->narg.next | |
| && !vars && !redir | |
| ) { | |
| - | struct builtincmd *bcmd; |
| - | const char *name; |
| + | // struct builtincmd *bcmd; |
| + | // const char *name; |
| /* We have a function */ | |
| if (IF_BASH_FUNCTION(!function_flag &&) readtoken() != TRP) | |
| raise_error_unexpected_syntax(TRP); | |
| - | name = n->narg.text; |
| - | if (!goodname(name) |
| - | || ((bcmd = find_builtin(name)) && IS_BUILTIN_SPECIAL(bcmd)) |
| - | ) { |
| - | raise_error_syntax("bad function name"); |
| - | } |
| + | //bash allows functions named "123", "..", "return"! |
| + | // name = n->narg.text; |
| + | // if (!goodname(name) |
| + | // || ((bcmd = find_builtin(name)) && IS_BUILTIN_SPECIAL(bcmd)) |
| + | // ) { |
| + | // raise_error_syntax("bad function name"); |
| + | // } |
| n->type = NDEFUN; | |
| checkkwd = CHKNL | CHKKWD | CHKALIAS; | |
| n->ndefun.text = n->narg.text; | |
| @@ -4306,7 +4306,7 @@ static int done_word(struct parse_context *ctx) | |
| || endofname(command->argv[0])[0] != '\0' | |
| ) { | |
| /* bash says just "not a valid identifier" */ | |
| - | syntax_error("bad variable name in for"); |
| + | syntax_error("bad for loop variable"); |
| return 1; | |
| } | |
| /* Force FOR to have just one word (variable name) */ | |
| @@ -4683,6 +4683,11 @@ static int parse_group(struct parse_context *ctx, | |
| syntax_error_unexpected_ch(ch); | |
| return -1; | |
| } | |
| + | //bash allows functions named "123", "..", "return"! |
| + | // if (endofname(command->argv[0])[0] != '\0') { |
| + | // syntax_error("bad function name"); |
| + | // return -1; |
| + | // } |
| nommu_addchr(&ctx->as_string, ch); | |
| command->cmd_type = CMD_FUNCDEF; | |
| goto skip; | |
| @@ -1,5 +1,5 @@ | |
| - | readonly a=A |
| - | readonly b=B |
| + | readonly a='A' |
| + | readonly b='B' |
| Ok:0 | |
| hush: a=A: readonly variable | |