1/* -*- buffer-read-only: t -*- vi: set ro: */ 2/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ 3#line 1 4/* c-strncasecmp.c -- case insensitive string comparator in C locale 5 Copyright (C) 1998-1999, 2005-2006, 2009-2010 Free Software Foundation, Inc. 6 7 This program 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, or (at your option) 10 any later version. 11 12 This program 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 this program; if not, write to the Free Software Foundation, 19 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 20 21#include <config.h> 22 23/* Specification. */ 24#include "c-strcase.h" 25 26#include <limits.h> 27 28#include "c-ctype.h" 29 30int 31c_strncasecmp (const char *s1, const char *s2, size_t n) 32{ 33 register const unsigned char *p1 = (const unsigned char *) s1; 34 register const unsigned char *p2 = (const unsigned char *) s2; 35 unsigned char c1, c2; 36 37 if (p1 == p2 || n == 0) 38 return 0; 39 40 do 41 { 42 c1 = c_tolower (*p1); 43 c2 = c_tolower (*p2); 44 45 if (--n == 0 || c1 == '\0') 46 break; 47 48 ++p1; 49 ++p2; 50 } 51 while (c1 == c2); 52 53 if (UCHAR_MAX <= INT_MAX) 54 return c1 - c2; 55 else 56 /* On machines where 'char' and 'int' are types of the same size, the 57 difference of two 'unsigned char' values - including the sign bit - 58 doesn't fit in an 'int'. */ 59 return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); 60} 61