Eric Blake <[EMAIL PROTECTED]> writes: > + size_t *table = (size_t *) malloca (m * sizeof (size_t)); > + if (table == NULL) > + return false;
Shouldn't this check for overflow in the multiplication? Something like this, perhaps? size_t *table; if (xalloc_oversized (m, sizeof *table)) return false; table = (size_t *) malloca (m * sizeof *table); if (table == NULL) return false; > + unsigned char b = (unsigned char) needle[i - 1]; > ... > + if (b == (unsigned char) needle[j]) Would it be cleaner to declare 'b' to be of type 'char' and avoid the casts? > + if ((unsigned char) needle[j] == (unsigned char) *phaystack) Can both casts be omitted? > + return memchr (haystack, (unsigned char) *Needle, haystack_len); Can the cast be omitted? > + return (void *) haystack; How about "return Haystack;"? That avoids a cast. (As you can tell, I prefer to avoid casts....) > + if (needle_len == 0) Perhaps a __builtin_expect would be helpful here?