mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
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:
parent
8ced1daadf
commit
74730c8ac7
5 changed files with 5 additions and 25 deletions
|
@ -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;
|
||||
|
|
|
@ -462,6 +462,4 @@ extern const char e_dict[];
|
|||
# define sh_stats(x)
|
||||
#endif /* SHOPT_STATS */
|
||||
|
||||
extern int _ERROR_exit_b_test(int);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue