1/* strcasecmp.c - functions for case-insensitive string comparison. */ 2 3/* Copyright (C) 1995 Free Software Foundation, Inc. 4 5 This file is part of GNU Bash, the Bourne Again SHell. 6 7 Bash is free software: you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 Bash is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with Bash. If not, see <http://www.gnu.org/licenses/>. 19*/ 20 21#include <config.h> 22 23#if !defined (HAVE_STRCASECMP) 24 25#include <stdc.h> 26#include <bashansi.h> 27#include <chartypes.h> 28 29/* Compare at most COUNT characters from string1 to string2. Case 30 doesn't matter. */ 31int 32strncasecmp (string1, string2, count) 33 const char *string1; 34 const char *string2; 35 int count; 36{ 37 register const char *s1; 38 register const char *s2; 39 register int r; 40 41 if (count <= 0 || (string1 == string2)) 42 return 0; 43 44 s1 = string1; 45 s2 = string2; 46 do 47 { 48 if ((r = TOLOWER ((unsigned char) *s1) - TOLOWER ((unsigned char) *s2)) != 0) 49 return r; 50 if (*s1++ == '\0') 51 break; 52 s2++; 53 } 54 while (--count != 0); 55 56 return (0); 57} 58 59/* strcmp (), but caseless. */ 60int 61strcasecmp (string1, string2) 62 const char *string1; 63 const char *string2; 64{ 65 register const char *s1; 66 register const char *s2; 67 register int r; 68 69 s1 = string1; 70 s2 = string2; 71 72 if (s1 == s2) 73 return (0); 74 75 while ((r = TOLOWER ((unsigned char)*s1) - TOLOWER ((unsigned char)*s2)) == 0) 76 { 77 if (*s1++ == '\0') 78 return 0; 79 s2++; 80 } 81 82 return (r); 83} 84#endif /* !HAVE_STRCASECMP */ 85