Re: [PATCH 06/14] packfile: express constants in terms of the_hash_algo
- From
Stefan Beller <sbeller@google.com>
- Date
- Oct 8, 2018, 22:59 UTC
- Message-ID
- <CAGZ79kbirX6i+qkig6R1YOAsv=0BirhAVkar+AdBLyHgkrXYyg@mail.gmail.com>
- In-Reply-To
- <20181008215701.779099-7-sandals@crustytoothpaste.net>
On Mon, Oct 8, 2018 at 2:57 PM brian m. carlson <sandals@crustytoothpaste.net> wrote:
> > Replace uses of GIT_SHA1_RAWSZ with references to the_hash_algo to avoid > dependence on a particular hash length.
Unlike the previous patches, this is dealing directly with packfiles, which (I would think) carry their own hash function selector? (i.e. packfiles up to version 4 are sha1 hardcoded and version 5 and onwards will have a hash type field. Usually that hash type would match what is in the_repository, but you could obtain packfiles out of band, or the translation table that we plan to have might be part of the packfile/idx file?)
Show 27 quoted lines
>
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
> packfile.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/packfile.c b/packfile.c
> index 841b36182f..17f993b5bf 100644
> --- a/packfile.c
> +++ b/packfile.c
> @@ -1121,13 +1121,14 @@ int unpack_object_header(struct packed_git *p,
> void mark_bad_packed_object(struct packed_git *p, const unsigned char *sha1)
> {
> unsigned i;
> + const unsigned hashsz = the_hash_algo->rawsz;
> for (i = 0; i < p->num_bad_objects; i++)
> - if (hasheq(sha1, p->bad_object_sha1 + GIT_SHA1_RAWSZ * i))
> + if (hasheq(sha1, p->bad_object_sha1 + hashsz * i))
> return;
> p->bad_object_sha1 = xrealloc(p->bad_object_sha1,
> st_mult(GIT_MAX_RAWSZ,
> st_add(p->num_bad_objects, 1)));
> - hashcpy(p->bad_object_sha1 + GIT_SHA1_RAWSZ * p->num_bad_objects, sha1);
> + hashcpy(p->bad_object_sha1 + hashsz * p->num_bad_objects, sha1);
> p->num_bad_objects++;
> }
>