On Thu, Jan 10, 2019 at 04:25:50AM +0000, brian m. carlson wrote:
> diff --git a/tree-walk.c b/tree-walk.c
> index 1e040fc20e..b6daeab16d 100644
> --- a/tree-walk.c
> +++ b/tree-walk.c
> @@ -48,7 +48,8 @@ static int decode_tree_entry(struct tree_desc *desc, const
> char *buf, unsigned l
> /* Initialize the descriptor entry */
> desc->entry.path = path;
> desc->entry.mode = canon_mode(mode);
> - desc->entry.oid = (const struct object_id *)(path + len);
> + desc->entry.pathlen = len - 1;
> + memcpy(desc->entry.oid.hash, path + len, the_hash_algo->rawsz);
>
> return 0;
> }
This one really is a hashcpy() now, right, even after your final patch?
I guess using rawsz explicitly makes it match the computation here:
> @@ -107,7 +108,7 @@ static void entry_extract(struct tree_desc *t, struct
> name_entry *a)
> static int update_tree_entry_internal(struct tree_desc *desc, struct strbuf
> *err)
> {
> const void *buf = desc->buffer;
> - const unsigned char *end = desc->entry.oid->hash + the_hash_algo->rawsz;
> + const unsigned char *end = (const unsigned char *)desc->entry.path +
> desc->entry.pathlen + 1 + the_hash_algo->rawsz;
> unsigned long size = desc->size;
> unsigned long len = end - (const unsigned char *)buf;
So maybe it's better to be explicit as you have here. (Mostly just as I
was reading it, I was looking for a use of hashcpy and was surprised not
to find it ;) ).
> @@ -175,9 +176,11 @@ void setup_traverse_info(struct traverse_info *info,
> const char *base)
> pathlen--;
> info->pathlen = pathlen ? pathlen + 1 : 0;
> info->name.path = base;
> - info->name.oid = (void *)(base + pathlen + 1);
> - if (pathlen)
> + info->name.pathlen = pathlen;
> + if (pathlen) {
> + memcpy(info->name.oid.hash, (base + pathlen + 1),
> the_hash_algo->rawsz);
> info->prev = &dummy;
> + }
> }
>
Ditto here, I think.
-Peff