r9271: Fix problems with german umlauts - strcmp_w was broken (needs to always re...
authorJeremy Allison <jra@samba.org>
Fri, 12 Aug 2005 20:12:31 +0000 (20:12 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:00:29 +0000 (11:00 -0500)
on termination). Fix all other cases where this was also occurring.
Jeremy.

source/lib/util_str.c
source/lib/util_unistr.c

index 06f901826955f7a35914f1c76c4504a25281a4c6..712a8a18fd3b0ee38c46a232ce5b14df53174c25 100644 (file)
@@ -183,7 +183,7 @@ char **toktocliplist(int *ctok, const char *sep)
 int StrCaseCmp(const char *s, const char *t)
 {
 
-       const char * ps, * pt;
+       const char *ps, *pt;
        size_t size;
        smb_ucs2_t *buffer_s, *buffer_t;
        int ret;
@@ -211,17 +211,17 @@ int StrCaseCmp(const char *s, const char *t)
                        return +1;
        }
 
-       size = push_ucs2_allocate(&buffer_s, s);
+       size = push_ucs2_allocate(&buffer_s, ps);
        if (size == (size_t)-1) {
-               return strcmp(s, t); 
+               return strcmp(ps, pt); 
                /* Not quite the right answer, but finding the right one
                   under this failure case is expensive, and it's pretty close */
        }
        
-       size = push_ucs2_allocate(&buffer_t, t);
+       size = push_ucs2_allocate(&buffer_t, pt);
        if (size == (size_t)-1) {
                SAFE_FREE(buffer_s);
-               return strcmp(s, t); 
+               return strcmp(ps, pt); 
                /* Not quite the right answer, but finding the right one
                   under this failure case is expensive, and it's pretty close */
        }
index 6b29a0d26a73338efb9daf9692cc00f139952cc9..8ed8c5c37fb6ecebaf1bb7c94ba09dd883aeebd4 100644 (file)
@@ -568,7 +568,7 @@ int strcmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b)
                a++;
                b++;
        }
-       return cpa - cpb;
+       return (*(COPY_UCS2_CHAR(&cpa,a)) - *(COPY_UCS2_CHAR(&cpb,b)));
        /* warning: if *a != *b and both are not 0 we return a random
                greater or lesser than 0 number not realted to which
                string is longer */
@@ -584,7 +584,7 @@ int strncmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len)
                b++;
                n++;
        }
-       return (len - n)?(cpa - cpb):0;
+       return (len - n)?(*(COPY_UCS2_CHAR(&cpa,a)) - *(COPY_UCS2_CHAR(&cpb,b))):0;
 }
 
 /*******************************************************************
@@ -599,7 +599,7 @@ int strcasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b)
                a++;
                b++;
        }
-       return (tolower_w(cpa) - tolower_w(cpb));
+       return (tolower_w(*(COPY_UCS2_CHAR(&cpa,a))) - tolower_w(*(COPY_UCS2_CHAR(&cpb,b))));
 }
 
 /*******************************************************************
@@ -616,7 +616,7 @@ int strncasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len)
                b++;
                n++;
        }
-       return (len - n)?(tolower_w(cpa) - tolower_w(cpb)):0;
+       return (len - n)?(tolower_w(*(COPY_UCS2_CHAR(&cpa,a))) - tolower_w(*(COPY_UCS2_CHAR(&cpb,b)))):0;
 }
 
 /*******************************************************************