read-cache: clean up casting and byte decoding
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 <benpeart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
252d079cbd
commit
371ed0defa
23
read-cache.c
23
read-cache.c
@ -1650,7 +1650,7 @@ int verify_index_checksum;
|
|||||||
/* Allow fsck to force verification of the cache entry order. */
|
/* Allow fsck to force verification of the cache entry order. */
|
||||||
int verify_ce_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;
|
git_hash_ctx c;
|
||||||
unsigned char hash[GIT_MAX_RAWSZ];
|
unsigned char hash[GIT_MAX_RAWSZ];
|
||||||
@ -1674,7 +1674,7 @@ static int verify_hdr(struct cache_header *hdr, unsigned long size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int read_index_extension(struct index_state *istate,
|
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)) {
|
switch (CACHE_EXT(ext)) {
|
||||||
case CACHE_EXT_TREE:
|
case CACHE_EXT_TREE:
|
||||||
@ -1889,8 +1889,8 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
|
|||||||
int fd, i;
|
int fd, i;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
unsigned long src_offset;
|
unsigned long src_offset;
|
||||||
struct cache_header *hdr;
|
const struct cache_header *hdr;
|
||||||
void *mmap;
|
const char *mmap;
|
||||||
size_t mmap_size;
|
size_t mmap_size;
|
||||||
const struct cache_entry *previous_ce = NULL;
|
const struct cache_entry *previous_ce = NULL;
|
||||||
|
|
||||||
@ -1918,7 +1918,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
|
|||||||
die_errno("unable to map index file");
|
die_errno("unable to map index file");
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
hdr = mmap;
|
hdr = (const struct cache_header *)mmap;
|
||||||
if (verify_hdr(hdr, mmap_size) < 0)
|
if (verify_hdr(hdr, mmap_size) < 0)
|
||||||
goto unmap;
|
goto unmap;
|
||||||
|
|
||||||
@ -1943,7 +1943,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
|
|||||||
struct cache_entry *ce;
|
struct cache_entry *ce;
|
||||||
unsigned long consumed;
|
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(istate, disk_ce, &consumed, previous_ce);
|
ce = create_from_disk(istate, disk_ce, &consumed, previous_ce);
|
||||||
set_index_entry(istate, i, ce);
|
set_index_entry(istate, i, ce);
|
||||||
|
|
||||||
@ -1961,21 +1961,20 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
|
|||||||
* in 4-byte network byte order.
|
* in 4-byte network byte order.
|
||||||
*/
|
*/
|
||||||
uint32_t extsize;
|
uint32_t extsize;
|
||||||
memcpy(&extsize, (char *)mmap + src_offset + 4, 4);
|
extsize = get_be32(mmap + src_offset + 4);
|
||||||
extsize = ntohl(extsize);
|
|
||||||
if (read_index_extension(istate,
|
if (read_index_extension(istate,
|
||||||
(const char *) mmap + src_offset,
|
mmap + src_offset,
|
||||||
(char *) mmap + src_offset + 8,
|
mmap + src_offset + 8,
|
||||||
extsize) < 0)
|
extsize) < 0)
|
||||||
goto unmap;
|
goto unmap;
|
||||||
src_offset += 8;
|
src_offset += 8;
|
||||||
src_offset += extsize;
|
src_offset += extsize;
|
||||||
}
|
}
|
||||||
munmap(mmap, mmap_size);
|
munmap((void *)mmap, mmap_size);
|
||||||
return istate->cache_nr;
|
return istate->cache_nr;
|
||||||
|
|
||||||
unmap:
|
unmap:
|
||||||
munmap(mmap, mmap_size);
|
munmap((void *)mmap, mmap_size);
|
||||||
die("index file corrupt");
|
die("index file corrupt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user