00001 00005 #include "system.h" 00006 #include "rpmio.h" 00007 #include "debug.h" 00008 00009 static inline unsigned char xtolower(unsigned char c) 00010 { 00011 return ((c >= 'A' && c <= 'Z') ? (c | 0x20) : c); 00012 } 00013 00014 int xstrcasecmp(const char *s1, const char *s2) 00015 { 00016 const unsigned char *p1 = (const unsigned char *) s1; 00017 const unsigned char *p2 = (const unsigned char *) s2; 00018 unsigned char c1, c2; 00019 00020 if (p1 == p2) 00021 return 0; 00022 00023 do 00024 { 00025 c1 = xtolower (*p1++); 00026 c2 = xtolower (*p2++); 00027 if (c1 == '\0') 00028 break; 00029 } 00030 while (c1 == c2); 00031 00032 return c1 - c2; 00033 } 00034 00035 int xstrncasecmp(const char *s1, const char *s2, size_t n) 00036 { 00037 const unsigned char *p1 = (const unsigned char *) s1; 00038 const unsigned char *p2 = (const unsigned char *) s2; 00039 unsigned char c1, c2; 00040 00041 if (p1 == p2 || n == 0) 00042 return 0; 00043 00044 do 00045 { 00046 c1 = xtolower (*p1++); 00047 c2 = xtolower (*p2++); 00048 if (c1 == '\0' || c1 != c2) 00049 return c1 - c2; 00050 } while (--n > 0); 00051 00052 return c1 - c2; 00053 }