From b2dbaece40e506df40126713fd60ba503a7fbd1e Mon Sep 17 00:00:00 2001 From: Krzysztof Gabis Date: Sun, 2 Dec 2012 11:15:48 +0100 Subject: [PATCH] Fixed issue with MSVC and unicode characters. Functions in MSVC's ctype.h create runtime error when passed negative char value. --- parson.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/parson.c b/parson.c index 2596023..5712848 100644 --- a/parson.c +++ b/parson.c @@ -73,7 +73,7 @@ struct json_array_t { /* Various */ static int try_realloc(void **ptr, size_t new_size); static char * parson_strndup(const char *string, size_t n); -static int is_utf(const char *string); +static int is_utf(const unsigned char *string); static int is_decimal(const char *string, size_t length); /* JSON Object */ @@ -124,7 +124,7 @@ static char * parson_strndup(const char *string, size_t n) { return output_string; } -static int is_utf(const char *s) { +static int is_utf(const unsigned char *s) { return isxdigit(s[0]) && isxdigit(s[1]) && isxdigit(s[2]) && isxdigit(s[3]); } @@ -312,7 +312,7 @@ static const char * get_processed_string(const char **string) { case 't': current_char = '\t'; break; case 'u': unprocessed_ptr++; - if (!is_utf(unprocessed_ptr) || + if (!is_utf((const unsigned char*)unprocessed_ptr) || sscanf(unprocessed_ptr, "%4x", &utf_val) == EOF) { parson_free(output); return NULL; } @@ -333,7 +333,7 @@ static const char * get_processed_string(const char **string) { return NULL; break; } - } else if (iscntrl(current_char)) { /* no control characters allowed */ + } else if (iscntrl((unsigned char)current_char)) { /* no control characters allowed */ parson_free(output); return NULL; }