ctype.h: wrapper ctype functions with a cast to (unsigned char)

ctype functions take an *int*, which the user is expected to have
taken the input character from getc() and friends, or taken a
character and cast it to (unsigned char).

We don't care about EOF (-1), so use macros that cast to (unsigned
char) for us.
This commit is contained in:
H. Peter Anvin 2008-06-21 10:23:17 -07:00
parent 86877b294a
commit bda7a6e371
14 changed files with 106 additions and 100 deletions

24
nasm.c
View file

@ -482,7 +482,7 @@ static char *get_param(char *p, char *q, bool *advance)
*advance = false;
if (p[2]) { /* the parameter's in the option */
p += 2;
while (isspace(*p))
while (nasm_isspace(*p))
p++;
return p;
}
@ -1001,11 +1001,11 @@ static void process_respfile(FILE * rfile)
*/
*(p = &buffer[strcspn(buffer, "\r\n\032")]) = '\0';
while (p > buffer && isspace(p[-1]))
while (p > buffer && nasm_isspace(p[-1]))
*--p = '\0';
p = buffer;
while (isspace(*p))
while (nasm_isspace(*p))
p++;
if (process_arg(prevarg, p))
@ -1310,7 +1310,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
validid = true;
if (!isidstart(*p))
validid = false;
while (*p && !isspace(*p)) {
while (*p && !nasm_isspace(*p)) {
if (!isidchar(*p))
validid = false;
p++;
@ -1323,7 +1323,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
if (*p) {
int64_t size;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
*p++ = '\0';
q = p;
while (*q && *q != ':')
@ -1348,7 +1348,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
} else if (pass0 == 2) { /* pass == 2 */
q = value;
while (*q && *q != ':') {
if (isspace(*q))
if (nasm_isspace(*q))
*q = '\0';
q++;
}
@ -1388,7 +1388,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
validid = true;
if (!isidstart(*p))
validid = false;
while (*p && !isspace(*p)) {
while (*p && !nasm_isspace(*p)) {
if (!isidchar(*p))
validid = false;
*q++ = *p++;
@ -1399,14 +1399,14 @@ static void assemble_file(char *fname, StrList **depend_ptr)
"identifier expected after DEBUG");
break;
}
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
if (pass0 == 2)
ofmt->current_dfmt->debug_directive(debugid, p);
break;
case D_WARNING: /* [WARNING {+|-}warn-name] */
if (pass1 == 1) {
while (*value && isspace(*value))
while (*value && nasm_isspace(*value))
value++;
if (*value == '+' || *value == '-') {
@ -1429,7 +1429,7 @@ static void assemble_file(char *fname, StrList **depend_ptr)
cpu = get_cpu(value);
break;
case D_LIST: /* [LIST {+|-}] */
while (*value && isspace(*value))
while (*value && nasm_isspace(*value))
value++;
if (*value == '+') {
@ -1783,7 +1783,7 @@ static enum directives getkw(char **directive, char **value)
q = p++;
while (*p && *p != ';') {
if (!isspace(*p))
if (!nasm_isspace(*p))
return 0;
p++;
}
@ -1797,7 +1797,7 @@ static enum directives getkw(char **directive, char **value)
*value = buf;
} else {
*buf++ = '\0';
while (isspace(*buf))
while (nasm_isspace(*buf))
buf++; /* beppu - skip leading whitespace */
*value = buf;
while (*buf != ']')

6
nasm.h
View file

@ -356,13 +356,13 @@ extern Preproc nasmpp;
#define isidstart(c) ( isalpha(c) || (c)=='_' || (c)=='.' || (c)=='?' \
|| (c)=='@' )
#define isidchar(c) ( isidstart(c) || isdigit(c) || (c)=='$' || (c)=='#' \
#define isidchar(c) ( isidstart(c) || nasm_isdigit(c) || (c)=='$' || (c)=='#' \
|| (c)=='~' )
/* Ditto for numeric constants. */
#define isnumstart(c) ( isdigit(c) || (c)=='$' )
#define isnumchar(c) ( isalnum(c) || (c)=='_' )
#define isnumstart(c) ( nasm_isdigit(c) || (c)=='$' )
#define isnumchar(c) ( nasm_isalnum(c) || (c)=='_' )
/* This returns the numeric value of a given 'digit'. */

View file

@ -235,7 +235,7 @@ char *nasm_strsep(char **stringp, const char *delim)
#endif
#define lib_isnumchar(c) (isalnum(c) || (c) == '$' || (c) == '_')
#define lib_isnumchar(c) (nasm_isalnum(c) || (c) == '$' || (c) == '_')
#define numvalue(c) ((c)>='a' ? (c)-'a'+10 : (c)>='A' ? (c)-'A'+10 : (c)-'0')
static int radix_letter(char c)
@ -270,7 +270,7 @@ int64_t readnum(char *str, bool *error)
*error = false;
while (isspace(*r))
while (nasm_isspace(*r))
r++; /* find start of number */
/*

View file

@ -18,6 +18,21 @@
#include <strings.h>
#endif
/*
* tolower table -- avoids a function call on some platforms.
* NOTE: unlike the tolower() function in ctype, EOF is *NOT*
* a permitted value, for obvious reasons.
*/
void tolower_init(void);
extern unsigned char nasm_tolower_tab[256];
#define nasm_tolower(x) nasm_tolower_tab[(unsigned char)(x)]
/* Wrappers around <ctype.h> functions */
/* These are only valid for values that cannot include EOF */
#define nasm_isspace(x) isspace((unsigned char)(x))
#define nasm_isalnum(x) isalnum((unsigned char)(x))
#define nasm_isdigit(x) isdigit((unsigned char)(x))
/*
* If this is defined, the wrappers around malloc et al will
* transform into logging variants, which will cause NASM to create
@ -175,15 +190,6 @@ void standard_extension(char *inname, char *outname, char *extension,
#define elements(x) ( sizeof(x) / sizeof(*(x)) )
/*
* tolower table -- avoids a function call on some platforms.
* NOTE: unlike the tolower() function in ctype, EOF is *NOT*
* a permitted value, for obvious reasons.
*/
void tolower_init(void);
extern unsigned char nasm_tolower_tab[256];
#define nasm_tolower(x) nasm_tolower_tab[(unsigned char)(x)]
/*
* some handy macros that will probably be of use in more than one
* output format: convert integers into little-endian byte packed

View file

@ -279,9 +279,9 @@ static void aout_deflabel(char *name, int32_t segment, int64_t offset,
expr *e;
char *p = special;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
stdscan_reset();
stdscan_bufptr = p;
@ -370,7 +370,7 @@ static void aout_deflabel(char *name, int32_t segment, int64_t offset,
error(ERR_NONFATAL, "Linux a.out does not support"
" symbol size information");
} else {
while (special[n] && isspace(special[n]))
while (special[n] && nasm_isspace(special[n]))
n++;
/*
* We have a size expression; attempt to

View file

@ -881,7 +881,7 @@ static int bin_read_attribute(char **line, int *attribute,
char *exp;
/* Skip whitespace. */
while (**line && isspace(**line))
while (**line && nasm_isspace(**line))
(*line)++;
if (!**line)
return 0;
@ -909,12 +909,12 @@ static int bin_read_attribute(char **line, int *attribute,
*line += 9;
return 1;
} else if (!nasm_strnicmp(*line, "nobits", 6) &&
(isspace((*line)[6]) || ((*line)[6] == '\0'))) {
(nasm_isspace((*line)[6]) || ((*line)[6] == '\0'))) {
*attribute = ATTRIB_NOBITS;
*line += 6;
return 1;
} else if (!nasm_strnicmp(*line, "progbits", 8) &&
(isspace((*line)[8]) || ((*line)[8] == '\0'))) {
(nasm_isspace((*line)[8]) || ((*line)[8] == '\0'))) {
*attribute = ATTRIB_PROGBITS;
*line += 8;
return 1;
@ -927,7 +927,7 @@ static int bin_read_attribute(char **line, int *attribute,
if ((*line)[attrib_name_size] != '(') {
/* Single term (no parenthesis). */
exp = *line += attrib_name_size;
while (**line && !isspace(**line))
while (**line && !nasm_isspace(**line))
(*line)++;
if (**line) {
**line = '\0';
@ -1017,7 +1017,7 @@ static void bin_assign_attributes(struct Section *sec, char *astring)
break; /* End of line. */
else {
p = astring;
while (*astring && !isspace(*astring))
while (*astring && !nasm_isspace(*astring))
astring++;
if (*astring) {
*astring = '\0';
@ -1245,7 +1245,7 @@ static int32_t bin_secname(char *name, int pass, int *bits)
/* Attempt to find the requested section. If it does not
* exist, create it. */
p = name;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p)
*p++ = '\0';

View file

@ -274,7 +274,7 @@ static int32_t coff_section_names(char *name, int pass, int *bits)
return def_seg;
p = name;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p)
*p++ = '\0';
@ -285,15 +285,15 @@ static int32_t coff_section_names(char *name, int pass, int *bits)
}
flags = 0;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
while (*p) {
char *q = p;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p)
*p++ = '\0';
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
if (!nasm_stricmp(q, "code") || !nasm_stricmp(q, "text")) {
@ -696,11 +696,11 @@ static int coff_directives(char *directive, char *value, int pass)
if (pass == 2)
return 1; /* ignore in pass two */
name = q = value;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}

View file

@ -420,21 +420,21 @@ static int32_t elf_section_names(char *name, int pass, int *bits)
}
p = name;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p)
*p++ = '\0';
flags_and = flags_or = type = align = 0;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
while (*p) {
char *q = p;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p)
*p++ = '\0';
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
if (!nasm_strnicmp(q, "align=", 6)) {
@ -550,9 +550,9 @@ static void elf_deflabel(char *name, int32_t segment, int64_t offset,
expr *e;
char *p = special;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
stdscan_reset();
stdscan_bufptr = p;
@ -669,7 +669,7 @@ static void elf_deflabel(char *name, int32_t segment, int64_t offset,
n, special);
special += n;
while (isspace(*special))
while (nasm_isspace(*special))
++special;
if (*special) {
n = strcspn(special, " \t");
@ -692,7 +692,7 @@ static void elf_deflabel(char *name, int32_t segment, int64_t offset,
int fwd = 0;
char *saveme = stdscan_bufptr; /* bugfix? fbk 8/10/00 */
while (special[n] && isspace(special[n]))
while (special[n] && nasm_isspace(special[n]))
n++;
/*
* We have a size expression; attempt to

View file

@ -432,21 +432,21 @@ static int32_t elf_section_names(char *name, int pass, int *bits)
}
p = name;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p)
*p++ = '\0';
flags_and = flags_or = type = align = 0;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
while (*p) {
char *q = p;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p)
*p++ = '\0';
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
if (!nasm_strnicmp(q, "align=", 6)) {
@ -562,9 +562,9 @@ static void elf_deflabel(char *name, int32_t segment, int64_t offset,
expr *e;
char *p = special;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
stdscan_reset();
stdscan_bufptr = p;
@ -681,7 +681,7 @@ static void elf_deflabel(char *name, int32_t segment, int64_t offset,
n, special);
special += n;
while (isspace(*special))
while (nasm_isspace(*special))
++special;
if (*special) {
n = strcspn(special, " \t");
@ -704,7 +704,7 @@ static void elf_deflabel(char *name, int32_t segment, int64_t offset,
int fwd = 0;
char *saveme = stdscan_bufptr; /* bugfix? fbk 8/10/00 */
while (special[n] && isspace(special[n]))
while (special[n] && nasm_isspace(special[n]))
n++;
/*
* We have a size expression; attempt to

View file

@ -678,19 +678,19 @@ static int32_t ieee_segment(char *name, int pass, int *bits)
while (*name == '.')
name++; /* hack, but a documented one */
p = name;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p) {
*p++ = '\0';
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
*p++ = '\0';
}
while (*p) {
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p) {
*p++ = '\0';
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
*p++ = '\0';
}

View file

@ -1288,19 +1288,19 @@ static int32_t obj_segment(char *name, int pass, int *bits)
while (*name == '.')
name++; /* hack, but a documented one */
p = name;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p) {
*p++ = '\0';
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
*p++ = '\0';
}
while (*p) {
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p) {
*p++ = '\0';
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
*p++ = '\0';
}
@ -1522,11 +1522,11 @@ static int obj_directive(char *directive, char *value, int pass)
while (*q == '.')
q++; /* hack, but a documented one */
v = q;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}
/*
@ -1565,11 +1565,11 @@ static int obj_directive(char *directive, char *value, int pass)
while (*q) {
p = q;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}
/*
@ -1630,20 +1630,20 @@ static int obj_directive(char *directive, char *value, int pass)
if (pass == 2)
return 1; /* ignore in pass two */
extname = q = value;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}
libname = q;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}
@ -1679,20 +1679,20 @@ static int obj_directive(char *directive, char *value, int pass)
if (pass == 2)
return 1; /* ignore in pass two */
intname = q = value;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}
extname = q;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}
@ -1706,11 +1706,11 @@ static int obj_directive(char *directive, char *value, int pass)
}
while (*q) {
v = q;
while (*q && !isspace(*q))
while (*q && !nasm_isspace(*q))
q++;
if (isspace(*q)) {
if (nasm_isspace(*q)) {
*q++ = '\0';
while (*q && isspace(*q))
while (*q && nasm_isspace(*q))
q++;
}
if (!nasm_stricmp(v, "resident"))

View file

@ -155,11 +155,11 @@ static int32_t rdf2_section_names(char *name, int pass, int *bits)
/* look for segment type code following segment name */
p = name;
while (*p && !isspace(*p))
while (*p && !nasm_isspace(*p))
p++;
if (*p) { /* we're now in whitespace */
*p++ = '\0';
while (*p && isspace(80))
while (*p && nasm_isspace(80))
*p++ = '\0';
}
if (*p) { /* we're now in an attribute value */
@ -418,7 +418,7 @@ static void rdf2_deflabel(char *name, int32_t segment, int64_t offset,
}
if (*special) {
while (isspace(*special))
while (nasm_isspace(*special))
special++;
if (!nasm_stricmp(special, "far")) {
farsym = 1;

View file

@ -417,14 +417,14 @@ static char *check_tasm_directive(char *line)
char *p = line, *oldline, oldchar;
/* Skip whitespace */
while (isspace(*p) && *p != 0)
while (nasm_isspace(*p) && *p != 0)
p++;
/* Binary search for the directive name */
i = -1;
j = elements(tasm_directives);
len = 0;
while (!isspace(p[len]) && p[len] != 0)
while (!nasm_isspace(p[len]) && p[len] != 0)
len++;
if (len) {
oldchar = p[len];
@ -778,13 +778,13 @@ static Token *tokenize(char *line)
p = line;
if (*p == '%') {
p++;
if (isdigit(*p) ||
((*p == '-' || *p == '+') && isdigit(p[1])) ||
((*p == '+') && (isspace(p[1]) || !p[1]))) {
if (nasm_isdigit(*p) ||
((*p == '-' || *p == '+') && nasm_isdigit(p[1])) ||
((*p == '+') && (nasm_isspace(p[1]) || !p[1]))) {
do {
p++;
}
while (isdigit(*p));
while (nasm_isdigit(*p));
type = TOK_PREPROC_ID;
} else if (*p == '{') {
p++;
@ -882,7 +882,7 @@ static Token *tokenize(char *line)
while (*r == '_')
r++;
if (isdigit(*r) || (is_hex && isxdigit(*r)) ||
if (nasm_isdigit(*r) || (is_hex && isxdigit(*r)) ||
(!is_hex && (*r == 'e' || *r == 'E')) ||
(*r == 'p' || *r == 'P')) {
p = r;
@ -900,10 +900,10 @@ static Token *tokenize(char *line)
}
type = is_float ? TOK_FLOAT : TOK_NUMBER;
} else if (isspace(*p)) {
} else if (nasm_isspace(*p)) {
type = TOK_WHITESPACE;
p++;
while (*p && isspace(*p))
while (*p && nasm_isspace(*p))
p++;
/*
* Whitespace just before end-of-line is discarded by

View file

@ -68,7 +68,7 @@ int stdscan(void *private_data, struct tokenval *tv)
(void)private_data; /* Don't warn that this parameter is unused */
while (isspace(*stdscan_bufptr))
while (nasm_isspace(*stdscan_bufptr))
stdscan_bufptr++;
if (!*stdscan_bufptr)
return tv->t_type = 0;