fix 'mksh -U -i' and 'mksh +U -i'
This commit is contained in:
		
							
								
								
									
										23
									
								
								check.t
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								check.t
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| # $MirOS: src/bin/mksh/check.t,v 1.345 2009/11/28 14:27:58 tg Exp $ | # $MirOS: src/bin/mksh/check.t,v 1.346 2009/11/28 15:38:28 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/11/22 | 	@(#)MIRBSD KSH R39 2009/11/28 | ||||||
| description: | description: | ||||||
| 	Check version of shell. | 	Check version of shell. | ||||||
| stdin: | stdin: | ||||||
| @@ -4832,6 +4832,25 @@ expected-stdout: | |||||||
| expected-stderr-pattern: | expected-stderr-pattern: | ||||||
| 	/(# )*/ | 	/(# )*/ | ||||||
| --- | --- | ||||||
|  | name: utf8opt-3 | ||||||
|  | description: | ||||||
|  | 	Ensure ±U on the command line is honoured | ||||||
|  | 	(this test may pass falsely depending on CPPFLAGS) | ||||||
|  | stdin: | ||||||
|  | 	export i=0 | ||||||
|  | 	code='if [[ $- = *U* ]]; then echo $i on; else echo $i off; fi' | ||||||
|  | 	let i++; "$__progname" -U -c "$code" | ||||||
|  | 	let i++; "$__progname" +U -c "$code" | ||||||
|  | 	let i++; "$__progname" -U -ic "$code" | ||||||
|  | 	let i++; "$__progname" +U -ic "$code" | ||||||
|  | 	echo $((++i)) done | ||||||
|  | expected-stdout: | ||||||
|  | 	1 on | ||||||
|  | 	2 off | ||||||
|  | 	3 on | ||||||
|  | 	4 off | ||||||
|  | 	5 done | ||||||
|  | --- | ||||||
| name: aliases-1 | name: aliases-1 | ||||||
| description: | description: | ||||||
| 	Check if built-in shell aliases are okay | 	Check if built-in shell aliases are okay | ||||||
|   | |||||||
							
								
								
									
										44
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								main.c
									
									
									
									
									
								
							| @@ -33,7 +33,7 @@ | |||||||
| #include <locale.h> | #include <locale.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| __RCSID("$MirOS: src/bin/mksh/main.c,v 1.154 2009/10/30 14:37:42 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/main.c,v 1.155 2009/11/28 15:38:29 tg Exp $"); | ||||||
|  |  | ||||||
| extern char **environ; | extern char **environ; | ||||||
|  |  | ||||||
| @@ -45,6 +45,7 @@ extern gid_t kshgid, kshegid; | |||||||
| static void reclaim(void); | static void reclaim(void); | ||||||
| static void remove_temps(struct temp *); | static void remove_temps(struct temp *); | ||||||
| void chvt_reinit(void); | void chvt_reinit(void); | ||||||
|  | Source *mksh_init(int, const char *[]); | ||||||
|  |  | ||||||
| static const char initifs[] = "IFS= \t\n"; | static const char initifs[] = "IFS= \t\n"; | ||||||
|  |  | ||||||
| @@ -99,13 +100,13 @@ chvt_reinit(void) | |||||||
| #endif | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| int | Source * | ||||||
| main(int argc, const char *argv[]) | mksh_init(int argc, const char *argv[]) | ||||||
| { | { | ||||||
| 	int argi, i; | 	int argi, i; | ||||||
| 	Source *s; | 	Source *s; | ||||||
| 	struct block *l; | 	struct block *l; | ||||||
| 	unsigned char restricted, errexit; | 	unsigned char restricted, errexit, utf_flag; | ||||||
| 	const char **wp; | 	const char **wp; | ||||||
| 	struct tbl *vp; | 	struct tbl *vp; | ||||||
| 	struct stat s_stdin; | 	struct stat s_stdin; | ||||||
| @@ -140,7 +141,7 @@ main(int argc, const char *argv[]) | |||||||
|  |  | ||||||
| 	argi = parse_args(argv, OF_FIRSTTIME, NULL); | 	argi = parse_args(argv, OF_FIRSTTIME, NULL); | ||||||
| 	if (argi < 0) | 	if (argi < 0) | ||||||
| 		exit(1); | 		return (NULL); | ||||||
|  |  | ||||||
| 	initvar(); | 	initvar(); | ||||||
|  |  | ||||||
| @@ -305,9 +306,16 @@ main(int argc, const char *argv[]) | |||||||
| #ifndef MKSH_UNEMPLOYED | #ifndef MKSH_UNEMPLOYED | ||||||
| 	Flag(FMONITOR) = 127; | 	Flag(FMONITOR) = 127; | ||||||
| #endif | #endif | ||||||
|  | 	/* this to note if utf-8 mode is set on command line (see below) */ | ||||||
|  | 	UTFMODE = 2; | ||||||
|  |  | ||||||
| 	argi = parse_args(argv, OF_CMDLINE, NULL); | 	argi = parse_args(argv, OF_CMDLINE, NULL); | ||||||
| 	if (argi < 0) | 	if (argi < 0) | ||||||
| 		exit(1); | 		return (NULL); | ||||||
|  |  | ||||||
|  | 	/* process this later only, default to off (hysterical raisins) */ | ||||||
|  | 	utf_flag = UTFMODE; | ||||||
|  | 	UTFMODE = 0; | ||||||
|  |  | ||||||
| 	if (Flag(FCOMMAND)) { | 	if (Flag(FCOMMAND)) { | ||||||
| 		s = pushs(SSTRING, ATEMP); | 		s = pushs(SSTRING, ATEMP); | ||||||
| @@ -355,13 +363,15 @@ main(int argc, const char *argv[]) | |||||||
|  |  | ||||||
| 	/* initialise job control */ | 	/* initialise job control */ | ||||||
| 	j_init(); | 	j_init(); | ||||||
|  | 	/* set: 0/1; unset: 2->0 */ | ||||||
|  | 	UTFMODE = utf_flag & 1; | ||||||
| 	/* Do this after j_init(), as tty_fd is not initialised until then */ | 	/* Do this after j_init(), as tty_fd is not initialised until then */ | ||||||
| 	if (Flag(FTALKING)) { | 	if (Flag(FTALKING)) { | ||||||
|  | 		if (utf_flag == 2) { | ||||||
| #ifndef MKSH_ASSUME_UTF8 | #ifndef MKSH_ASSUME_UTF8 | ||||||
| #define isuc(x)	(((x) != NULL) && \ | #define isuc(x)	(((x) != NULL) && \ | ||||||
| 		    (stristr((x), "UTF-8") || stristr((x), "utf8"))) | 		    (stristr((x), "UTF-8") || stristr((x), "utf8"))) | ||||||
| 		/* Check if we're in a UTF-8 locale */ | 		/* Check if we're in a UTF-8 locale */ | ||||||
| 		if (!UTFMODE) { |  | ||||||
| 			const char *ccp; | 			const char *ccp; | ||||||
|  |  | ||||||
| #if HAVE_SETLOCALE_CTYPE | #if HAVE_SETLOCALE_CTYPE | ||||||
| @@ -379,13 +389,13 @@ main(int argc, const char *argv[]) | |||||||
| 				ccp = str_val(global("LANG")); | 				ccp = str_val(global("LANG")); | ||||||
| #endif | #endif | ||||||
| 			UTFMODE = isuc(ccp); | 			UTFMODE = isuc(ccp); | ||||||
| 		} |  | ||||||
| #undef isuc | #undef isuc | ||||||
| #elif MKSH_ASSUME_UTF8 | #elif MKSH_ASSUME_UTF8 | ||||||
| 		UTFMODE = 1; | 			UTFMODE = 1; | ||||||
| #else | #else | ||||||
| 		UTFMODE = 0; | 			UTFMODE = 0; | ||||||
| #endif | #endif | ||||||
|  | 		} | ||||||
| 		x_init(); | 		x_init(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -443,8 +453,18 @@ main(int argc, const char *argv[]) | |||||||
| 	} else | 	} else | ||||||
| 		Flag(FTRACKALL) = 1;	/* set after ENV */ | 		Flag(FTRACKALL) = 1;	/* set after ENV */ | ||||||
|  |  | ||||||
| 	shell(s, true);	/* doesn't return */ | 	return (s); | ||||||
| 	return (0); | } | ||||||
|  |  | ||||||
|  | int | ||||||
|  | main(int argc, const char *argv[]) | ||||||
|  | { | ||||||
|  | 	Source *s; | ||||||
|  |  | ||||||
|  | 	if ((s = mksh_init(argc, argv))) | ||||||
|  | 		/* doesn’t return */ | ||||||
|  | 		shell(s, true); | ||||||
|  | 	return (1); | ||||||
| } | } | ||||||
|  |  | ||||||
| int | int | ||||||
|   | |||||||
							
								
								
									
										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.364 2009/11/28 14:28:02 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.365 2009/11/28 15:38:30 tg Exp $"); | ||||||
| #endif | #endif | ||||||
| #define MKSH_VERSION "R39 2009/11/22" | #define MKSH_VERSION "R39 2009/11/28" | ||||||
|  |  | ||||||
| #ifndef MKSH_INCLUDES_ONLY | #ifndef MKSH_INCLUDES_ONLY | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user