Mercurial > hg > octave-nkf > gnulib-hg
changeset 6051:c9d12df22e6e
Simplify by using mb_casecmp.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 16 Aug 2005 16:08:22 +0000 |
parents | 2b88df66cd7b |
children | 29087842aa86 |
files | lib/ChangeLog lib/strcasecmp.c |
diffstat | 2 files changed, 10 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2005-08-16 Bruno Haible <bruno@clisp.org> + + * 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 <bruno@clisp.org> * strcase.h (strcasecmp): Add note in comments.
--- a/lib/strcasecmp.c +++ b/lib/strcasecmp.c @@ -116,12 +116,6 @@ 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 @@ 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; + int cmp = mb_casecmp (mbi_cur (iter1), mbi_cur (iter2)); - 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 (cmp != 0) + return cmp; - if (c1 > c2) - return 1; - if (c1 < c2) - return -1; - } - } mbi_advance (iter1); mbi_advance (iter2); }