(root)/
glibc-2.38/
wcsmbs/
wcscasecmp.c
       1  /* Copyright (C) 1991-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #ifdef HAVE_CONFIG_H
      19  # include <config.h>
      20  #endif
      21  
      22  #include <wctype.h>
      23  #include <wchar.h>
      24  
      25  #ifndef weak_alias
      26  # define __wcscasecmp wcscasecmp
      27  # define TOLOWER(Ch) towlower (Ch)
      28  #else
      29  # ifdef USE_IN_EXTENDED_LOCALE_MODEL
      30  #  define __wcscasecmp __wcscasecmp_l
      31  #  define TOLOWER(Ch) __towlower_l ((Ch), loc)
      32  # else
      33  #  define TOLOWER(Ch) towlower (Ch)
      34  # endif
      35  #endif
      36  
      37  #ifdef USE_IN_EXTENDED_LOCALE_MODEL
      38  # define LOCALE_PARAM , locale_t loc
      39  #else
      40  # define LOCALE_PARAM
      41  #endif
      42  
      43  /* Compare S1 and S2, ignoring case, returning less than, equal to or
      44     greater than zero if S1 is lexicographically less than,
      45     equal to or greater than S2.  */
      46  int
      47  __wcscasecmp (const wchar_t *s1, const wchar_t *s2 LOCALE_PARAM)
      48  {
      49    wint_t c1, c2;
      50  
      51    if (s1 == s2)
      52      return 0;
      53  
      54    do
      55      {
      56        c1 = TOLOWER (*s1++);
      57        c2 = TOLOWER (*s2++);
      58        if (c1 == L'\0')
      59  	break;
      60      }
      61    while (c1 == c2);
      62  
      63    return c1 - c2;
      64  }
      65  #ifndef __wcscasecmp
      66  weak_alias (__wcscasecmp, wcscasecmp)
      67  #endif