LCOV - code coverage report
Current view: top level - lib/gl - c-strncasecmp.c (source / functions) Hit Total Coverage
Test: GNU Libidn Lines: 11 12 91.7 %
Date: 2020-07-22 17:53:13 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* c-strncasecmp.c -- case insensitive string comparator in C locale
       2             :    Copyright (C) 1998-1999, 2005-2006, 2009-2020 Free Software Foundation, Inc.
       3             : 
       4             :    This program is free software; you can redistribute it and/or modify
       5             :    it under the terms of the GNU Lesser General Public License as published by
       6             :    the Free Software Foundation; either version 2.1, or (at your option)
       7             :    any later version.
       8             : 
       9             :    This program 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
      12             :    GNU Lesser General Public License for more details.
      13             : 
      14             :    You should have received a copy of the GNU Lesser General Public License
      15             :    along with this program; if not, see <https://www.gnu.org/licenses/>.  */
      16             : 
      17             : #include <config.h>
      18             : 
      19             : /* Specification.  */
      20             : #include "c-strcase.h"
      21             : 
      22             : #include <limits.h>
      23             : 
      24             : #include "c-ctype.h"
      25             : 
      26             : int
      27       42151 : c_strncasecmp (const char *s1, const char *s2, size_t n)
      28             : {
      29       42151 :   register const unsigned char *p1 = (const unsigned char *) s1;
      30       42151 :   register const unsigned char *p2 = (const unsigned char *) s2;
      31             :   unsigned char c1, c2;
      32             : 
      33       42151 :   if (p1 == p2 || n == 0)
      34           0 :     return 0;
      35             : 
      36             :   do
      37             :     {
      38      109823 :       c1 = c_tolower (*p1);
      39      109823 :       c2 = c_tolower (*p2);
      40             : 
      41      109823 :       if (--n == 0 || c1 == '\0')
      42             :         break;
      43             : 
      44       73983 :       ++p1;
      45       73983 :       ++p2;
      46             :     }
      47       73983 :   while (c1 == c2);
      48             : 
      49             :   if (UCHAR_MAX <= INT_MAX)
      50       42151 :     return c1 - c2;
      51             :   else
      52             :     /* On machines where 'char' and 'int' are types of the same size, the
      53             :        difference of two 'unsigned char' values - including the sign bit -
      54             :        doesn't fit in an 'int'.  */
      55             :     return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
      56             : }

Generated by: LCOV version 1.13