ash: document where we accept invalid syntax. no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-10-04 03:14:41 +02:00
parent b618dba103
commit 4d8873f997

View File

@ -6371,6 +6371,16 @@ subevalvar(char *p, char *str, int strloc, int subtype,
/* /*
* Add the value of a specialized variable to the stack string. * Add the value of a specialized variable to the stack string.
* name parameter (examples):
* ash -c 'echo $1' name:'1='
* ash -c 'echo $qwe' name:'qwe='
* ash -c 'echo $$' name:'$='
* ash -c 'echo ${$}' name:'$='
* ash -c 'echo ${$##q}' name:'$=q'
* ash -c 'echo ${#$}' name:'$='
* note: examples with bad shell syntax:
* ash -c 'echo ${#$1}' name:'$=1'
* ash -c 'echo ${#1#}' name:'1=#'
*/ */
static ssize_t static ssize_t
varvalue(char *name, int varflags, int flags, struct strlist *var_str_list) varvalue(char *name, int varflags, int flags, struct strlist *var_str_list)
@ -6407,7 +6417,7 @@ varvalue(char *name, int varflags, int flags, struct strlist *var_str_list)
return -1; return -1;
numvar: numvar:
len = cvtnum(num); len = cvtnum(num);
break; goto check_1char_name;
case '-': case '-':
expdest = makestrspace(NOPTS, expdest); expdest = makestrspace(NOPTS, expdest);
for (i = NOPTS - 1; i >= 0; i--) { for (i = NOPTS - 1; i >= 0; i--) {
@ -6416,6 +6426,12 @@ varvalue(char *name, int varflags, int flags, struct strlist *var_str_list)
len++; len++;
} }
} }
check_1char_name:
#if 0
/* handles cases similar to ${#$1} */
if (name[2] != '\0')
raise_error_syntax("bad substitution");
#endif
break; break;
case '@': case '@':
if (sep) if (sep)