#include #include int ffs(int i) { for (unsigned idx = 0; idx < sizeof(i) * 8; idx++) if (i & (1 << idx)) return i + 1; return 0; } int strcasecmp(const char* s1, const char* s2) { const unsigned char* u1 = (unsigned char*)s1; const unsigned char* u2 = (unsigned char*)s2; for (; *u1 && *u2; u1++, u2++) if (tolower(*u1) != tolower(*u2)) break; return tolower(*u1) - tolower(*u2); } int strncasecmp(const char* s1, const char* s2, size_t n) { const unsigned char* u1 = (unsigned char*)s1; const unsigned char* u2 = (unsigned char*)s2; for (; --n && *u1 && *u2; u1++, u2++) if (tolower(*u1) != tolower(*u2)) break; return tolower(*u1) - tolower(*u2); }