another ksh93 feature: test -o ?foo (almost zero cost)
This commit is contained in:
		
							
								
								
									
										45
									
								
								check.t
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								check.t
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| # $MirOS: src/bin/mksh/check.t,v 1.304 2009/09/06 17:55:53 tg Exp $ | # $MirOS: src/bin/mksh/check.t,v 1.305 2009/09/07 17:24:47 tg Exp $ | ||||||
| # $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $ | # $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $ | ||||||
| # $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $ | # $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $ | ||||||
| # $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $ | # $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $ | ||||||
| @@ -25,7 +25,7 @@ | |||||||
| # http://www.research.att.com/~gsf/public/ifs.sh | # http://www.research.att.com/~gsf/public/ifs.sh | ||||||
|  |  | ||||||
| expected-stdout: | expected-stdout: | ||||||
| 	@(#)MIRBSD KSH R39 2009/09/06 | 	@(#)MIRBSD KSH R39 2009/09/07 | ||||||
| description: | description: | ||||||
| 	Check version of shell. | 	Check version of shell. | ||||||
| stdin: | stdin: | ||||||
| @@ -4357,6 +4357,47 @@ stdin: | |||||||
| expected-stdout: | expected-stdout: | ||||||
| 	-e 0 | 	-e 0 | ||||||
| --- | --- | ||||||
|  | name: test-option-1 | ||||||
|  | description: | ||||||
|  | 	Test the test -o operator | ||||||
|  | stdin: | ||||||
|  | 	runtest() { | ||||||
|  | 		test -o $1; echo $? | ||||||
|  | 		[ -o $1 ]; echo $? | ||||||
|  | 		[[ -o $1 ]]; echo $? | ||||||
|  | 	} | ||||||
|  | 	if_test() { | ||||||
|  | 		test -o $1 -o -o !$1; echo $? | ||||||
|  | 		[ -o $1 -o -o !$1 ]; echo $? | ||||||
|  | 		[[ -o $1 || -o !$1 ]]; echo $? | ||||||
|  | 		test -o ?$1; echo $? | ||||||
|  | 	} | ||||||
|  | 	echo 0y $(if_test utf8-mode) = | ||||||
|  | 	echo 0n $(if_test utf8-hack) = | ||||||
|  | 	echo 1= $(runtest utf8-hack) = | ||||||
|  | 	echo 2= $(runtest !utf8-hack) = | ||||||
|  | 	echo 3= $(runtest ?utf8-hack) = | ||||||
|  | 	set +U | ||||||
|  | 	echo 1+ $(runtest utf8-mode) = | ||||||
|  | 	echo 2+ $(runtest !utf8-mode) = | ||||||
|  | 	echo 3+ $(runtest ?utf8-mode) = | ||||||
|  | 	set -U | ||||||
|  | 	echo 1- $(runtest utf8-mode) = | ||||||
|  | 	echo 2- $(runtest !utf8-mode) = | ||||||
|  | 	echo 3- $(runtest ?utf8-mode) = | ||||||
|  | expected-stdout: | ||||||
|  | 	0y 0 0 0 0 = | ||||||
|  | 	0n 1 1 1 1 = | ||||||
|  | 	1= 1 1 1 = | ||||||
|  | 	2= 1 1 1 = | ||||||
|  | 	3= 1 1 1 = | ||||||
|  | 	1+ 1 1 1 = | ||||||
|  | 	2+ 0 0 0 = | ||||||
|  | 	3+ 0 0 0 = | ||||||
|  | 	1- 0 0 0 = | ||||||
|  | 	2- 1 1 1 = | ||||||
|  | 	3- 0 0 0 = | ||||||
|  | --- | ||||||
| name: mkshrc-1 | name: mkshrc-1 | ||||||
| description: | description: | ||||||
| 	Check that ~/.mkshrc works correctly. | 	Check that ~/.mkshrc works correctly. | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								funcs.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								funcs.c
									
									
									
									
									
								
							| @@ -25,7 +25,7 @@ | |||||||
|  |  | ||||||
| #include "sh.h" | #include "sh.h" | ||||||
|  |  | ||||||
| __RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.129 2009/09/06 17:42:12 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.130 2009/09/07 17:24:48 tg Exp $"); | ||||||
|  |  | ||||||
| #if HAVE_KILLPG | #if HAVE_KILLPG | ||||||
| /* | /* | ||||||
| @@ -2782,12 +2782,11 @@ test_eval(Test_env *te, Test_op op, const char *opnd1, const char *opnd2, | |||||||
| 	case TO_STZER: /* -z */ | 	case TO_STZER: /* -z */ | ||||||
| 		return (*opnd1 == '\0'); | 		return (*opnd1 == '\0'); | ||||||
| 	case TO_OPTION: /* -o */ | 	case TO_OPTION: /* -o */ | ||||||
| 		if ((i = *opnd1 == '!')) | 		if ((i = *opnd1) == '!' || i == '?') | ||||||
| 			opnd1++; | 			opnd1++; | ||||||
| 		if ((k = option(opnd1)) == (size_t)-1) | 		if ((k = option(opnd1)) == (size_t)-1) | ||||||
| 			return (0); | 			return (0); | ||||||
| 		s = Flag(k); | 		return (i == '?' ? 1 : i == '!' ? !Flag(k) : Flag(k)); | ||||||
| 		return (i ? !s : s); |  | ||||||
| 	case TO_FILRD: /* -r */ | 	case TO_FILRD: /* -r */ | ||||||
| 		return (test_eaccess(opnd1, R_OK) == 0); | 		return (test_eaccess(opnd1, R_OK) == 0); | ||||||
| 	case TO_FILWR: /* -w */ | 	case TO_FILWR: /* -w */ | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								mksh.1
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								mksh.1
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| .\" $MirOS: src/bin/mksh/mksh.1,v 1.183 2009/09/06 18:17:51 tg Exp $ | .\" $MirOS: src/bin/mksh/mksh.1,v 1.184 2009/09/07 17:24:49 tg Exp $ | ||||||
| .\" $OpenBSD: ksh.1,v 1.129 2009/05/28 06:09:06 jmc Exp $ | .\" $OpenBSD: ksh.1,v 1.129 2009/05/28 06:09:06 jmc Exp $ | ||||||
| .\"- | .\"- | ||||||
| .\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 | .\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 | ||||||
| @@ -48,7 +48,7 @@ | |||||||
| .el .xD \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 | .el .xD \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 | ||||||
| .. | .. | ||||||
| .\"- | .\"- | ||||||
| .Dd $Mdocdate: September 6 2009 $ | .Dd $Mdocdate: September 7 2009 $ | ||||||
| .Dt MKSH 1 | .Dt MKSH 1 | ||||||
| .Os MirBSD | .Os MirBSD | ||||||
| .Sh NAME | .Sh NAME | ||||||
| @@ -3882,6 +3882,9 @@ the test is negated; the test always fails if | |||||||
| doesn't exist (so [ \-o foo \-o \-o !foo ] returns true if and only if option | doesn't exist (so [ \-o foo \-o \-o !foo ] returns true if and only if option | ||||||
| .Ar foo | .Ar foo | ||||||
| exists). | exists). | ||||||
|  | The same can be achieved with [ \-o ?foo ] like in | ||||||
|  | .At | ||||||
|  | .Nm ksh93 . | ||||||
| .It Fl p Ar file | .It Fl p Ar file | ||||||
| .Ar file | .Ar file | ||||||
| is a named pipe. | is a named pipe. | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								sh.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								sh.h
									
									
									
									
									
								
							| @@ -134,9 +134,9 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef EXTERN | #ifdef EXTERN | ||||||
| __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.339 2009/09/06 17:55:55 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.340 2009/09/07 17:24:49 tg Exp $"); | ||||||
| #endif | #endif | ||||||
| #define MKSH_VERSION "R39 2009/09/06" | #define MKSH_VERSION "R39 2009/09/07" | ||||||
|  |  | ||||||
| #ifndef MKSH_INCLUDES_ONLY | #ifndef MKSH_INCLUDES_ONLY | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user