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>

Ben Peart committed Oct 10, 2018 at 11:59 UTC 371ed0defa2a8692731d164e7a2d5e53e0a22362
1 file changed +11 -12
read-cache.c
+11 -12
@@ -1650,7 +1650,7 @@ int verify_index_checksum;
1650 /* Allow fsck to force verification of the cache entry order. */
1651 int verify_ce_order;
1652
1653 -static int verify_hdr(struct cache_header *hdr, unsigned long size)
1653 +static int verify_hdr(const struct cache_header *hdr, unsigned long size)
1654 {
1655 git_hash_ctx c;
1656 unsigned char hash[GIT_MAX_RAWSZ];
@@ -1674,7 +1674,7 @@ static int verify_hdr(struct cache_header *hdr, unsigned long size)
1674 }
1675
1676 static int read_index_extension(struct index_state *istate,
1677 - const char *ext, void *data, unsigned long sz)
1677 + const char *ext, const char *data, unsigned long sz)
1678 {
1679 switch (CACHE_EXT(ext)) {
1680 case CACHE_EXT_TREE:
@@ -1889,8 +1889,8 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
1889 int fd, i;
1890 struct stat st;
1891 unsigned long src_offset;
1892 - struct cache_header *hdr;
1893 - void *mmap;
1892 + const struct cache_header *hdr;
1893 + const char *mmap;
1894 size_t mmap_size;
1895 const struct cache_entry *previous_ce = NULL;
1896
@@ -1918,7 +1918,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
1918 die_errno("unable to map index file");
1919 close(fd);
1920
1921 - hdr = mmap;
1921 + hdr = (const struct cache_header *)mmap;
1922 if (verify_hdr(hdr, mmap_size) < 0)
1923 goto unmap;
1924
@@ -1943,7 +1943,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
1943 struct cache_entry *ce;
1944 unsigned long consumed;
1945
1946 - disk_ce = (struct ondisk_cache_entry *)((char *)mmap + src_offset);
1946 + disk_ce = (struct ondisk_cache_entry *)(mmap + src_offset);
1947 ce = create_from_disk(istate, disk_ce, &consumed, previous_ce);
1948 set_index_entry(istate, i, ce);
1949
@@ -1961,21 +1961,20 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
1961 * in 4-byte network byte order.
1962 */
1963 uint32_t extsize;
1964 - memcpy(&extsize, (char *)mmap + src_offset + 4, 4);
1965 - extsize = ntohl(extsize);
1964 + extsize = get_be32(mmap + src_offset + 4);
1965 if (read_index_extension(istate,
1967 - (const char *) mmap + src_offset,
1968 - (char *) mmap + src_offset + 8,
1966 + mmap + src_offset,
1967 + mmap + src_offset + 8,
1968 extsize) < 0)
1969 goto unmap;
1970 src_offset += 8;
1971 src_offset += extsize;
1972 }
1974 - munmap(mmap, mmap_size);
1973 + munmap((void *)mmap, mmap_size);
1974 return istate->cache_nr;
1975
1976 unmap:
1978 - munmap(mmap, mmap_size);
1977 + munmap((void *)mmap, mmap_size);
1978 die("index file corrupt");
1979 }
1980