X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fgenmdesc.c;h=21f87eb5819d7a47a4e0ca63cf739666226b79bb;hb=9e167696e7709b66bc42e7a822046665f7d29660;hp=b996f8f83b55a07a401a31409d4f5c437228d43c;hpb=66e33aa2ee25b9de6ff80e41aa7036b9a8352479;p=mono.git diff --git a/mono/mini/genmdesc.c b/mono/mini/genmdesc.c index b996f8f83b5..21f87eb5819 100644 --- a/mono/mini/genmdesc.c +++ b/mono/mini/genmdesc.c @@ -54,6 +54,14 @@ static GHashTable *template_table; #define eat_whitespace(s) while (*(s) && isspace (*(s))) s++; +// Per spec isalnum() expects input in the range 0-255 +// and can misbehave if you pass in a signed char. +static int +isalnum_char(char c) +{ + return isalnum ((unsigned char)c); +} + static int load_file (const char *name) { FILE *f; @@ -163,7 +171,7 @@ load_file (const char *name) { OpDesc *tdesc; p += 9; tname = p; - while (*p && isalnum (*p)) ++p; + while (*p && isalnum_char (*p)) ++p; *p++ = 0; tdesc = (OpDesc *)g_hash_table_lookup (template_table, tname); if (!tdesc) @@ -181,7 +189,7 @@ load_file (const char *name) { g_error ("Duplicated name tag in template %s at '%s' at line %d in %s\n", desc->name, p, line, name); p += 5; tname = p; - while (*p && isalnum (*p)) ++p; + while (*p && isalnum_char (*p)) ++p; *p++ = 0; if (g_hash_table_lookup (template_table, tname)) g_error ("Duplicated template %s at line %d in %s\n", tname, line, name); @@ -195,6 +203,7 @@ load_file (const char *name) { if (is_template && !desc->name) g_error ("Template without name at line %d in %s\n", line, name); } + g_string_free (comment,TRUE); fclose (f); return 0; } @@ -220,7 +229,7 @@ init_table (void) { static void output_char (FILE *f, char c) { - if (isalnum (c)) + if (isalnum_char (c)) fprintf (f, "%c", c); else fprintf (f, "\\x%x\" \"", (guint8)c);