From: Bruno Haible Date: Tue, 16 Aug 2005 16:08:22 +0000 (+0000) Subject: Simplify by using mb_casecmp. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b293a2674abb2574317bc644e4511b010f725c0d;p=pspp Simplify by using mb_casecmp. --- diff --git a/lib/ChangeLog b/lib/ChangeLog index b75cf9baee..394c5c97cc 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2005-08-16 Bruno Haible + + * mbchar.h (mb_cmp, mb_casecmp): Order the invalid characters after + the valid ones. Makes the comparison operations transitive: + cmp (a, b) < 0 && cmp (b, c) < 0 ==> cmp (a, c) < 0. + * strcasecmp.c (strcasecmp): Use mb_casecmp. + 2005-08-16 Bruno Haible * strcase.h (strcasecmp): Add note in comments. diff --git a/lib/strcasecmp.c b/lib/strcasecmp.c index 70c22a1889..65a29a9587 100644 --- a/lib/strcasecmp.c +++ b/lib/strcasecmp.c @@ -116,12 +116,6 @@ mbiter_multi_next (struct mbiter_multi *iter) iter->next_done = true; } -static inline void -mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff) -{ - iter->cur.ptr += ptrdiff; -} - /* Iteration macros. */ typedef struct mbiter_multi mbi_iterator_t; #define mbi_init(iter, startptr) \ @@ -167,44 +161,11 @@ strcasecmp (const char *s1, const char *s2) while (mbi_avail (iter1) && mbi_avail (iter2)) { - /* Sort invalid characters after all valid ones. */ - if (!mbi_cur (iter1).wc_valid) - { - if (!mbi_cur (iter2).wc_valid) - { - /* Compare two invalid characters. */ - int cmp; - - if (mbi_cur (iter1).bytes > mbi_cur (iter2).bytes) - return 1; - if (mbi_cur (iter1).bytes < mbi_cur (iter2).bytes) - return -1; - cmp = memcmp (mbi_cur_ptr (iter1), mbi_cur_ptr (iter2), - mbi_cur (iter1).bytes); - if (cmp != 0) - return cmp; - } - else - /* mbi_cur (iter1) invalid, mbi_cur (iter2) valid. */ - return 1; - } - else - { - if (!mbi_cur (iter2).wc_valid) - /* mbi_cur (iter1) valid, mbi_cur (iter2) invalid. */ - return -1; - else - { - /* Compare two valid characters. */ - wchar_t c1 = towlower (mbi_cur (iter1).wc); - wchar_t c2 = towlower (mbi_cur (iter2).wc); - - if (c1 > c2) - return 1; - if (c1 < c2) - return -1; - } - } + int cmp = mb_casecmp (mbi_cur (iter1), mbi_cur (iter2)); + + if (cmp != 0) + return cmp; + mbi_advance (iter1); mbi_advance (iter2); }