How stupid of me: > +int > +memcoll0 (const char *s1, size_t s1len, const char *s2, size_t s2len) > +{ > + int diff; > + if (!(s1len > 0 && s1[s1len] == '\0')) > + abort (); > + if (!(s2len > 0 && s2[s2len] == '\0')) > + abort ();
should obviously be s1[s1len - 1] and s2[s2len - 1].