diff options
| author | Fabien Costantini <fabien@onepost.net> | 2012-04-21 17:21:11 +0000 |
|---|---|---|
| committer | Fabien Costantini <fabien@onepost.net> | 2012-04-21 17:21:11 +0000 |
| commit | 56a184d529d446bdff375fadeb9c0352a342f989 (patch) | |
| tree | 0233739da2775987c4d4437ddee774fe6e6114a1 /src | |
| parent | 157a96aa4b074d07e4391a1731d75d4eb594087f (diff) | |
STR 2771 fix: introduce a new ascii strcasecmp that does not rely on locale sensitive toupper tolower.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9368 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_get_system_colors.cxx | 4 | ||||
| -rw-r--r-- | src/flstring.c | 15 | ||||
| -rw-r--r-- | src/flstring.h | 5 |
3 files changed, 21 insertions, 3 deletions
diff --git a/src/Fl_get_system_colors.cxx b/src/Fl_get_system_colors.cxx index de2f50715..bd4c5a046 100644 --- a/src/Fl_get_system_colors.cxx +++ b/src/Fl_get_system_colors.cxx @@ -312,7 +312,7 @@ int Fl::scheme(const char *s) { int Fl::reload_scheme() { Fl_Window *win; - if (scheme_ && !strcasecmp(scheme_, "plastic")) { + if (scheme_ && !fl_ascii_strcasecmp(scheme_, "plastic")) { // Update the tile image to match the background color... uchar r, g, b; int nr, ng, nb; @@ -358,7 +358,7 @@ int Fl::reload_scheme() { // Use standard size scrollbars... Fl::scrollbar_size(16); - } else if (scheme_ && !strcasecmp(scheme_, "gtk+")) { + } else if (scheme_ && !fl_ascii_strcasecmp(scheme_, "gtk+")) { // Use a GTK+ inspired look-n-feel... if (scheme_bg_) { delete scheme_bg_; diff --git a/src/flstring.c b/src/flstring.c index abfdcefd3..fcab1a765 100644 --- a/src/flstring.c +++ b/src/flstring.c @@ -90,6 +90,21 @@ fl_strlcpy(char *dst, /* O - Destination string */ return (srclen); } +/** +* locale independent ascii oriented case cmp +* returns 0 if string successfully compare, non zero otherwise +*/ +int fl_ascii_strcasecmp(const char *s, const char *t) { + if (!s || !t) return (s!=t); + if (strlen(s) != strlen(t)) return -1; + for(;*s; s++,t++) { + if ( *s != *t) { + if (*s<*t && (*s+0x20)!=*t ) return -1; + if (*s>*t && *s!=(*t+0x20) ) return +1; + } + } + return 0; +} /* * End of "$Id$". diff --git a/src/flstring.h b/src/flstring.h index 60e5af6e3..be4991bf2 100644 --- a/src/flstring.h +++ b/src/flstring.h @@ -84,11 +84,14 @@ FL_EXPORT extern size_t fl_strlcpy(char *, const char *, size_t); # define strlcpy fl_strlcpy # endif /* !HAVE_STRLCPY */ +// locale independent ascii compare, does not introduce locale pbs as w/ case cmp +FL_EXPORT extern int fl_ascii_strcasecmp(const char *s, const char *t); + # ifdef __cplusplus } # endif /* __cplusplus */ -#endif /* !flstring_h */ +#endif /* !flstring_h */ /* * End of "$Id$". |
