Home | History | Annotate | Download | only in c-ares
      1 
      2 
      3 /* Copyright 1998 by the Massachusetts Institute of Technology.
      4  *
      5  * Permission to use, copy, modify, and distribute this
      6  * software and its documentation for any purpose and without
      7  * fee is hereby granted, provided that the above copyright
      8  * notice appear in all copies and that both that copyright
      9  * notice and this permission notice appear in supporting
     10  * documentation, and that the name of M.I.T. not be used in
     11  * advertising or publicity pertaining to distribution of the
     12  * software without specific, written prior permission.
     13  * M.I.T. makes no representations about the suitability of
     14  * this software for any purpose.  It is provided "as is"
     15  * without express or implied warranty.
     16  */
     17 
     18 #include "ares_setup.h"
     19 #include "ares_strcasecmp.h"
     20 
     21 #ifndef HAVE_STRCASECMP
     22 int ares_strcasecmp(const char *a, const char *b)
     23 {
     24 #if defined(HAVE_STRCMPI)
     25   return strcmpi(a, b);
     26 #elif defined(HAVE_STRICMP)
     27   return stricmp(a, b);
     28 #else
     29   size_t i;
     30 
     31   for (i = 0; i < (size_t)-1; i++) {
     32     int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
     33     int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
     34     if (c1 != c2)
     35       return c1-c2;
     36     if (!c1)
     37       break;
     38   }
     39   return 0;
     40 #endif
     41 }
     42 #endif
     43 
     44 #ifndef HAVE_STRNCASECMP
     45 int ares_strncasecmp(const char *a, const char *b, size_t n)
     46 {
     47 #if defined(HAVE_STRNCMPI)
     48   return strncmpi(a, b, n);
     49 #elif defined(HAVE_STRNICMP)
     50   return strnicmp(a, b, n);
     51 #else
     52   size_t i;
     53 
     54   for (i = 0; i < n; i++) {
     55     int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
     56     int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
     57     if (c1 != c2)
     58       return c1-c2;
     59     if (!c1)
     60       break;
     61   }
     62   return 0;
     63 #endif
     64 }
     65 #endif
     66 
     67