++ if (isupper(ch1))
++ ch1 = tolower(ch1);
++ if (isupper(ch2))
++ ch2 = tolower(ch2);
++ }
++ } while ((dif = (int)ch1 - (int)ch2) == 0);
+
+ return dif;
+ }
+--- old/ifuncs.h
++++ new/ifuncs.h
+@@ -98,3 +98,38 @@ toUpper(const char *ptr)
+ {
+ return toupper(*(unsigned char *)ptr);
+ }
++
++static inline int
++strEQ(const char *s1, const char *s2)
++{
++ return strcmp(s1, s2) == 0;
++}
++
++static inline int
++strnEQ(const char *s1, const char *s2, size_t n)
++{
++ return strncmp(s1, s2, n) == 0;
++}
++
++static inline int
++ic_strEQ(const char *s1, const char *s2)
++{
++ extern int ignore_case;
++ if (ignore_case)
++ return strcasecmp(s1, s2) == 0;
++ return strcmp(s1, s2) == 0;
++}
++
++static inline int
++ic_strnEQ(const char *s1, const char *s2, size_t n)
++{
++ extern int ignore_case;
++ if (ignore_case)
++ return strncasecmp(s1, s2, n) == 0;
++ return strncmp(s1, s2, n) == 0;
++}
++
++#define strNE(s1,s2) (!strEQ(s1,s2))
++#define strnNE(s1,s2,n) (!strnEQ(s1,s2,n))
++#define ic_strNE(s1,s2) (!ic_strEQ(s1,s2))
++#define ic_strnNE(s1,s2) (!ic_strnEQ(s1,s2,n))