summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFabien Costantini <fabien@onepost.net>2012-04-21 17:21:11 +0000
committerFabien Costantini <fabien@onepost.net>2012-04-21 17:21:11 +0000
commit56a184d529d446bdff375fadeb9c0352a342f989 (patch)
tree0233739da2775987c4d4437ddee774fe6e6114a1 /src
parent157a96aa4b074d07e4391a1731d75d4eb594087f (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.cxx4
-rw-r--r--src/flstring.c15
-rw-r--r--src/flstring.h5
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$".