Re: [PATCH] Make strbuf_cmp inline, constify its arguments and optimize it a bit
- From
Miles Bader <miles@gnu.org>
- Date
- Oct 7, 2007, 15:46 UTC
- Message-ID
- <87sl4nlyg0.fsf@catnip.gol.com>
- In-Reply-To
- <20071007143912.GB10024@artemis.corp>
Pierre Habouzit <madcoder@debian.org> writes:
Show 10 quoted lines
>> 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".]
?
-Miles
-- "Suppose He doesn't give a shit? Suppose there is a God but He just doesn't give a shit?" [George Carlin]