• back out the EXPRSUB change
• optimise some code • split testcase into two, one with expected-fail
This commit is contained in:
		
							
								
								
									
										21
									
								
								eval.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								eval.c
									
									
									
									
									
								
							| @@ -22,7 +22,7 @@ | ||||
|  | ||||
| #include "sh.h" | ||||
|  | ||||
| __RCSID("$MirOS: src/bin/mksh/eval.c,v 1.96 2011/03/12 21:41:13 tg Exp $"); | ||||
| __RCSID("$MirOS: src/bin/mksh/eval.c,v 1.97 2011/03/12 23:04:45 tg Exp $"); | ||||
|  | ||||
| /* | ||||
|  * string expansion | ||||
| @@ -291,19 +291,15 @@ expand(const char *cp,	/* input word */ | ||||
| 					newlines = 0; | ||||
| 				} | ||||
| 				continue; | ||||
| 			case EXPRSUB: { | ||||
| 				char *xp; | ||||
|  | ||||
| 				xp = wdstrip(sp, true, false); | ||||
| 				sp = wdscan(sp, EOS); | ||||
| 			case EXPRSUB: | ||||
| 				word = IFS_WORD; | ||||
| 				tilde_ok = 0; | ||||
| 				if (f & DONTRUNCOMMAND) { | ||||
| 					c = strlen(xp); | ||||
| 					*dp++ = '$'; *dp++ = '('; *dp++ = '('; | ||||
| 					XcheckN(ds, dp, c + 2); | ||||
| 					memcpy(dp, xp, c); | ||||
| 					dp += c; | ||||
| 					while (*sp != '\0') { | ||||
| 						Xcheck(ds, dp); | ||||
| 						*dp++ = *sp++; | ||||
| 					} | ||||
| 					*dp++ = ')'; *dp++ = ')'; | ||||
| 				} else { | ||||
| 					struct tbl v; | ||||
| @@ -313,16 +309,15 @@ expand(const char *cp,	/* input word */ | ||||
| 					/* not default */ | ||||
| 					v.type = 10; | ||||
| 					v.name[0] = '\0'; | ||||
| 					v_evaluate(&v, substitute(xp, 0), | ||||
| 					v_evaluate(&v, substitute(sp, 0), | ||||
| 					    KSH_UNWIND_ERROR, true); | ||||
| 					sp = strnul(sp) + 1; | ||||
| 					for (p = str_val(&v); *p; ) { | ||||
| 						Xcheck(ds, dp); | ||||
| 						*dp++ = *p++; | ||||
| 					} | ||||
| 				} | ||||
| 				afree(xp, ATEMP); | ||||
| 				continue; | ||||
| 			} | ||||
| 			case OSUBST: { | ||||
| 				/* ${{#}var{:}[=+-?#%]word} */ | ||||
| 			/*- | ||||
|   | ||||
		Reference in New Issue
	
	Block a user