]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed wxStrrchr(s, '\0') bug, added const and non const versions of wxStrchr, wxStrrc...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 14 Jul 2002 19:55:08 +0000 (19:55 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 14 Jul 2002 19:55:08 +0000 (19:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16175 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/wxchar.h
src/common/wxchar.cpp

index 23a1c0a52aab308e63982f489b9da8e104f3fb47..b2ded4870d9c3fa2a1a32a56615ac790c46fcfe5 100644 (file)
@@ -606,7 +606,9 @@ WXDLLEXPORT int wxToupper(wxChar ch);
 
 #ifdef wxNEED_WX_STRING_H
 WXDLLEXPORT wxChar * wxStrcat(wxChar *dest, const wxChar *src);
-WXDLLEXPORT wxChar * wxStrchr(const wxChar *s, wxChar c);
+WXDLLEXPORT const wxChar * wxStrchr(const wxChar *s, wxChar c);
+WXDLLEXPORT wxChar * wxStrchr(wxChar *s, wxChar c)
+    { return (wxChar *)wxStrchr((const wxChar *)s, c); }
 WXDLLEXPORT int      wxStrcmp(const wxChar *s1, const wxChar *s2);
 WXDLLEXPORT int      wxStrcoll(const wxChar *s1, const wxChar *s2);
 WXDLLEXPORT wxChar * wxStrcpy(wxChar *dest, const wxChar *src);
@@ -615,10 +617,16 @@ WXDLLEXPORT size_t   wxStrlen(const wxChar *s);
 WXDLLEXPORT wxChar * wxStrncat(wxChar *dest, const wxChar *src, size_t n);
 WXDLLEXPORT int      wxStrncmp(const wxChar *s1, const wxChar *s2, size_t n);
 WXDLLEXPORT wxChar * wxStrncpy(wxChar *dest, const wxChar *src, size_t n);
-WXDLLEXPORT wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept);
-WXDLLEXPORT wxChar * wxStrrchr(const wxChar *s, wxChar c);
+WXDLLEXPORT const wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept);
+WXDLLEXPORT wxChar * wxStrpbrk(wxChar *s, const wxChar *accept)
+    { return (wxChar *)wxStrpbrk((const wxChar *)s, accept); }
+WXDLLEXPORT const wxChar * wxStrrchr(const wxChar *s, wxChar c);
+WXDLLEXPORT wxChar * wxStrrchr(wxChar *s, wxChar c)
+    { return (wxChar *)wxStrrchr((const wxChar *)s, c); }
 WXDLLEXPORT size_t   wxStrspn(const wxChar *s, const wxChar *accept);
-WXDLLEXPORT wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle);
+WXDLLEXPORT const wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle);
+WXDLLEXPORT wxChar *wxStrstr(wxChar *haystack, const wxChar *needle)
+    { return (wxChar *)wxStrstr((const wxChar *)haystack, needle); }
 WXDLLEXPORT double   wxStrtod(const wxChar *nptr, wxChar **endptr);
 WXDLLEXPORT long int wxStrtol(const wxChar *nptr, wxChar **endptr, int base);
 WXDLLEXPORT unsigned long int wxStrtoul(const wxChar *nptr, wxChar **endptr, int base);
index 25adbfad8da56c2bcaddb6705690005a25c06cb6..8faa0c6eabc076e83139d401a17f68575edd589a 100644 (file)
@@ -213,10 +213,16 @@ WXDLLEXPORT wxChar * wxStrcat(wxChar *dest, const wxChar *src)
   return ret;
 }
 
-WXDLLEXPORT wxChar * wxStrchr(const wxChar *s, wxChar c)
+WXDLLEXPORT const wxChar * wxStrchr(const wxChar *s, wxChar c)
 {
-  while (*s && *s != c) s++;
-  return (*s) ? (wxChar *)s : (wxChar *)NULL;
+    // be careful here as the terminating NUL makes part of the string
+    while ( *s != c )
+    {
+        if ( !*s++ )
+            return NULL;
+    }
+
+    return s;
 }
 
 WXDLLEXPORT int wxStrcmp(const wxChar *s1, const wxChar *s2)
@@ -260,20 +266,26 @@ WXDLLEXPORT wxChar * wxStrncpy(wxChar *dest, const wxChar *src, size_t n)
   return ret;
 }
 
-WXDLLEXPORT wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept)
+WXDLLEXPORT const wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept)
 {
-  while (*s && !wxStrchr(accept, *s)) s++;
-  return (*s) ? (wxChar *)s : (wxChar *)NULL;
+  while (*s && !wxStrchr(accept, *s))
+      s++;
+
+  return *s ? s : NULL;
 }
 
-WXDLLEXPORT wxChar * wxStrrchr(const wxChar *s, wxChar c)
+WXDLLEXPORT const wxChar * wxStrrchr(const wxChar *s, wxChar c)
 {
-  wxChar *ret = (wxChar *)NULL;
-  while (*s) {
-    if (*s == c) ret = (wxChar *)s;
-    s++;
-  }
-  return ret;
+    const wxChar *ret = NULL;
+    do
+    {
+        if ( *s == c )
+            ret = s;
+        s++;
+    }
+    while ( *s );
+
+    return ret;
 }
 
 WXDLLEXPORT size_t wxStrspn(const wxChar *s, const wxChar *accept)
@@ -283,14 +295,15 @@ WXDLLEXPORT size_t wxStrspn(const wxChar *s, const wxChar *accept)
   return len;
 }
 
-WXDLLEXPORT wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle)
+WXDLLEXPORT const wxChar *wxStrstr(const wxChar *haystack, const wxChar *needle)
 {
     wxCHECK_RET( needle, NULL, _T("NULL argument in wxStrstr") );
 
+    // VZ: this is not exactly the most efficient string search algorithm...
+
     const size_t len = wxStrlen(needle);
 
-    wxChar *fnd;
-    while ( (fnd = wxStrchr(haystack, *needle)) )
+    while ( const wxChar *fnd = wxStrchr(haystack, *needle) )
     {
         if ( !wxStrncmp(fnd, needle, len) )
             return fnd;
@@ -298,7 +311,7 @@ WXDLLEXPORT wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle)
         haystack = fnd + 1;
     }
 
-    return (wxChar *)NULL;
+    return NULL;
 }
 
 WXDLLEXPORT double wxStrtod(const wxChar *nptr, wxChar **endptr)