Miles Bader <miles@xxxxxxx> writes: > Pierre Habouzit <madcoder@xxxxxxxxxx> writes: >>> strbuf->buf is always non-NULL and NUL-terminated so you could just do >>> >>> static inline int strbuf_cmp(const struct strbuf *a, const struct strbuf *b) >>> { >>> int len = a->len < b->len ? a->len : b->len; >>> return memcmp(a->buf, b->buf, len + 1); >>> } >> >> doesn't work, because a buffer can have (in some very specific cases) >> an embeded NUL. > > Couldn't you then just do: > > int len = a->len < b->len ? a->len : b->len; > int cmp = memcmp(a->buf, b->buf, len); > if (cmp == 0) > cmp = b->len - a->len; > return cmp; > > [In the case where one string is a prefix of the other, then the longer > one is "greater".] > > ? I fail to see where this variant is simpler than what we started the journey of simplification from. The only change I consider worth checking from the whole series in this thread is making the function inline. All the rest pretty much was worse than what we started from in that it needed to reevaluate more conditions and turned out more complicated and obfuscate even to the human reader. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html