From: Ivan Maidanski Date: Sun, 15 Jun 2014 07:39:12 +0000 (+0400) Subject: Fix signedness of char values passed to isspace, iscntrl, isxdigit X-Git-Tag: gc7_6_0~227 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3dcac9d3014f587912e65382fe637075c0a563e0;p=platform%2Fupstream%2Flibgc.git Fix signedness of char values passed to isspace, iscntrl, isxdigit (eliminate 'array subscript has type char' GCC warning) * cord/tests/de_win.c (WinMain, plain_chars, control_chars): Cast char value to unsigned char when passed to isspace(), iscntrl(). * os_dep.c (GC_parse_map_entry): Change type of "start_start", "end_start", "maj_dev_start", "p" local variables from char* to unsgined char* (as isspace(), isxdigit() expect non-negative values); insert casts between char* and unsigned char* where needed. * os_dep.c (GC_parse_map_entry): Remove "endp" local variable (use "p" variable directly instead). --- diff --git a/cord/tests/de_win.c b/cord/tests/de_win.c index f33a5f2..84a5bc7 100644 --- a/cord/tests/de_win.c +++ b/cord/tests/de_win.c @@ -89,7 +89,8 @@ int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, } else { char *p = command_line; - while (*p != 0 && !isspace(*p)) p++; + while (*p != 0 && !isspace(*(unsigned char *)p)) + p++; arg_file_name = CORD_to_char_star( CORD_substr(command_line, 0, p - command_line)); } @@ -133,7 +134,7 @@ char * plain_chars(char * text, size_t len) register size_t i; for (i = 0; i < len; i++) { - if (iscntrl(text[i])) { + if (iscntrl(((unsigned char *)text)[i])) { result[i] = ' '; } else { result[i] = text[i]; @@ -151,7 +152,7 @@ char * control_chars(char * text, size_t len) register size_t i; for (i = 0; i < len; i++) { - if (iscntrl(text[i])) { + if (iscntrl(((unsigned char *)text)[i])) { result[i] = text[i] + 0x40; } else { result[i] = ' '; diff --git a/os_dep.c b/os_dep.c index b23644c..4a77d31 100644 --- a/os_dep.c +++ b/os_dep.c @@ -299,30 +299,29 @@ GC_INNER char * GC_get_maps(void) char **prot, unsigned int *maj_dev, char **mapping_name) { - char *start_start, *end_start, *maj_dev_start; - char *p; - char *endp; + unsigned char *start_start, *end_start, *maj_dev_start; + unsigned char *p; /* unsigned for isspace, isxdigit */ if (buf_ptr == NULL || *buf_ptr == '\0') { return NULL; } - p = buf_ptr; + p = (unsigned char *)buf_ptr; while (isspace(*p)) ++p; start_start = p; GC_ASSERT(isxdigit(*start_start)); - *start = (ptr_t)strtoul(start_start, &endp, 16); p = endp; + *start = (ptr_t)strtoul((char *)start_start, (char **)&p, 16); GC_ASSERT(*p=='-'); ++p; end_start = p; GC_ASSERT(isxdigit(*end_start)); - *end = (ptr_t)strtoul(end_start, &endp, 16); p = endp; + *end = (ptr_t)strtoul((char *)end_start, (char **)&p, 16); GC_ASSERT(isspace(*p)); while (isspace(*p)) ++p; GC_ASSERT(*p == 'r' || *p == '-'); - *prot = p; + *prot = (char *)p; /* Skip past protection field to offset field */ while (!isspace(*p)) ++p; while (isspace(*p)) ++p; GC_ASSERT(isxdigit(*p)); @@ -330,16 +329,16 @@ GC_INNER char * GC_get_maps(void) while (!isspace(*p)) ++p; while (isspace(*p)) ++p; maj_dev_start = p; GC_ASSERT(isxdigit(*maj_dev_start)); - *maj_dev = strtoul(maj_dev_start, NULL, 16); + *maj_dev = strtoul((char *)maj_dev_start, NULL, 16); if (mapping_name == 0) { while (*p && *p++ != '\n'); } else { while (*p && *p != '\n' && *p != '/' && *p != '[') p++; - *mapping_name = p; + *mapping_name = (char *)p; while (*p && *p++ != '\n'); } - return p; + return (char *)p; } #endif /* REDIRECT_MALLOC || DYNAMIC_LOADING || IA64 || ... */