fix empty string interpolation bugs (Michael Teichgräber)
This commit is contained in:
parent
edd308cfa2
commit
6c4c5c5b95
2 changed files with 14 additions and 9 deletions
|
|
@ -97,12 +97,15 @@ nextword(char **s)
|
|||
Word *head, *tail, *w;
|
||||
Rune r;
|
||||
char *cp;
|
||||
int empty;
|
||||
|
||||
cp = *s;
|
||||
b = newbuf();
|
||||
restart:
|
||||
head = tail = 0;
|
||||
while(*cp == ' ' || *cp == '\t') /* leading white space */
|
||||
cp++;
|
||||
empty = 1;
|
||||
while(*cp){
|
||||
cp += chartorune(&r, cp);
|
||||
switch(r)
|
||||
|
|
@ -114,6 +117,7 @@ nextword(char **s)
|
|||
case '\\':
|
||||
case '\'':
|
||||
case '"':
|
||||
empty = 0;
|
||||
cp = shellt->expandquote(cp, r, b);
|
||||
if(cp == 0){
|
||||
fprint(2, "missing closing quote: %s\n", *s);
|
||||
|
|
@ -122,8 +126,12 @@ nextword(char **s)
|
|||
break;
|
||||
case '$':
|
||||
w = varsub(&cp);
|
||||
if(w == 0)
|
||||
if(w == 0){
|
||||
if(empty)
|
||||
goto restart;
|
||||
break;
|
||||
}
|
||||
empty = 0;
|
||||
if(b->current != b->start){
|
||||
bufcpy(b, w->s, strlen(w->s));
|
||||
insert(b, 0);
|
||||
|
|
@ -147,6 +155,7 @@ nextword(char **s)
|
|||
tail = tail->next;
|
||||
break;
|
||||
default:
|
||||
empty = 0;
|
||||
rinsert(b, r);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue