On Mon, Oct 1, 2018 at 3:46 PM Ben Peart <[email protected]> wrote:
> @@ -1890,6 +1891,46 @@ static size_t estimate_cache_size(size_t ondisk_size,
> unsigned int entries)
> static size_t read_eoie_extension(const char *mmap, size_t mmap_size);
> static void write_eoie_extension(struct strbuf *sb, git_hash_ctx
> *eoie_context, size_t offset);
>
> +struct load_index_extensions
> +{
> +#ifndef NO_PTHREADS
> + pthread_t pthread;
> +#endif
> + struct index_state *istate;
> + const char *mmap;
> + size_t mmap_size;
> + unsigned long src_offset;
> +};
> +
> +static void *load_index_extensions(void *_data)
> +{
> + struct load_index_extensions *p = _data;
> + unsigned long src_offset = p->src_offset;
> +
> + while (src_offset <= p->mmap_size - the_hash_algo->rawsz - 8) {
> + /* After an array of active_nr index entries,
> + * there can be arbitrary number of extended
> + * sections, each of which is prefixed with
> + * extension name (4-byte) and section length
> + * in 4-byte network byte order.
> + */
> + uint32_t extsize;
> + memcpy(&extsize, p->mmap + src_offset + 4, 4);
> + extsize = ntohl(extsize);
This could be get_be32() so that the next person will not need to do
another cleanup patch.
> + if (read_index_extension(p->istate,
> + p->mmap + src_offset,
> + p->mmap + src_offset + 8,
> + extsize) < 0) {
This alignment is misleading because the conditions are aligned with
the code block below. If you can't align it with the '(', then just
add another tab.
> + munmap((void *)p->mmap, p->mmap_size);
This made me pause for a bit since we should not need to cast back to
void *. It turns out you need this because mmap pointer is const. But
you don't even need to munmap here. We're dying, the OS will clean
everything up.
> + die(_("index file corrupt"));
> + }
> + src_offset += 8;
> + src_offset += extsize;
> + }
> +
> + return NULL;
> +}
--
Duy