Home | History | Annotate | Download | only in libyasm
      1 /*
      2  * strcasecmp() implementation for systems that don't have it or stricmp()
      3  * or strcmpi().
      4  *
      5  * Copyright (c) 1987, 1993
      6  *      The Regents of the University of California.  All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  * 1. Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  * 3. Neither the name of the University nor the names of its contributors
     17  *    may be used to endorse or promote products derived from this software
     18  *    without specific prior written permission.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     30  * SUCH DAMAGE.
     31  */
     32 #include "util.h"
     33 
     34 #ifndef USE_OUR_OWN_STRCASECMP
     35 #undef yasm__strcasecmp
     36 #undef yasm__strncasecmp
     37 #endif
     38 
     39 #if defined(LIBC_SCCS) && !defined(lint)
     40 static char sccsid[] = "@(#)strcasecmp.c        8.1 (Berkeley) 6/4/93";
     41 #endif /* LIBC_SCCS and not lint */
     42 
     43 #include <ctype.h>
     44 
     45 int
     46 yasm__strcasecmp(const char *s1, const char *s2)
     47 {
     48 #ifdef HAVE_STRCASECMP
     49     return strcasecmp(s1, s2);
     50 #elif HAVE_STRICMP
     51     return stricmp(s1, s2);
     52 #elif HAVE__STRICMP
     53     return _stricmp(s1, s2);
     54 #elif HAVE_STRCMPI
     55     return strcmpi(s1, s2);
     56 #else
     57         const unsigned char
     58                         *us1 = (const unsigned char *)s1,
     59                         *us2 = (const unsigned char *)s2;
     60 
     61         while (tolower(*us1) == tolower(*us2++))
     62                 if (*us1++ == '\0')
     63                         return (0);
     64         return (tolower(*us1) - tolower(*--us2));
     65 #endif
     66 }
     67 
     68 int
     69 yasm__strncasecmp(const char *s1, const char *s2, size_t n)
     70 {
     71 #ifdef HAVE_STRCASECMP
     72     return strncasecmp(s1, s2, n);
     73 #elif HAVE_STRICMP
     74     return strnicmp(s1, s2, n);
     75 #elif HAVE__STRNICMP
     76     return _strnicmp(s1, s2, n);
     77 #elif HAVE_STRCMPI
     78     return strncmpi(s1, s2, n);
     79 #else
     80         const unsigned char
     81                         *us1 = (const unsigned char *)s1,
     82                         *us2 = (const unsigned char *)s2;
     83 
     84         if (n != 0) {
     85                 do {
     86                         if (tolower(*us1) != tolower(*us2++))
     87                                 return (tolower(*us1) - tolower(*--us2));
     88                         if (*us1++ == '\0')
     89                                 break;
     90                 } while (--n != 0);
     91         }
     92         return (0);
     93 #endif
     94 }
     95