ash: preparatory cleanup. The only real changes are (unsigned char) casts

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-09-16 16:18:32 +02:00
parent 795633463a
commit b0d63383dd

View File

@ -2700,8 +2700,8 @@ SIT(int c, int syntax)
} else } else
#endif #endif
{ {
if ((unsigned char)c >= (unsigned char)(CTLESC) if ((unsigned char)c >= CTLESC
&& (unsigned char)c <= (unsigned char)(CTLQUOTEMARK) && (unsigned char)c <= CTLQUOTEMARK
) { ) {
return CCTL; return CCTL;
} }
@ -5302,7 +5302,7 @@ ash_arith(const char *s)
#define EXP_WORD 0x80 /* expand word in parameter expansion */ #define EXP_WORD 0x80 /* expand word in parameter expansion */
#define EXP_QWORD 0x100 /* expand word in quoted parameter expansion */ #define EXP_QWORD 0x100 /* expand word in quoted parameter expansion */
/* /*
* _rmescape() flags * rmescape() flags
*/ */
#define RMESCAPE_ALLOC 0x1 /* Allocate a new string */ #define RMESCAPE_ALLOC 0x1 /* Allocate a new string */
#define RMESCAPE_GLOB 0x2 /* Add backslashes for glob */ #define RMESCAPE_GLOB 0x2 /* Add backslashes for glob */
@ -5356,7 +5356,7 @@ esclen(const char *start, const char *p)
{ {
size_t esc = 0; size_t esc = 0;
while (p > start && *--p == CTLESC) { while (p > start && (unsigned char)*--p == CTLESC) {
esc++; esc++;
} }
return esc; return esc;
@ -5372,13 +5372,13 @@ rmescapes(char *str, int flag)
char *p, *q, *r; char *p, *q, *r;
unsigned inquotes; unsigned inquotes;
int notescaped; unsigned protect_against_glob;
int globbing; unsigned globbing;
p = strpbrk(str, qchars); p = strpbrk(str, qchars);
if (!p) { if (!p)
return str; return str;
}
q = p; q = p;
r = str; r = str;
if (flag & RMESCAPE_ALLOC) { if (flag & RMESCAPE_ALLOC) {
@ -5397,28 +5397,33 @@ rmescapes(char *str, int flag)
q = (char *)memcpy(q, str, len) + len; q = (char *)memcpy(q, str, len) + len;
} }
} }
inquotes = (flag & RMESCAPE_QUOTED) ^ RMESCAPE_QUOTED; inquotes = (flag & RMESCAPE_QUOTED) ^ RMESCAPE_QUOTED;
globbing = flag & RMESCAPE_GLOB; globbing = flag & RMESCAPE_GLOB;
notescaped = globbing; protect_against_glob = globbing;
while (*p) { while (*p) {
if (*p == CTLQUOTEMARK) { if (*p == CTLQUOTEMARK) {
// TODO: if no RMESCAPE_QUOTED in flags, inquotes never becomes 0
// (alternates between RMESCAPE_QUOTED and ~RMESCAPE_QUOTED). Is it ok?
// Note: both inquotes and protect_against_glob only affect whether
// CTLESC,<ch> gets converted to <ch> or to \<ch>
inquotes = ~inquotes; inquotes = ~inquotes;
p++; p++;
notescaped = globbing; protect_against_glob = globbing;
continue; continue;
} }
if (*p == '\\') { if (*p == '\\') {
/* naked back slash */ /* naked back slash */
notescaped = 0; protect_against_glob = 0;
goto copy; goto copy;
} }
if (*p == CTLESC) { if (*p == CTLESC) {
p++; p++;
if (notescaped && inquotes && *p != '/') { if (protect_against_glob && inquotes && *p != '/') {
*q++ = '\\'; *q++ = '\\';
} }
} }
notescaped = globbing; protect_against_glob = globbing;
copy: copy:
*q++ = *p++; *q++ = *p++;
} }
@ -5541,13 +5546,13 @@ removerecordregions(int endoff)
} }
static char * static char *
exptilde(char *startp, char *p, int flag) exptilde(char *startp, char *p, int flags)
{ {
char c; char c;
char *name; char *name;
struct passwd *pw; struct passwd *pw;
const char *home; const char *home;
int quotes = flag & (EXP_FULL | EXP_CASE); int quotes = flags & (EXP_FULL | EXP_CASE);
int startloc; int startloc;
name = p + 1; name = p + 1;
@ -5559,7 +5564,7 @@ exptilde(char *startp, char *p, int flag)
case CTLQUOTEMARK: case CTLQUOTEMARK:
return startp; return startp;
case ':': case ':':
if (flag & EXP_VARTILDE) if (flags & EXP_VARTILDE)
goto done; goto done;
break; break;
case '/': case '/':
@ -5774,7 +5779,7 @@ expari(int quotes)
#endif #endif
/* argstr needs it */ /* argstr needs it */
static char *evalvar(char *p, int flag, struct strlist *var_str_list); static char *evalvar(char *p, int flags, struct strlist *var_str_list);
/* /*
* Perform variable and command substitution. If EXP_FULL is set, output CTLESC * Perform variable and command substitution. If EXP_FULL is set, output CTLESC
@ -5786,7 +5791,7 @@ static char *evalvar(char *p, int flag, struct strlist *var_str_list);
* for correct expansion of "B=$A" word. * for correct expansion of "B=$A" word.
*/ */
static void static void
argstr(char *p, int flag, struct strlist *var_str_list) argstr(char *p, int flags, struct strlist *var_str_list)
{ {
static const char spclchars[] ALIGN1 = { static const char spclchars[] ALIGN1 = {
'=', '=',
@ -5804,43 +5809,45 @@ argstr(char *p, int flag, struct strlist *var_str_list)
}; };
const char *reject = spclchars; const char *reject = spclchars;
int c; int c;
int quotes = flag & (EXP_FULL | EXP_CASE | EXP_REDIR); /* do CTLESC */ int quotes = flags & (EXP_FULL | EXP_CASE | EXP_REDIR); /* do CTLESC */
int breakall = flag & EXP_WORD; int breakall = flags & EXP_WORD;
int inquotes; int inquotes;
size_t length; size_t length;
int startloc; int startloc;
if (!(flag & EXP_VARTILDE)) { if (!(flags & EXP_VARTILDE)) {
reject += 2; reject += 2;
} else if (flag & EXP_VARTILDE2) { } else if (flags & EXP_VARTILDE2) {
reject++; reject++;
} }
inquotes = 0; inquotes = 0;
length = 0; length = 0;
if (flag & EXP_TILDE) { if (flags & EXP_TILDE) {
char *q; char *q;
flag &= ~EXP_TILDE; flags &= ~EXP_TILDE;
tilde: tilde:
q = p; q = p;
if (*q == CTLESC && (flag & EXP_QWORD)) if (*q == CTLESC && (flags & EXP_QWORD))
q++; q++;
if (*q == '~') if (*q == '~')
p = exptilde(p, q, flag); p = exptilde(p, q, flags);
} }
start: start:
startloc = expdest - (char *)stackblock(); startloc = expdest - (char *)stackblock();
for (;;) { for (;;) {
length += strcspn(p + length, reject); length += strcspn(p + length, reject);
c = p[length]; c = (unsigned char) p[length];
if (c && (!(c & 0x80) if (c) {
if (!(c & 0x80)
#if ENABLE_SH_MATH_SUPPORT #if ENABLE_SH_MATH_SUPPORT
|| c == CTLENDARI || c == CTLENDARI
#endif #endif
)) { ) {
/* c == '=' || c == ':' || c == CTLENDARI */ /* c == '=' || c == ':' || c == CTLENDARI */
length++; length++;
} }
}
if (length > 0) { if (length > 0) {
int newloc; int newloc;
expdest = stack_nputstr(p, length, expdest); expdest = stack_nputstr(p, length, expdest);
@ -5857,11 +5864,11 @@ argstr(char *p, int flag, struct strlist *var_str_list)
case '\0': case '\0':
goto breakloop; goto breakloop;
case '=': case '=':
if (flag & EXP_VARTILDE2) { if (flags & EXP_VARTILDE2) {
p--; p--;
continue; continue;
} }
flag |= EXP_VARTILDE2; flags |= EXP_VARTILDE2;
reject++; reject++;
/* fall through */ /* fall through */
case ':': case ':':
@ -5880,15 +5887,13 @@ argstr(char *p, int flag, struct strlist *var_str_list)
goto breakloop; goto breakloop;
case CTLQUOTEMARK: case CTLQUOTEMARK:
/* "$@" syntax adherence hack */ /* "$@" syntax adherence hack */
if ( if (!inquotes
!inquotes && && memcmp(p, dolatstr, 4) == 0
!memcmp(p, dolatstr, 4) && && ( p[4] == CTLQUOTEMARK
(p[4] == CTLQUOTEMARK || ( || (p[4] == CTLENDVAR && p[5] == CTLQUOTEMARK)
p[4] == CTLENDVAR && )
p[5] == CTLQUOTEMARK
))
) { ) {
p = evalvar(p + 1, flag, /* var_str_list: */ NULL) + 1; p = evalvar(p + 1, flags, /* var_str_list: */ NULL) + 1;
goto start; goto start;
} }
inquotes = !inquotes; inquotes = !inquotes;
@ -5904,10 +5909,10 @@ argstr(char *p, int flag, struct strlist *var_str_list)
length++; length++;
goto addquote; goto addquote;
case CTLVAR: case CTLVAR:
p = evalvar(p, flag, var_str_list); p = evalvar(p, flags, var_str_list);
goto start; goto start;
case CTLBACKQ: case CTLBACKQ:
c = 0; c = '\0';
case CTLBACKQ|CTLQUOTE: case CTLBACKQ|CTLQUOTE:
expbackq(argbackq->n, c, quotes); expbackq(argbackq->n, c, quotes);
argbackq = argbackq->next; argbackq = argbackq->next;
@ -6452,7 +6457,7 @@ varvalue(char *name, int varflags, int flags, struct strlist *var_str_list)
* input string. * input string.
*/ */
static char * static char *
evalvar(char *p, int flag, struct strlist *var_str_list) evalvar(char *p, int flags, struct strlist *var_str_list)
{ {
char varflags; char varflags;
char subtype; char subtype;
@ -6463,7 +6468,7 @@ evalvar(char *p, int flag, struct strlist *var_str_list)
int startloc; int startloc;
ssize_t varlen; ssize_t varlen;
varflags = *p++; varflags = (unsigned char) *p++;
subtype = varflags & VSTYPE; subtype = varflags & VSTYPE;
quoted = varflags & VSQUOTE; quoted = varflags & VSQUOTE;
var = p; var = p;
@ -6472,7 +6477,7 @@ evalvar(char *p, int flag, struct strlist *var_str_list)
p = strchr(p, '=') + 1; p = strchr(p, '=') + 1;
again: again:
varlen = varvalue(var, varflags, flag, var_str_list); varlen = varvalue(var, varflags, flags, var_str_list);
if (varflags & VSNUL) if (varflags & VSNUL)
varlen--; varlen--;
@ -6485,7 +6490,7 @@ evalvar(char *p, int flag, struct strlist *var_str_list)
vsplus: vsplus:
if (varlen < 0) { if (varlen < 0) {
argstr( argstr(
p, flag | EXP_TILDE | p, flags | EXP_TILDE |
(quoted ? EXP_QWORD : EXP_WORD), (quoted ? EXP_QWORD : EXP_WORD),
var_str_list var_str_list
); );
@ -6558,7 +6563,7 @@ evalvar(char *p, int flag, struct strlist *var_str_list)
patloc = expdest - (char *)stackblock(); patloc = expdest - (char *)stackblock();
if (0 == subevalvar(p, /* str: */ NULL, patloc, subtype, if (0 == subevalvar(p, /* str: */ NULL, patloc, subtype,
startloc, varflags, startloc, varflags,
/* quotes: */ flag & (EXP_FULL | EXP_CASE), /* quotes: */ flags & (EXP_FULL | EXP_CASE),
var_str_list) var_str_list)
) { ) {
int amount = expdest - ( int amount = expdest - (