From 7dd811ad5788936eceb31a533fcaa436a18746d5 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Mon, 14 Nov 2011 15:27:02 +0900 Subject: [PATCH] explicitly casting to unsigned char when using isalpha/digit/etc. --- include/chibi/sexp.h | 10 +++++----- main.c | 4 ++-- sexp.c | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index bdb6e212..862a572f 100755 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -16,11 +16,11 @@ extern "C" { #if defined(_WIN32) || defined(__MINGW32__) #include -#define sexp_isalpha(x) ((isalpha)((int)(unsigned int)(x))) -#define sexp_isxdigit(x) ((isxdigit)((int)(unsigned int)(x))) -#define sexp_isdigit(x) ((isdigit)((int)(unsigned int)(x))) -#define sexp_tolower(x) ((tolower)((int)(unsigned int)(x))) -#define sexp_toupper(x) ((toupper)((int)(unsigned int)(x))) +#define sexp_isalpha(x) ((isalpha)((int)(x))) +#define sexp_isxdigit(x) ((isxdigit)((int)(x))) +#define sexp_isdigit(x) ((isdigit)((int)(x))) +#define sexp_tolower(x) ((tolower)((int)(x))) +#define sexp_toupper(x) ((toupper)((int)(x))) #else #if SEXP_USE_DL #include diff --git a/main.c b/main.c index 5d06e928..33d9ddfe 100644 --- a/main.c +++ b/main.c @@ -336,10 +336,10 @@ void run_main (int argc, char **argv) { arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2); check_nonull_arg('h', arg); heap_size = strtoul(arg, &arg, 0); - if (sexp_isalpha(*arg)) heap_size *= multiplier(*arg++); + if (sexp_isalpha((unsigned char)*arg)) heap_size *= multiplier(*arg++); if (*arg == '/') { heap_max_size = strtoul(arg+1, &arg, 0); - if (sexp_isalpha(*arg)) heap_max_size *= multiplier(*arg++); + if (sexp_isalpha((unsigned char)*arg)) heap_max_size *= multiplier(*arg++); } break; #if SEXP_USE_IMAGE_LOADING diff --git a/sexp.c b/sexp.c index bb5c34ee..1deb8850 100644 --- a/sexp.c +++ b/sexp.c @@ -2386,8 +2386,8 @@ sexp sexp_read_raw (sexp ctx, sexp in) { if (sexp_string_length(res) == 1) { res = sexp_make_character(c1); } else if ((c1 == 'x' || c1 == 'X') && - sexp_isxdigit(str[1]) - && sexp_isxdigit(str[2]) && str[3] == '\0') { + sexp_isxdigit((unsigned char)(str[1])) + && sexp_isxdigit((unsigned char)(str[2])) && str[3] == '\0') { res = sexp_make_character(16 * digit_value(str[1]) + digit_value(str[2])); } else { @@ -2564,12 +2564,12 @@ sexp sexp_string_to_number_op (sexp ctx, sexp self, sexp_sint_t n, sexp str, sex if (((base=sexp_unbox_fixnum(b)) < 2) || (base > 36)) return sexp_user_exception(ctx, self, "invalid numeric base", b); if (sexp_string_data(str)[0]=='\0' - || (sexp_string_data(str)[1]=='\0' && !sexp_isdigit(sexp_string_data(str)[0]))) + || (sexp_string_data(str)[1]=='\0' && !sexp_isdigit((unsigned char)(sexp_string_data(str)[0])))) return SEXP_FALSE; sexp_gc_preserve1(ctx, in); in = sexp_make_input_string_port(ctx, str); if (sexp_string_data(str)[0] == '+') { - if (sexp_isdigit(sexp_string_data(str)[1]) + if (sexp_isdigit((unsigned char)(sexp_string_data(str)[1])) || sexp_string_data(str)[1] == '.' || sexp_string_data(str)[1] == '#') sexp_read_char(ctx, in); }