diff options
-rw-r--r-- | e-util/ChangeLog | 7 | ||||
-rw-r--r-- | e-util/ename/e-name-western.c | 34 |
2 files changed, 24 insertions, 17 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog index 8afb59211b..f12326610e 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,10 @@ +2002-10-23 Dan Winship <danw@ximian.com> + + * ename/e-name-western.c: Cast chars to unsigned char before + passing to ctype macros since they are not defined on negative + numbers. Fixes parsing problems with names with accented + characters on Solaris. (At least part of #32146) + 2002-09-25 Rodrigo Moya <rodrigo@ximian.com> * e-component-listener.c (ping_component_callback): added a comment diff --git a/e-util/ename/e-name-western.c b/e-util/ename/e-name-western.c index f8d717c403..b7b2459762 100644 --- a/e-util/ename/e-name-western.c +++ b/e-util/ename/e-name-western.c @@ -54,7 +54,7 @@ e_name_western_cleanup_string (char **str) /* skip any spaces and commas at the start of the string */ p = *str; - while (isspace (*p) || *p == ',') + while (isspace ((unsigned char)*p) || *p == ',') p ++; /* make the copy we're going to return */ @@ -63,11 +63,11 @@ e_name_western_cleanup_string (char **str) if ( strlen(newstr) > 0) { /* now search from the back, skipping over any spaces and commas */ p = newstr + strlen (newstr) - 1; - while (isspace (*p) || *p == ',') + while (isspace ((unsigned char)*p) || *p == ',') p --; /* advance p to after the character that caused us to exit the previous loop, and end the string. */ - if ((! isspace (*p)) && *p != ',') + if ((! isspace ((unsigned char)*p)) && *p != ',') p ++; *p = '\0'; } @@ -90,10 +90,10 @@ e_name_western_get_words_at_idx (char *str, int idx, int num_words) word_count = 0; p = str + idx; while (word_count < num_words && *p != '\0') { - while (! isspace (*p) && *p != '\0') + while (! isspace ((unsigned char)*p) && *p != '\0') p ++; - while (isspace (*p) && *p != '\0') + while (isspace ((unsigned char)*p) && *p != '\0') p ++; word_count ++; @@ -194,7 +194,7 @@ e_name_western_get_prefix_at_str (char *str) /* Check for a second prefix. */ p = str + strlen (pfx1); - while (isspace (*p) && *p != '\0') + while (isspace ((unsigned char)*p) && *p != '\0') p ++; pfx2 = e_name_western_get_one_prefix_at_str (p); @@ -258,7 +258,7 @@ e_name_western_extract_first (ENameWestern *name, ENameWesternIdxs *idxs) /* Skip past white space. */ p = name->full + first_idx; - while (isspace (*p) && *p != '\0') + while (isspace ((unsigned char)*p) && *p != '\0') p++; if (*p == '\0') @@ -311,7 +311,7 @@ e_name_western_extract_middle (ENameWestern *name, ENameWesternIdxs *idxs) /* * Search for the first space (or the terminating \0) */ - while (isspace (name->full [middle_idx]) && + while (isspace ((unsigned char)name->full [middle_idx]) && name->full [middle_idx] != '\0') middle_idx ++; @@ -327,7 +327,7 @@ e_name_western_extract_middle (ENameWestern *name, ENameWesternIdxs *idxs) middle_idx = idxs->nick_idx + strlen (name->nick) + 1; - while (isspace (name->full [middle_idx]) && + while (isspace ((unsigned char)name->full [middle_idx]) && name->full [middle_idx] != '\0') middle_idx ++; @@ -464,7 +464,7 @@ e_name_western_extract_last (ENameWestern *name, ENameWesternIdxs *idxs) } /* Skip past the white space. */ - while (isspace (name->full [idx]) && name->full [idx] != '\0') + while (isspace ((unsigned char)name->full [idx]) && name->full [idx] != '\0') idx ++; if (name->full [idx] == '\0') @@ -498,13 +498,13 @@ e_name_western_get_preceding_word (char *str, int idx) p = str + idx; - while (isspace (*p) && p > str) + while (isspace ((unsigned char)*p) && p > str) p --; - while (! isspace (*p) && p > str) + while (! isspace ((unsigned char)*p) && p > str) p --; - if (isspace (*p)) + if (isspace ((unsigned char)*p)) p ++; word_len = (str + idx) - p; @@ -635,7 +635,7 @@ e_name_western_reorder_asshole (ENameWestern *name, ENameWesternIdxs *idxs) p = name->full + (prefix == NULL ? 0 : strlen (prefix)); - while (isspace (*p) && *p != '\0') + while (isspace ((unsigned char)*p) && *p != '\0') p ++; last = g_malloc0 (comma - p + 1); @@ -652,7 +652,7 @@ e_name_western_reorder_asshole (ENameWestern *name, ENameWesternIdxs *idxs) */ p = comma + 1; - while (isspace (*p) && *p != '\0') + while (isspace ((unsigned char)*p) && *p != '\0') p ++; if (suffix != NULL) { @@ -667,7 +667,7 @@ e_name_western_reorder_asshole (ENameWestern *name, ENameWesternIdxs *idxs) * Walk backwards until we hit the space which * separates the suffix from firstmidnick. */ - while (! isspace (*q) && q > comma) + while (! isspace ((unsigned char)*q) && q > comma) q --; if ((q - p + 1) > 0) { @@ -796,7 +796,7 @@ e_name_western_fixup (ENameWestern *name, ENameWesternIdxs *idxs) char *p; p = sfx - 1; - while (isspace (*p) && p > name->last) + while (isspace ((unsigned char)*p) && p > name->last) p --; p ++; |