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 }