(root)/
glibc-2.38/
wcsmbs/
wmemcmp.c
       1  /* Copyright (C) 1996-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  #include <wchar.h>
      19  
      20  #ifdef WMEMCMP
      21  # define __wmemcmp WMEMCMP
      22  #endif
      23  
      24  int
      25  __wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n)
      26  {
      27    wchar_t c1;
      28    wchar_t c2;
      29  
      30    while (n >= 4)
      31      {
      32        c1 = s1[0];
      33        c2 = s2[0];
      34        if (c1 - c2 != 0)
      35  	return c1 > c2 ? 1 : -1;
      36        c1 = s1[1];
      37        c2 = s2[1];
      38        if (c1 - c2 != 0)
      39  	return c1 > c2 ? 1 : -1;
      40        c1 = s1[2];
      41        c2 = s2[2];
      42        if (c1 - c2 != 0)
      43  	return c1 > c2 ? 1 : -1;
      44        c1 = s1[3];
      45        c2 = s2[3];
      46        if (c1 - c2 != 0)
      47  	return c1 > c2 ? 1 : -1;
      48        s1 += 4;
      49        s2 += 4;
      50        n -= 4;
      51      }
      52  
      53    if (n > 0)
      54      {
      55        c1 = s1[0];
      56        c2 = s2[0];
      57        if (c1 - c2 != 0)
      58  	return c1 > c2 ? 1 : -1;
      59        ++s1;
      60        ++s2;
      61        --n;
      62      }
      63    if (n > 0)
      64      {
      65        c1 = s1[0];
      66        c2 = s2[0];
      67        if (c1 - c2 != 0)
      68  	return c1 > c2 ? 1 : -1;
      69        ++s1;
      70        ++s2;
      71        --n;
      72      }
      73    if (n > 0)
      74      {
      75        c1 = s1[0];
      76        c2 = s2[0];
      77        if (c1 - c2 != 0)
      78  	return c1 > c2 ? 1 : -1;
      79      }
      80  
      81    return 0;
      82  }
      83  #ifndef WMEMCMP
      84  weak_alias (__wmemcmp, wmemcmp)
      85  #endif