1 /* Copyright (C) 1996-2022 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 __wmemcmp(const wchar_t * s1,const wchar_t * s2,size_t n)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 86