@@ -1655,7 +1655,7 @@ int verify_index_checksum;
/* Allow fsck to force verification of the cache entry order. */
int verify_ce_order;
-static int verify_hdr(struct cache_header *hdr, unsigned long size)
+static int verify_hdr(const struct cache_header *hdr, unsigned long size)
{
git_hash_ctx c;
unsigned char hash[GIT_MAX_RAWSZ];
@@ -1679,7 +1679,7 @@ static int verify_hdr(struct cache_header *hdr, unsigned long size)
}
static int read_index_extension(struct index_state *istate,
- const char *ext, void *data, unsigned long sz)
+ const char *ext, const char *data, unsigned long sz)
{
switch (CACHE_EXT(ext)) {
case CACHE_EXT_TREE:
@@ -1906,7 +1906,7 @@ static size_t estimate_cache_size(size_t ondisk_size, unsigned int entries)
}
#ifndef NO_PTHREADS
-static unsigned long read_eoie_extension(void *mmap_, size_t mmap_size);
+static unsigned long read_eoie_extension(const char *mmap, size_t mmap_size);
#endif
static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context, unsigned long offset);
@@ -1916,14 +1916,14 @@ struct load_index_extensions
pthread_t pthread;
#endif
struct index_state *istate;
- void *mmap;
+ const char *mmap;
size_t mmap_size;
unsigned long src_offset;
};
-static void *load_index_extensions(void *_data)
+static void *load_index_extensions(void *data)
{
- struct load_index_extensions *p = _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) {
@@ -1934,13 +1934,12 @@ static void *load_index_extensions(void *_data)
* in 4-byte network byte order.
*/
uint32_t extsize;
- memcpy(&extsize, (char *)p->mmap + src_offset + 4, 4);
- extsize = ntohl(extsize);
+ extsize = get_be32(p->mmap + src_offset + 4);
if (read_index_extension(p->istate,
- (const char *)p->mmap + src_offset,
- (char *)p->mmap + src_offset + 8,
+ p->mmap + src_offset,
+ p->mmap + src_offset + 8,
extsize) < 0) {
- munmap(p->mmap, p->mmap_size);
+ munmap((void *)p->mmap, p->mmap_size);
die("index file corrupt");
}
src_offset += 8;
@@ -1955,7 +1954,7 @@ static void *load_index_extensions(void *_data)
* from the memory mapped file and add them to the given index.
*/
static unsigned long load_cache_entry_block(struct index_state *istate,
- struct mem_pool *ce_mem_pool, int offset, int nr, void *mmap,
+ struct mem_pool *ce_mem_pool, int offset, int nr, const char *mmap,
unsigned long start_offset, const struct cache_entry *previous_ce)
{
int i;
@@ -1966,7 +1965,7 @@ static unsigned long load_cache_entry_block(struct index_state *istate,
struct cache_entry *ce;
unsigned long consumed;
- disk_ce = (struct ondisk_cache_entry *)((char *)mmap + src_offset);
+ disk_ce = (struct ondisk_cache_entry *)(mmap + src_offset);
ce = create_from_disk(ce_mem_pool, istate->version, disk_ce, &consumed, previous_ce);
set_index_entry(istate, i, ce);
@@ -1977,7 +1976,7 @@ static unsigned long load_cache_entry_block(struct index_state *istate,
}
static unsigned long load_all_cache_entries(struct index_state *istate,
- void *mmap, size_t mmap_size, unsigned long src_offset)
+ const char *mmap, size_t mmap_size, unsigned long src_offset)
{
unsigned long consumed;
@@ -2008,7 +2007,7 @@ struct load_cache_entries_thread_data
struct index_state *istate;
struct mem_pool *ce_mem_pool;
int offset, nr;
- void *mmap;
+ const char *mmap;
unsigned long start_offset;
struct cache_entry *previous_ce;
unsigned long consumed; /* return # of bytes in index file processed */
@@ -2028,7 +2027,7 @@ static void *load_cache_entries_thread(void *_data)
}
static unsigned long load_cache_entries_threaded(int nr_threads, struct index_state *istate,
- void *mmap, size_t mmap_size, unsigned long src_offset)
+ const char *mmap, size_t mmap_size, unsigned long src_offset)
{
struct strbuf previous_name_buf = STRBUF_INIT, *previous_name;
struct load_cache_entries_thread_data *data;
@@ -2097,7 +2096,7 @@ static unsigned long load_cache_entries_threaded(int nr_threads, struct index_st
break;
}
- ondisk = (struct ondisk_cache_entry *)((char *)mmap + src_offset);
+ ondisk = (struct ondisk_cache_entry *)(mmap + src_offset);
/* On-disk flags are just 16 bits */
flags = get_be16(&ondisk->flags);
@@ -2145,8 +2144,8 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
int fd;
struct stat st;
unsigned long src_offset;
- struct cache_header *hdr;
- void *mmap;
+ const struct cache_header *hdr;
+ const char *mmap;
size_t mmap_size;
struct load_index_extensions p = { 0 };
unsigned long extension_offset = 0;
@@ -2178,7 +2177,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
die_errno("unable to map index file");
close(fd);
- hdr = mmap;
+ hdr = (const struct cache_header *)mmap;
if (verify_hdr(hdr, mmap_size) < 0)
goto unmap;
@@ -2238,11 +2237,11 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
p.src_offset = src_offset;
load_index_extensions(&p);
}
- munmap(mmap, mmap_size);
+ munmap((void *)mmap, mmap_size);
return istate->cache_nr;
unmap:
- munmap(mmap, mmap_size);
+ munmap((void *)mmap, mmap_size);
die("index file corrupt");
}
@@ -3265,7 +3264,7 @@ int should_validate_cache_entries(void)
#define EOIE_SIZE_WITH_HEADER (4 + 4 + EOIE_SIZE) /* <4-byte signature> + <4-byte length> + EOIE_SIZE */
#ifndef NO_PTHREADS
-static unsigned long read_eoie_extension(void *mmap_, size_t mmap_size)
+static unsigned long read_eoie_extension(const char *mmap, size_t mmap_size)
{
/*
* The end of index entries (EOIE) extension is guaranteed to be last
@@ -3276,7 +3275,6 @@ static unsigned long read_eoie_extension(void *mmap_, size_t mmap_size)
* <4-byte offset>
* <20-byte hash>
*/
- const char *mmap = mmap_;
const char *index, *eoie;
uint32_t extsize;
unsigned long offset, src_offset;
@@ -3329,8 +3327,7 @@ static unsigned long read_eoie_extension(void *mmap_, size_t mmap_size)
* in 4-byte network byte order.
*/
uint32_t extsize;
- memcpy(&extsize, (char *)mmap + src_offset + 4, 4);
- extsize = ntohl(extsize);
+ extsize = get_be32(mmap + src_offset + 4);
/* verify the extension size isn't so large it will wrap around */
if (src_offset + 8 + extsize < src_offset)
This patch does a clean up pass to minimize the casting required to work with the memory mapped index (mmap). It also makes the decoding of network byte order more consistent by using get_be32() where possible. Signed-off-by: Ben Peart <Ben.Peart@microsoft.com> --- read-cache.c | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-)