[PATCH] clean up pack index handling a bit
Especially with the new index format to come, it is more appropriate to encapsulate more into check_packed_git_idx() and assume less of the index format in struct packed_git. To that effect, the index_base is renamed to index_data with void * type so it is not used directly but other pointers initialized with it. This allows for a couple pointer cast removal, as well as providing a better generic name to grep for when adding support for new index versions or formats. And index_data is declared const too while at it. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
ac527b0b7c
commit
4287307833
30
pack.h
30
pack.h
@ -16,24 +16,15 @@ struct pack_header {
|
||||
};
|
||||
|
||||
/*
|
||||
* Packed object index header
|
||||
*
|
||||
* struct pack_idx_header {
|
||||
* uint32_t idx_signature;
|
||||
* uint32_t idx_version;
|
||||
* };
|
||||
*
|
||||
* Note: this header isn't active yet. In future versions of git
|
||||
* we may change the index file format. At that time we would start
|
||||
* the first four bytes of the new index format with this signature,
|
||||
* as all older git binaries would find this value illegal and abort
|
||||
* reading the file.
|
||||
* The first four bytes of index formats later than version 1 should
|
||||
* start with this signature, as all older git binaries would find this
|
||||
* value illegal and abort reading the file.
|
||||
*
|
||||
* This is the case because the number of objects in a packfile
|
||||
* cannot exceed 1,431,660,000 as every object would need at least
|
||||
* 3 bytes of data and the overall packfile cannot exceed 4 GiB due
|
||||
* to the 32 bit offsets used by the index. Clearly the signature
|
||||
* exceeds this maximum.
|
||||
* 3 bytes of data and the overall packfile cannot exceed 4 GiB with
|
||||
* version 1 of the index file due to the offsets limited to 32 bits.
|
||||
* Clearly the signature exceeds this maximum.
|
||||
*
|
||||
* Very old git binaries will also compare the first 4 bytes to the
|
||||
* next 4 bytes in the index and abort with a "non-monotonic index"
|
||||
@ -43,6 +34,15 @@ struct pack_header {
|
||||
*/
|
||||
#define PACK_IDX_SIGNATURE 0xff744f63 /* "\377tOc" */
|
||||
|
||||
/*
|
||||
* Packed object index header
|
||||
*/
|
||||
struct pack_idx_header {
|
||||
uint32_t idx_signature;
|
||||
uint32_t idx_version;
|
||||
};
|
||||
|
||||
|
||||
extern int verify_pack(struct packed_git *, int);
|
||||
|
||||
#define PH_ERROR_EOF (-1)
|
||||
|
Reference in New Issue
Block a user