summaryrefslogtreecommitdiff
path: root/wcsmbs/wcsncase.c
diff options
context:
space:
mode:
Diffstat (limited to 'wcsmbs/wcsncase.c')
-rw-r--r--wcsmbs/wcsncase.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/wcsmbs/wcsncase.c b/wcsmbs/wcsncase.c
index c5b10c57a4..0f1dce261b 100644
--- a/wcsmbs/wcsncase.c
+++ b/wcsmbs/wcsncase.c
@@ -18,11 +18,31 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <wchar.h>
#include <wctype.h>
#ifndef weak_alias
# define __wcsncasecmp wcsncasecmp
+# define TOLOWER(Ch) towlower (Ch)
+#else
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# define __wcsncasecmp __wcsncasecmp_l
+# define TOLOWER(Ch) __towlower_l ((Ch), loc)
+# else
+# define TOLOWER(Ch) towlower (Ch)
+# endif
+#endif
+
+#ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# define LOCALE_PARAM , loc
+# define LOCALE_PARAM_DECL __locale_t loc;
+#else
+# define LOCALE_PARAM
+# define LOCALE_PARAM_DECL
#endif
/* Compare no more than N wide characters of S1 and S2,
@@ -30,10 +50,11 @@
greater than zero if S1 is lexicographically less
than, equal to or greater than S2. */
int
-__wcsncasecmp (s1, s2, n)
+__wcsncasecmp (s1, s2, n LOCALE_PARAM)
const wchar_t *s1;
const wchar_t *s2;
size_t n;
+ LOCALE_PARAM_DECL
{
wint_t c1, c2;
@@ -42,14 +63,14 @@ __wcsncasecmp (s1, s2, n)
do
{
- c1 = (wint_t) towlower (*s1++);
- c2 = (wint_t) towlower (*s2++);
+ c1 = (wint_t) TOLOWER (*s1++);
+ c2 = (wint_t) TOLOWER (*s2++);
if (c1 == L'\0' || c1 != c2)
return c1 - c2;
} while (--n > 0);
return c1 - c2;
}
-#ifdef weak_alias
+#ifndef __wcsncasecmp
weak_alias (__wcsncasecmp, wcsncasecmp)
#endif