inline bool strEqual(bool case_sensitive, const StringData* sd1, const StringData* sd2) { if (sd1 == sd2) return true; if (sd1->size() != sd2->size()) return false; return case_sensitive ? (0 == memcmp(sd1->data(), sd2->data(), sd1->size())) : bstrcaseeq(sd1->data(), sd2->data(), sd1->size()); }
char* bstrrcasestr(const char* haystack, size_t haystackSize, const char* needle, size_t needleSize) { if (needleSize > haystackSize) { return nullptr; } const char* haystackPtr = haystack + (haystackSize - needleSize); for (;;) { if (bstrcaseeq(haystackPtr, needle, needleSize)) { return (char*)haystackPtr; } if (haystackPtr == haystack) return nullptr; --haystackPtr; } }