IMHO
*(const char*)pattern + index)
does not work correct, something like
if (((const char*)mem)[idx++] == ((const char*)pattern)[index])
might compare the bytes