diff options
Diffstat (limited to 'wcsmbs/wcsncase.c')
-rw-r--r-- | wcsmbs/wcsncase.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/wcsmbs/wcsncase.c b/wcsmbs/wcsncase.c index c5b10c5..0f1dce2 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 |