mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +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…
	
	Add table
		Add a link
		
	
		Reference in a new issue