diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2010-09-12 15:03:16 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2010-09-12 15:03:16 +0200 |
commit | 6040fe88f4f6286da781dc9196ede4c6be310a04 (patch) | |
tree | e688182a38f91cd48472099101ac6d0b70556fc6 /shell/ash.c | |
parent | 5277a9db704727f6ee5d9929cc030b676a83d431 (diff) | |
download | busybox-w32-6040fe88f4f6286da781dc9196ede4c6be310a04.tar.gz busybox-w32-6040fe88f4f6286da781dc9196ede4c6be310a04.tar.bz2 busybox-w32-6040fe88f4f6286da781dc9196ede4c6be310a04.zip |
ash: add missing casts to match CTLfoo; add TODO comments
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'shell/ash.c')
-rw-r--r-- | shell/ash.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/shell/ash.c b/shell/ash.c index f262872ea..b618a47f9 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -6008,7 +6008,7 @@ argstr(char *p, int flags, struct strlist *var_str_list) | |||
6008 | flags &= ~EXP_TILDE; | 6008 | flags &= ~EXP_TILDE; |
6009 | tilde: | 6009 | tilde: |
6010 | q = p; | 6010 | q = p; |
6011 | if (*q == CTLESC && (flags & EXP_QWORD)) | 6011 | if ((unsigned char)*q == CTLESC && (flags & EXP_QWORD)) |
6012 | q++; | 6012 | q++; |
6013 | if (*q == '~') | 6013 | if (*q == '~') |
6014 | p = exptilde(p, q, flags); | 6014 | p = exptilde(p, q, flags); |
@@ -6071,8 +6071,8 @@ argstr(char *p, int flags, struct strlist *var_str_list) | |||
6071 | /* "$@" syntax adherence hack */ | 6071 | /* "$@" syntax adherence hack */ |
6072 | if (!inquotes | 6072 | if (!inquotes |
6073 | && memcmp(p, dolatstr, 4) == 0 | 6073 | && memcmp(p, dolatstr, 4) == 0 |
6074 | && ( p[4] == CTLQUOTEMARK | 6074 | && ( p[4] == (char)CTLQUOTEMARK |
6075 | || (p[4] == CTLENDVAR && p[5] == CTLQUOTEMARK) | 6075 | || (p[4] == (char)CTLENDVAR && p[5] == (char)CTLQUOTEMARK) |
6076 | ) | 6076 | ) |
6077 | ) { | 6077 | ) { |
6078 | p = evalvar(p + 1, flags, /* var_str_list: */ NULL) + 1; | 6078 | p = evalvar(p + 1, flags, /* var_str_list: */ NULL) + 1; |
@@ -6293,8 +6293,8 @@ subevalvar(char *p, char *varname, int strloc, int subtype, | |||
6293 | int zero; | 6293 | int zero; |
6294 | char *(*scan)(char*, char*, char*, char*, int, int); | 6294 | char *(*scan)(char*, char*, char*, char*, int, int); |
6295 | 6295 | ||
6296 | //bb_error_msg("subevalvar(p:'%s',varname:'%s',strloc:%d,subtype:%d,startloc:%d,varflags:%x,quotes:%d", | 6296 | //bb_error_msg("subevalvar(p:'%s',varname:'%s',strloc:%d,subtype:%d,startloc:%d,varflags:%x,quotes:%d)", |
6297 | // p, varname, strloc, subtype, startloc, varflags, quotes); | 6297 | // p, varname, strloc, subtype, startloc, varflags, quotes); |
6298 | 6298 | ||
6299 | herefd = -1; | 6299 | herefd = -1; |
6300 | argstr(p, (subtype != VSASSIGN && subtype != VSQUESTION) ? EXP_CASE : 0, | 6300 | argstr(p, (subtype != VSASSIGN && subtype != VSQUESTION) ? EXP_CASE : 0, |
@@ -6727,8 +6727,8 @@ evalvar(char *p, int flags, struct strlist *var_str_list) | |||
6727 | vsplus: | 6727 | vsplus: |
6728 | if (varlen < 0) { | 6728 | if (varlen < 0) { |
6729 | argstr( | 6729 | argstr( |
6730 | p, flags | EXP_TILDE | | 6730 | p, |
6731 | (quoted ? EXP_QWORD : EXP_WORD), | 6731 | flags | (quoted ? EXP_TILDE|EXP_QWORD : EXP_TILDE|EXP_WORD), |
6732 | var_str_list | 6732 | var_str_list |
6733 | ); | 6733 | ); |
6734 | goto end; | 6734 | goto end; |
@@ -11039,7 +11039,6 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) | |||
11039 | startlinno = g_parsefile->linno; | 11039 | startlinno = g_parsefile->linno; |
11040 | bqlist = NULL; | 11040 | bqlist = NULL; |
11041 | quotef = 0; | 11041 | quotef = 0; |
11042 | oldstyle = 0; | ||
11043 | prevsyntax = 0; | 11042 | prevsyntax = 0; |
11044 | #if ENABLE_ASH_EXPAND_PRMT | 11043 | #if ENABLE_ASH_EXPAND_PRMT |
11045 | pssyntax = (syntax == PSSYNTAX); | 11044 | pssyntax = (syntax == PSSYNTAX); |
@@ -11445,6 +11444,8 @@ parsesub: { | |||
11445 | c = pgetc(); | 11444 | c = pgetc(); |
11446 | #if ENABLE_ASH_BASH_COMPAT | 11445 | #if ENABLE_ASH_BASH_COMPAT |
11447 | if (c == ':' || c == '$' || isdigit(c)) { | 11446 | if (c == ':' || c == '$' || isdigit(c)) { |
11447 | //TODO: support more general format ${v:EXPR:EXPR}, | ||
11448 | // where EXPR follows $(()) rules | ||
11448 | subtype = VSSUBSTR; | 11449 | subtype = VSSUBSTR; |
11449 | pungetc(); | 11450 | pungetc(); |
11450 | break; /* "goto do_pungetc" is bigger (!) */ | 11451 | break; /* "goto do_pungetc" is bigger (!) */ |
@@ -11472,6 +11473,9 @@ parsesub: { | |||
11472 | } | 11473 | } |
11473 | #if ENABLE_ASH_BASH_COMPAT | 11474 | #if ENABLE_ASH_BASH_COMPAT |
11474 | case '/': | 11475 | case '/': |
11476 | /* ${v/[/]pattern/repl} */ | ||
11477 | //TODO: encode pattern and repl separately. | ||
11478 | // Currently ${v/$var_with_slash/repl} is horribly broken | ||
11475 | subtype = VSREPLACE; | 11479 | subtype = VSREPLACE; |
11476 | c = pgetc(); | 11480 | c = pgetc(); |
11477 | if (c != '/') | 11481 | if (c != '/') |