]> git.ipfire.org Git - thirdparty/glibc.git/blame - string/strncase.c
malloc: set NON_MAIN_ARENA flag for reclaimed memalign chunk (BZ #30101)
[thirdparty/glibc.git] / string / strncase.c
CommitLineData
c84142e8
UD
1/* Compare at most N characters of two strings without taking care for
2 the case.
6d7e8eda 3 Copyright (C) 1992-2023 Free Software Foundation, Inc.
c84142e8
UD
4 This file is part of the GNU C Library.
5
6 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
c84142e8
UD
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 14 Lesser General Public License for more details.
c84142e8 15
41bdb6e2 16 You should have received a copy of the GNU Lesser General Public
59ba27a6 17 License along with the GNU C Library; if not, see
5a82c748 18 <https://www.gnu.org/licenses/>. */
28f540f4 19
0501d603
UD
20#ifdef HAVE_CONFIG_H
21# include <config.h>
22#endif
23
28f540f4
RM
24#include <string.h>
25#include <ctype.h>
26
c84142e8
UD
27#ifndef weak_alias
28# define __strncasecmp strncasecmp
0501d603
UD
29# define TOLOWER(Ch) tolower (Ch)
30#else
3bc9b83f 31# include <locale/localeinfo.h>
0501d603
UD
32# ifdef USE_IN_EXTENDED_LOCALE_MODEL
33# define __strncasecmp __strncasecmp_l
0501d603 34# endif
3bc9b83f 35# define TOLOWER(Ch) __tolower_l ((Ch), loc)
0501d603
UD
36#endif
37
38#ifdef USE_IN_EXTENDED_LOCALE_MODEL
af85385f 39# define LOCALE_PARAM , locale_t loc
0501d603
UD
40#else
41# define LOCALE_PARAM
c84142e8
UD
42#endif
43
28f540f4
RM
44/* Compare no more than N characters of S1 and S2,
45 ignoring case, returning less than, equal to or
46 greater than zero if S1 is lexicographically less
47 than, equal to or greater than S2. */
48int
80d9be81 49__strncasecmp (const char *s1, const char *s2, size_t n LOCALE_PARAM)
28f540f4 50{
3bc9b83f 51#if defined _LIBC && !defined USE_IN_EXTENDED_LOCALE_MODEL
af85385f 52 locale_t loc = _NL_CURRENT_LOCALE;
3bc9b83f 53#endif
c84142e8
UD
54 const unsigned char *p1 = (const unsigned char *) s1;
55 const unsigned char *p2 = (const unsigned char *) s2;
f5e6e2ee 56 int result;
28f540f4
RM
57
58 if (p1 == p2 || n == 0)
59 return 0;
60
f5e6e2ee
UD
61 while ((result = TOLOWER (*p1) - TOLOWER (*p2++)) == 0)
62 if (*p1++ == '\0' || --n == 0)
63 break;
28f540f4 64
f5e6e2ee 65 return result;
28f540f4 66}
0501d603 67#ifndef __strncasecmp
bba7bb78 68weak_alias (__strncasecmp, strncasecmp)
c84142e8 69#endif