1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00

test/[: Improve error status > 1 (re: 7003aba4, cd2cf236, ef1f53b5)

As I got to know the code better, it now seems painfully obvious
that getting test/[ to issue an exit status >= 2 on error only
requires a simple check in sh_exit() in fault.c, which is called
whenever the shell issues an error message.
This commit is contained in:
Martijn Dekker 2021-11-22 06:13:25 +01:00
parent 8ced1daadf
commit 74730c8ac7
5 changed files with 5 additions and 25 deletions

View file

@ -83,20 +83,6 @@ static char *nxtarg(struct test*,int);
static int expr(struct test*,int);
static int e3(struct test*);
/*
* POSIX requires error status > 1 for test builtin.
* Since ksh 'test' can parse arithmetic expressions, the #define
* override is also needed in sh/arith.c and sh/streval.c
*/
int _ERROR_exit_b_test(int exitval)
{
if((sh.bltindata.bnode==SYSTEST || sh.bltindata.bnode==SYSBRACKET) && exitval < 2)
exitval = 2;
return(ERROR_exit(exitval));
}
#undef ERROR_exit
#define ERROR_exit(n) _ERROR_exit_b_test(n)
static int test_strmatch(Shell_t *shp,const char *str, const char *pat)
{
regoff_t match[2*(MATCH_MAX+1)],n;

View file

@ -462,6 +462,4 @@ extern const char e_dict[];
# define sh_stats(x)
#endif /* SHOPT_STATS */
extern int _ERROR_exit_b_test(int);
#endif

View file

@ -32,10 +32,6 @@
#include "variables.h"
#include "builtins.h"
/* POSIX requires error status > 1 if called from test builtin */
#undef ERROR_exit
#define ERROR_exit(n) _ERROR_exit_b_test(n)
#ifndef LLONG_MAX
#define LLONG_MAX LONG_MAX
#endif

View file

@ -513,7 +513,11 @@ void sh_exit(register int xno)
register struct checkpt *pp = (struct checkpt*)shp->jmplist;
register int sig=0;
register Sfio_t* pool;
shp->exitval=xno;
/* POSIX requires exit status >= 2 for error in 'test'/'[' */
if(xno == 1 && (shp->bltindata.bnode==SYSTEST || shp->bltindata.bnode==SYSBRACKET))
shp->exitval = 2;
else
shp->exitval = xno;
if(xno==SH_EXITSIG)
shp->exitval |= (sig=shp->lastsig);
if(pp && pp->mode>1)

View file

@ -37,10 +37,6 @@
#include "FEATURE/externs"
#include "defs.h" /* for sh.decomma */
/* POSIX requires error status > 1 if called from test builtin */
#undef ERROR_exit
#define ERROR_exit(n) _ERROR_exit_b_test(n)
#ifndef ERROR_dictionary
# define ERROR_dictionary(s) (s)
#endif