parse_feature_request: make it easier to see feature values
authorJeff King <peff@peff.net>
Tue, 14 Aug 2012 01:59:27 +0000 (21:59 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 14 Aug 2012 04:52:36 +0000 (21:52 -0700)
commit9442710801b0b7b9aeefe60408d1835af138cfcc
tree3c4607b55efcc78035c7beb5091aa28dcd9af860
parent74991a98df79ff3702dcb3b5c22c7b9ec20cfead
parse_feature_request: make it easier to see feature values

We already take care to parse key/value capabilities like
"foo=bar", but the code does not provide a good way of
actually finding out what is on the right-hand side of the
"=".

A server using "parse_feature_request" could accomplish this
with some extra parsing. You must skip past the "key"
portion manually, check for "=" versus NUL or space, and
then find the length by searching for the next space (or
NUL).  But clients can't even do that, since the
"server_supports" interface does not even return the
pointer.

Instead, let's have our parser share more information by
providing a pointer to the value and its length. The
"parse_feature_value" function returns a pointer to the
feature's value portion, along with the length of the value.
If the feature is missing, NULL is returned. If it does not
have an "=", then a zero-length value is returned.

Similarly, "server_feature_value" behaves in the same way,
but always checks the static server_feature_list variable.

We can then implement "server_supports" in terms of
"server_feature_value". We cannot implement the original
"parse_feature_request" in terms of our new function,
because it returned a pointer to the beginning of the
feature. However, no callers actually cared about the value
of the returned pointer, so we can simplify it to a boolean
just as we do for "server_supports".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h
connect.c