do implement quoting, as ${foo@Q} though, as hommage at mirmake
dedicate this “release” to Andi and use tomorrow’s (UTC) day for version, to cover up my debian fuckup
This commit is contained in:
		
							
								
								
									
										17
									
								
								eval.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								eval.c
									
									
									
									
									
								
							| @@ -23,7 +23,7 @@ | ||||
|  | ||||
| #include "sh.h" | ||||
|  | ||||
| __RCSID("$MirOS: src/bin/mksh/eval.c,v 1.120 2012/06/28 20:03:20 tg Exp $"); | ||||
| __RCSID("$MirOS: src/bin/mksh/eval.c,v 1.121 2012/07/20 23:22:10 tg Exp $"); | ||||
|  | ||||
| /* | ||||
|  * string expansion | ||||
| @@ -406,6 +406,15 @@ expand(const char *cp,	/* input word */ | ||||
| 						    (unsigned int)h); | ||||
| 						break; | ||||
| 					} | ||||
| 					case 0x100 | 'Q': | ||||
| 					    { | ||||
| 						struct shf shf; | ||||
|  | ||||
| 						shf_sopen(NULL, 0, SHF_WR|SHF_DYNAMIC, &shf); | ||||
| 						print_value_quoted(&shf, str_val(st->var)); | ||||
| 						x.str = shf_sclose(&shf); | ||||
| 						break; | ||||
| 					} | ||||
| 					case '0': { | ||||
| 						char *beg, *mid, *end, *stg; | ||||
| 						mksh_ari_t from = 0, num = -1, flen, finc = 0; | ||||
| @@ -734,6 +743,7 @@ expand(const char *cp,	/* input word */ | ||||
| 				case '0': | ||||
| 				case '/': | ||||
| 				case 0x100 | '#': | ||||
| 				case 0x100 | 'Q': | ||||
| 					dp = Xrestpos(ds, dp, st->base); | ||||
| 					type = XSUB; | ||||
| 					if (f&DOBLANK) | ||||
| @@ -1161,6 +1171,7 @@ varsub(Expand *xp, const char *sp, const char *word, | ||||
| 		case '0': | ||||
| 		case '/': | ||||
| 		case 0x100 | '#': | ||||
| 		case 0x100 | 'Q': | ||||
| 			return (-1); | ||||
| 		} | ||||
| 		if (e->loc->argc == 0) { | ||||
| @@ -1188,6 +1199,7 @@ varsub(Expand *xp, const char *sp, const char *word, | ||||
| 			case '0': | ||||
| 			case '/': | ||||
| 			case 0x100 | '#': | ||||
| 			case 0x100 | 'Q': | ||||
| 				return (-1); | ||||
| 			} | ||||
| 			XPinit(wv, 32); | ||||
| @@ -1244,7 +1256,8 @@ varsub(Expand *xp, const char *sp, const char *word, | ||||
| 	if (((stype < 0x100) && (ctype(c, C_SUBOP2) || c == '/' || | ||||
| 	    (((stype&0x80) ? *xp->str=='\0' : xp->str==null) ? /* undef? */ | ||||
| 	    c == '=' || c == '-' || c == '?' : c == '+'))) || | ||||
| 	    stype == (0x80 | '0') || stype == (0x100 | '#')) | ||||
| 	    stype == (0x80 | '0') || stype == (0x100 | '#') || | ||||
| 	    stype == (0x100 | 'Q')) | ||||
| 		/* expand word instead of variable value */ | ||||
| 		state = XBASE; | ||||
| 	if (Flag(FNOUNSET) && xp->str == null && !zero_ok && | ||||
|   | ||||
		Reference in New Issue
	
	Block a user