aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2010-09-12 15:03:16 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2010-09-12 15:03:16 +0200
commit6040fe88f4f6286da781dc9196ede4c6be310a04 (patch)
treee688182a38f91cd48472099101ac6d0b70556fc6 /shell/ash.c
parent5277a9db704727f6ee5d9929cc030b676a83d431 (diff)
downloadbusybox-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.c20
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 != '/')