diff options
author | Bruno Haible <bruno@clisp.org> | 2011-02-06 12:25:31 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2011-02-07 23:36:05 +0100 |
commit | e1cc6ea006da8ff4527e055e7aa2db0d69351a05 (patch) | |
tree | a3d51024cb1a84d9da95be91626c434ba4004168 /lib/wcsncasecmp-impl.h | |
parent | 98b6cac347783a047671e9a9235933dddd9e5aa8 (diff) | |
download | gnulib-e1cc6ea006da8ff4527e055e7aa2db0d69351a05.tar.gz |
New module 'wcsncasecmp'.
* modules/wcsncasecmp: New file.
* lib/wchar.in.h (wcsncasecmp): New declaration.
* lib/wcsncasecmp.c: New file.
* lib/wcsncasecmp-impl.h: New file, from libutf8 with modifications.
* m4/wcsncasecmp.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsncasecmp is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNCASECMP, HAVE_WCSNCASECMP.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSNCASECMP,
HAVE_WCSNCASECMP.
* tests/test-wchar-c++.cc: Test the declaration of wcsncasecmp.
* doc/posix-functions/wcsncasecmp.texi: Mention the new module.
Diffstat (limited to 'lib/wcsncasecmp-impl.h')
-rw-r--r-- | lib/wcsncasecmp-impl.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/wcsncasecmp-impl.h b/lib/wcsncasecmp-impl.h new file mode 100644 index 0000000000..234f27a770 --- /dev/null +++ b/lib/wcsncasecmp-impl.h @@ -0,0 +1,36 @@ +/* Compare two wide strings ignoring case. + Copyright (C) 1999, 2011 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +wcsncasecmp (const wchar_t *s1, const wchar_t *s2, size_t n) +{ + for (; n > 0;) + { + wchar_t wc1 = towlower (*s1++); + wchar_t wc2 = towlower (*s2++); + if (wc1 != (wchar_t)'\0' && wc1 == wc2) + { + n--; + continue; + } + /* Note that wc1 and wc2 each have at most 31 bits. */ + return (int)wc1 - (int)wc2; + /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, + = 0 if wc1 and wc2 are both '\0'. */ + } + return 0; +} |