• bump patchlevel to today’s
• while here, reformat 'struct tbl' comment-wise and placement-wise and drop the Tflag typedef • while here, write regression test for the "global" built-in, which does what typeset is supposed to do except that it doubles as "local"
This commit is contained in:
		
							
								
								
									
										38
									
								
								check.t
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								check.t
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| # $MirOS: src/bin/mksh/check.t,v 1.470 2011/07/02 17:57:37 tg Exp $ | # $MirOS: src/bin/mksh/check.t,v 1.471 2011/07/05 20:12:15 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 R40 2011/07/02 | 	@(#)MIRBSD KSH R40 2011/07/05 | ||||||
| description: | description: | ||||||
| 	Check version of shell. | 	Check version of shell. | ||||||
| stdin: | stdin: | ||||||
| @@ -5710,6 +5710,40 @@ expected-stdout-pattern: | |||||||
| expected-stderr-pattern: | expected-stderr-pattern: | ||||||
| 	/^X*$/ | 	/^X*$/ | ||||||
| --- | --- | ||||||
|  | name: typeset-1 | ||||||
|  | description: | ||||||
|  | 	Check that global does what typeset is supposed to do | ||||||
|  | stdin: | ||||||
|  | 	set -A arrfoo 65 | ||||||
|  | 	foo() { | ||||||
|  | 		global -Uui16 arrfoo[*] | ||||||
|  | 	} | ||||||
|  | 	echo before ${arrfoo[0]} . | ||||||
|  | 	foo | ||||||
|  | 	echo after ${arrfoo[0]} . | ||||||
|  | 	set -A arrbar 65 | ||||||
|  | 	bar() { | ||||||
|  | 		echo inside before ${arrbar[0]} . | ||||||
|  | 		arrbar[0]=97 | ||||||
|  | 		echo inside changed ${arrbar[0]} . | ||||||
|  | 		global -Uui16 arrbar[*] | ||||||
|  | 		echo inside typeset ${arrbar[0]} . | ||||||
|  | 		arrbar[0]=48 | ||||||
|  | 		echo inside changed ${arrbar[0]} . | ||||||
|  | 	} | ||||||
|  | 	echo before ${arrbar[0]} . | ||||||
|  | 	bar | ||||||
|  | 	echo after ${arrbar[0]} . | ||||||
|  | expected-stdout: | ||||||
|  | 	before 65 . | ||||||
|  | 	after 16#41 . | ||||||
|  | 	before 65 . | ||||||
|  | 	inside before 65 . | ||||||
|  | 	inside changed 97 . | ||||||
|  | 	inside typeset 16#61 . | ||||||
|  | 	inside changed 16#30 . | ||||||
|  | 	after 16#30 . | ||||||
|  | --- | ||||||
| name: typeset-padding-1 | name: typeset-padding-1 | ||||||
| description: | description: | ||||||
| 	Check if left/right justification works as per TFM | 	Check if left/right justification works as per TFM | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								exec.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								exec.c
									
									
									
									
									
								
							| @@ -22,7 +22,7 @@ | |||||||
