From 0b500c932947aaf0ec979a2a1067d43a2dbf4eac Mon Sep 17 00:00:00 2001
From: andersen <andersen@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Date: Fri, 9 Mar 2001 20:34:46 +0000
Subject: Fixed a couple more cases.  $FOO/bar ${FOO} and such now work without
 wordexp.  Of course for stuff like ${1:-foo} you still need wordexp for them
 to work.  -Erik

git-svn-id: svn://busybox.net/trunk/busybox@2025 69ca8d6d-28ef-0310-b511-8ec308f3f277
---
 shell/lash.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

(limited to 'shell')

diff --git a/shell/lash.c b/shell/lash.c
index 34dca0449..8f19e526a 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -1014,7 +1014,6 @@ static int expand_arguments(char *command)
 	 * wordexp can't do for us, namely $? and $! */
 	src = command;
 	while((dst = strchr(src,'$')) != NULL){
-		printf("dollar '%s'\n", dst);
 		var = NULL;
 		switch(*(dst+1)) {
 			case '?':
@@ -1057,14 +1056,25 @@ static int expand_arguments(char *command)
 		} else {
 			/* Looks like an environment variable */
 			char delim_hold;
-			src=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.");
+			int num_skip_chars=1;
+			int dstlen = strlen(dst);
+			/* Is this a ${foo} type variable? */
+			if (dstlen >=2 && *(dst+1) == '{') {
+				src=strchr(dst+1, '}');
+				num_skip_chars=2;
+			} else {
+				src=strpbrk(dst+1, " \t~`!$^&*()=|\\[];\"'<>?./");
+			}
 			if (src == NULL) {
-				src = dst+strlen(dst);
+				src = dst+dstlen;
 			}
 			delim_hold=*src;
 			*src='\0';  /* temporary */
-			var = getenv(dst + 1);
+			var = getenv(dst + num_skip_chars);
 			*src=delim_hold;
+			if (num_skip_chars==2) {
+				src++;
+			}
 		}
 		if (var == NULL) {
 			/* Seems we got an un-expandable variable.  So delete it. */
-- 
cgit v1.2.3-55-g6feb