Subject: Re: [PATCH 2/1 alt] peel_onion: do not assume length of x_type globals

From: Junio C Hamano <[email-masked]>
Date: Tue, 03 Sep 2013 13:46:05 -0700

Jeff King <[email-masked]> writes:

> If you _really_ wanted to abstract it, you could make commit_type a
> macro and use string concatenation along with prefixcmp. But that is
> going in the direction of less readable, I think. :)

;-) we are on the same wave-length.

Thanks, will apply.

>
> This has probably consumed enough brain cycles for such a small and
> probably unimportant cleanup. I'll let Junio pick from the 2 options (or
> choose to do nothing at all) as he sees fit.
>
>  sha1_name.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/sha1_name.c b/sha1_name.c
> index 6dc496d..2f6e5ab 100644
> --- a/sha1_name.c
> +++ b/sha1_name.c
> @@ -677,13 +677,13 @@ static int peel_onion(const char *name, int len, unsigned char *sha1)
>  		return -1;
>  
>  	sp++; /* beginning of type name, or closing brace for empty */
> -	if (!strncmp(commit_type, sp, 6) && sp[6] == '}')
> +	if (!prefixcmp(sp, "commit}"))
>  		expected_type = OBJ_COMMIT;
> -	else if (!strncmp(tag_type, sp, 3) && sp[3] == '}')
> +	else if (!prefixcmp(sp, "tag}"))
>  		expected_type = OBJ_TAG;
> -	else if (!strncmp(tree_type, sp, 4) && sp[4] == '}')
> +	else if (!prefixcmp(sp, "tree}"))
>  		expected_type = OBJ_TREE;
> -	else if (!strncmp(blob_type, sp, 4) && sp[4] == '}')
> +	else if (!prefixcmp(sp, "blob}"))
>  		expected_type = OBJ_BLOB;
>  	else if (!prefixcmp(sp, "object}"))
>  		expected_type = OBJ_ANY;