|  |  | ||||||
| #include "sh.h" | #include "sh.h" | ||||||
|  |  | ||||||
| __RCSID("$MirOS: src/bin/mksh/exec.c,v 1.92 2011/05/29 02:18:51 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/exec.c,v 1.93 2011/07/05 20:12:17 tg Exp $"); | ||||||
|  |  | ||||||
| #ifndef MKSH_DEFAULT_EXECSHELL | #ifndef MKSH_DEFAULT_EXECSHELL | ||||||
| #define MKSH_DEFAULT_EXECSHELL	"/bin/sh" | #define MKSH_DEFAULT_EXECSHELL	"/bin/sh" | ||||||
| @@ -669,7 +669,7 @@ comexec(struct op *t, struct tbl * volatile tp, const char **ap, | |||||||
| 	/* function call */ | 	/* function call */ | ||||||
| 	case CFUNC: { | 	case CFUNC: { | ||||||
| 		volatile unsigned char old_xflag; | 		volatile unsigned char old_xflag; | ||||||
| 		volatile Tflag old_inuse; | 		volatile uint32_t old_inuse; | ||||||
| 		const char * volatile old_kshname; | 		const char * volatile old_kshname; | ||||||
|  |  | ||||||
| 		if (!(tp->flag & ISSET)) { | 		if (!(tp->flag & ISSET)) { | ||||||
| @@ -1033,7 +1033,7 @@ const char * | |||||||
| builtin(const char *name, int (*func) (const char **)) | builtin(const char *name, int (*func) (const char **)) | ||||||
| { | { | ||||||
| 	struct tbl *tp; | 	struct tbl *tp; | ||||||
| 	Tflag flag; | 	uint32_t flag; | ||||||
|  |  | ||||||
| 	/* see if any flags should be set for this builtin */ | 	/* see if any flags should be set for this builtin */ | ||||||
| 	for (flag = 0; ; name++) { | 	for (flag = 0; ; name++) { | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								funcs.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								funcs.c
									
									
									
									
									
								
							| @@ -38,7 +38,7 @@ | |||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| __RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.192 2011/07/05 19:56:24 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.193 2011/07/05 20:12:18 tg Exp $"); | ||||||
|  |  | ||||||
| #if HAVE_KILLPG | #if HAVE_KILLPG | ||||||
| /* | /* | ||||||
| @@ -604,7 +604,7 @@ c_typeset(const char **wp) | |||||||
| { | { | ||||||
| 	struct block *l; | 	struct block *l; | ||||||
| 	struct tbl *vp, **p; | 	struct tbl *vp, **p; | ||||||
| 	Tflag fset = 0, fclr = 0, flag; | 	uint32_t fset = 0, fclr = 0, flag; | ||||||
| 	int thing = 0, field, base, optc; | 	int thing = 0, field, base, optc; | ||||||
| 	const char *opts; | 	const char *opts; | ||||||
| 	const char *fieldstr, *basestr; | 	const char *fieldstr, *basestr; | ||||||
| @@ -966,7 +966,7 @@ c_alias(const char **wp) | |||||||
| 	struct table *t = &aliases; | 	struct table *t = &aliases; | ||||||
| 	int rv = 0, prefix = 0; | 	int rv = 0, prefix = 0; | ||||||
| 	bool rflag = false, tflag, Uflag = false, pflag = false; | 	bool rflag = false, tflag, Uflag = false, pflag = false; | ||||||
| 	Tflag xflag = 0; | 	uint32_t xflag = 0; | ||||||
| 	int optc; | 	int optc; | ||||||
|  |  | ||||||
| 	builtin_opt.flags |= GF_PLUSOPT; | 	builtin_opt.flags |= GF_PLUSOPT; | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								sh.h
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								sh.h
									
									
									
									
									
								
							| @@ -151,9 +151,9 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef EXTERN | #ifdef EXTERN | ||||||
| __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.481 2011/07/02 17:57:40 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.482 2011/07/05 20:12:19 tg Exp $"); | ||||||
| #endif | #endif | ||||||
| #define MKSH_VERSION "R40 2011/07/02" | #define MKSH_VERSION "R40 2011/07/05" | ||||||
|  |  | ||||||
| #ifndef MKSH_INCLUDES_ONLY | #ifndef MKSH_INCLUDES_ONLY | ||||||
|  |  | ||||||
| @@ -344,9 +344,6 @@ extern int wcwidth(__WCHAR_TYPE__); | |||||||
| #define BIT(i)		(1 << (i)) | #define BIT(i)		(1 << (i)) | ||||||
| #define NELEM(a)	(sizeof(a) / sizeof((a)[0])) | #define NELEM(a)	(sizeof(a) / sizeof((a)[0])) | ||||||
|  |  | ||||||
| /* Table flag type - needs > 16 and < 32 bits */ |  | ||||||
| typedef int32_t Tflag; |  | ||||||
|  |  | ||||||
| /* arithmetics types */ | /* arithmetics types */ | ||||||
| typedef int32_t mksh_ari_t; | typedef int32_t mksh_ari_t; | ||||||
| typedef uint32_t mksh_uari_t; | typedef uint32_t mksh_uari_t; | ||||||
| @@ -843,7 +840,7 @@ EXTERN sigset_t		sm_default, sm_sigchld; | |||||||
| /* name of called builtin function (used by error functions) */ | /* name of called builtin function (used by error functions) */ | ||||||
| EXTERN const char *builtin_argv0; | EXTERN const char *builtin_argv0; | ||||||
| /* flags of called builtin (SPEC_BI, etc.) */ | /* flags of called builtin (SPEC_BI, etc.) */ | ||||||
| EXTERN Tflag builtin_flag; | EXTERN uint32_t builtin_flag; | ||||||
|  |  | ||||||
| /* current working directory */ | /* current working directory */ | ||||||
| EXTERN char	*current_wd; | EXTERN char	*current_wd; | ||||||
| @@ -946,15 +943,18 @@ struct table { | |||||||
| 	uint8_t tshift;		/* table size (2^tshift) */ | 	uint8_t tshift;		/* table size (2^tshift) */ | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct tbl {			/* table item */ | /* table item */ | ||||||
| 	Area *areap;		/* area to allocate from */ | struct tbl { | ||||||
|  | 	/* Area to allocate from */ | ||||||
|  | 	Area *areap; | ||||||
|  | 	/* value */ | ||||||
| 	union { | 	union { | ||||||
| 		char *s;			/* string */ | 		char *s;			/* string */ | ||||||
| 		mksh_ari_t i;			/* integer */ | 		mksh_ari_t i;			/* integer */ | ||||||
| 		mksh_uari_t u;			/* unsigned integer */ | 		mksh_uari_t u;			/* unsigned integer */ | ||||||
| 		int (*f)(const char **); /* int function */ | 		int (*f)(const char **);	/* built-in command */ | ||||||
| 		struct op *t;			/* "function" tree */ | 		struct op *t;			/* "function" tree */ | ||||||
| 	} val;			/* value */ | 	} val; | ||||||
| 	union { | 	union { | ||||||
| 		struct tbl *array;	/* array values */ | 		struct tbl *array;	/* array values */ | ||||||
| 		const char *fpath;	/* temporary path to undef function */ | 		const char *fpath;	/* temporary path to undef function */ | ||||||
| @@ -963,14 +963,20 @@ struct tbl {			/* table item */ | |||||||
| 		int field;		/* field with for -L/-R/-Z */ | 		int field;		/* field with for -L/-R/-Z */ | ||||||
| 		int errno_;		/* CEXEC/CTALIAS */ | 		int errno_;		/* CEXEC/CTALIAS */ | ||||||
| 	} u2; | 	} u2; | ||||||
| 	int type;		/* command type (see below), base (if INTEGER), |  | ||||||
| 				 * or offset from val.s of value (if EXPORT) */ |  | ||||||
| 	Tflag flag;		/* flags */ |  | ||||||
| 	union { | 	union { | ||||||
| 		uint32_t hval;		/* hash(name) */ | 		uint32_t hval;		/* hash(name) */ | ||||||
| 		uint32_t index;		/* index for an array */ | 		uint32_t index;		/* index for an array */ | ||||||
| 	} ua; | 	} ua; | ||||||
| 	char name[4];		/* name -- variable length */ | 	/* | ||||||
|  | 	 * command type (see below), base (if INTEGER), | ||||||
|  | 	 * offset from val.s of value (if EXPORT) | ||||||
|  | 	 */ | ||||||
|  | 	int type; | ||||||
|  | 	/* flags (see below) */ | ||||||
|  | 	uint32_t flag; | ||||||
|  |  | ||||||
|  | 	/* actually longer: name (variable length) */ | ||||||
|  | 	char name[4]; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /* common flag bits */ | /* common flag bits */ | ||||||
| @@ -1797,7 +1803,7 @@ int setstr(struct tbl *, const char *, int); | |||||||
| struct tbl *setint_v(struct tbl *, struct tbl *, bool); | struct tbl *setint_v(struct tbl *, struct tbl *, bool); | ||||||
| void setint(struct tbl *, mksh_ari_t); | void setint(struct tbl *, mksh_ari_t); | ||||||
| void setint_n(struct tbl *, mksh_ari_t); | void setint_n(struct tbl *, mksh_ari_t); | ||||||
| struct tbl *typeset(const char *, Tflag, Tflag, int, int) | struct tbl *typeset(const char *, uint32_t, uint32_t, int, int) | ||||||
|     MKSH_A_NONNULL((__nonnull__ (1))); |     MKSH_A_NONNULL((__nonnull__ (1))); | ||||||
| void unset(struct tbl *, int); | void unset(struct tbl *, int); | ||||||
| const char *skip_varname(const char *, int); | const char *skip_varname(const char *, int); | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								var.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								var.c
									
									
									
									
									
								
							| @@ -26,7 +26,7 @@ | |||||||
| #include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| __RCSID("$MirOS: src/bin/mksh/var.c,v 1.127 2011/07/02 17:57:41 tg Exp $"); | __RCSID("$MirOS: src/bin/mksh/var.c,v 1.128 2011/07/05 20:12:20 tg Exp $"); | ||||||
|  |  | ||||||
| /*- | /*- | ||||||
|  * Variables |  * Variables | ||||||
| @@ -687,7 +687,7 @@ exportprep(struct tbl *vp, const char *val) | |||||||
|  * UCASEV_AL), and optionally set its value if an assignment. |  * UCASEV_AL), and optionally set its value if an assignment. | ||||||
|  */ |  */ | ||||||
| struct tbl * | struct tbl * | ||||||
| typeset(const char *var, Tflag set, Tflag clr, int field, int base) | typeset(const char *var, uint32_t set, uint32_t clr, int field, int base) | ||||||
| { | { | ||||||
| 	struct tbl *vp; | 	struct tbl *vp; | ||||||
| 	struct tbl *vpbase, *t; | 	struct tbl *vpbase, *t; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user