diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/builtin.c | 9 | ||||
-rw-r--r-- | Src/parse.c | 6 |
2 files changed, 13 insertions, 2 deletions
diff --git a/Src/builtin.c b/Src/builtin.c index 8ded1c131..299ad3758 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -5472,7 +5472,7 @@ zread(int izle, int *readchar) /* holds arguments for testlex() */ /**/ -char **testargs; +char **testargs, **curtestarg; /* test, [: the old-style general purpose logical expression builtin */ @@ -5483,7 +5483,7 @@ testlex(void) if (tok == LEXERR) return; - tokstr = *testargs; + tokstr = *(curtestarg = testargs); if (!*testargs) { /* if tok is already zero, reading past the end: error */ tok = tok ? NULLTOK : LEXERR; @@ -5557,6 +5557,11 @@ bin_test(char *name, char **argv, UNUSED(Options ops), int func) return 1; } + if (*curtestarg) { + zwarnnam(name, "too many arguments"); + return 1; + } + /* syntax is OK, so evaluate */ state.prog = prog; diff --git a/Src/parse.c b/Src/parse.c index 30f3abe50..af3cba9d3 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -537,6 +537,12 @@ parse_list(void) return bld_eprog(); } +/* + * This entry point is only used for bin_test, our attempt to + * provide compatibility with /bin/[ and /bin/test. Hence + * at this point condlex should always be set to testlex. + */ + /**/ mod_export Eprog parse_cond(void) |