Use off_t in pack-objects/fast-import when we mean an offset

Always use an off_t value in pack-objects anytime we are dealing
with an offset to some data within a packfile.

Also fixed a minor uintmax_t that was incorrectly defined before.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Shawn O. Pearce 2007-03-06 20:44:34 -05:00 committed by Junio C Hamano
parent c4001d92be
commit 6777a59fcd
2 changed files with 28 additions and 28 deletions

View file

@ -23,7 +23,7 @@ git-pack-objects [{ -q | --progress | --all-progress }] \n\
struct object_entry { struct object_entry {
unsigned char sha1[20]; unsigned char sha1[20];
unsigned long size; /* uncompressed size */ unsigned long size; /* uncompressed size */
unsigned long offset; /* offset into the final pack file; off_t offset; /* offset into the final pack file;
* nonzero if already written. * nonzero if already written.
*/ */
unsigned int depth; /* delta depth */ unsigned int depth; /* delta depth */
@ -35,7 +35,7 @@ struct object_entry {
#define in_pack_header_size delta_size /* only when reusing pack data */ #define in_pack_header_size delta_size /* only when reusing pack data */
struct object_entry *delta; /* delta base object */ struct object_entry *delta; /* delta base object */
struct packed_git *in_pack; /* already in pack */ struct packed_git *in_pack; /* already in pack */
unsigned int in_pack_offset; off_t in_pack_offset;
struct object_entry *delta_child; /* deltified objects who bases me */ struct object_entry *delta_child; /* deltified objects who bases me */
struct object_entry *delta_sibling; /* other deltified objects who struct object_entry *delta_sibling; /* other deltified objects who
* uses the same base as me * uses the same base as me
@ -101,7 +101,7 @@ static int object_ix_hashsz;
* get the object sha1 from the main index. * get the object sha1 from the main index.
*/ */
struct revindex_entry { struct revindex_entry {
unsigned int offset; off_t offset;
unsigned int nr; unsigned int nr;
}; };
struct pack_revindex { struct pack_revindex {
@ -183,7 +183,7 @@ static void prepare_pack_revindex(struct pack_revindex *rix)
} }
static struct revindex_entry * find_packed_object(struct packed_git *p, static struct revindex_entry * find_packed_object(struct packed_git *p,
unsigned int ofs) off_t ofs)
{ {
int num; int num;
int lo, hi; int lo, hi;
@ -211,15 +211,14 @@ static struct revindex_entry * find_packed_object(struct packed_git *p,
die("internal error: pack revindex corrupt"); die("internal error: pack revindex corrupt");
} }
static unsigned long find_packed_object_size(struct packed_git *p, static off_t find_packed_object_size(struct packed_git *p, off_t ofs)
unsigned long ofs)
{ {
struct revindex_entry *entry = find_packed_object(p, ofs); struct revindex_entry *entry = find_packed_object(p, ofs);
return entry[1].offset - ofs; return entry[1].offset - ofs;
} }
static unsigned char *find_packed_object_name(struct packed_git *p, static unsigned char *find_packed_object_name(struct packed_git *p,
unsigned long ofs) off_t ofs)
{ {
struct revindex_entry *entry = find_packed_object(p, ofs); struct revindex_entry *entry = find_packed_object(p, ofs);
return (unsigned char *)(p->index_base + 256) + 24 * entry->nr + 4; return (unsigned char *)(p->index_base + 256) + 24 * entry->nr + 4;
@ -276,8 +275,8 @@ static int encode_header(enum object_type type, unsigned long size, unsigned cha
*/ */
static int check_pack_inflate(struct packed_git *p, static int check_pack_inflate(struct packed_git *p,
struct pack_window **w_curs, struct pack_window **w_curs,
unsigned long offset, off_t offset,
unsigned long len, off_t len,
unsigned long expect) unsigned long expect)
{ {
z_stream stream; z_stream stream;
@ -303,8 +302,8 @@ static int check_pack_inflate(struct packed_git *p,
static void copy_pack_data(struct sha1file *f, static void copy_pack_data(struct sha1file *f,
struct packed_git *p, struct packed_git *p,
struct pack_window **w_curs, struct pack_window **w_curs,
unsigned long offset, off_t offset,
unsigned long len) off_t len)
{ {
unsigned char *in; unsigned char *in;
unsigned int avail; unsigned int avail;
@ -312,7 +311,7 @@ static void copy_pack_data(struct sha1file *f,
while (len) { while (len) {
in = use_pack(p, w_curs, offset, &avail); in = use_pack(p, w_curs, offset, &avail);
if (avail > len) if (avail > len)
avail = len; avail = (unsigned int)len;
sha1write(f, in, avail); sha1write(f, in, avail);
offset += avail; offset += avail;
len -= avail; len -= avail;
@ -369,14 +368,15 @@ static int revalidate_loose_object(struct object_entry *entry,
return check_loose_inflate(map, mapsize, size); return check_loose_inflate(map, mapsize, size);
} }
static unsigned long write_object(struct sha1file *f, static off_t write_object(struct sha1file *f,
struct object_entry *entry) struct object_entry *entry)
{ {
unsigned long size; unsigned long size;
enum object_type type; enum object_type type;
void *buf; void *buf;
unsigned char header[10]; unsigned char header[10];
unsigned hdrlen, datalen; unsigned hdrlen;
off_t datalen;
enum object_type obj_type; enum object_type obj_type;
int to_reuse = 0; int to_reuse = 0;
@ -439,7 +439,7 @@ static unsigned long write_object(struct sha1file *f,
* encoding of the relative offset for the delta * encoding of the relative offset for the delta
* base from this object's position in the pack. * base from this object's position in the pack.
*/ */
unsigned long ofs = entry->offset - entry->delta->offset; off_t ofs = entry->offset - entry->delta->offset;
unsigned pos = sizeof(header) - 1; unsigned pos = sizeof(header) - 1;
header[pos] = ofs & 127; header[pos] = ofs & 127;
while (ofs >>= 7) while (ofs >>= 7)
@ -460,7 +460,7 @@ static unsigned long write_object(struct sha1file *f,
else { else {
struct packed_git *p = entry->in_pack; struct packed_git *p = entry->in_pack;
struct pack_window *w_curs = NULL; struct pack_window *w_curs = NULL;
unsigned long offset; off_t offset;
if (entry->delta) { if (entry->delta) {
obj_type = (allow_ofs_delta && entry->delta->offset) ? obj_type = (allow_ofs_delta && entry->delta->offset) ?
@ -470,7 +470,7 @@ static unsigned long write_object(struct sha1file *f,
hdrlen = encode_header(obj_type, entry->size, header); hdrlen = encode_header(obj_type, entry->size, header);
sha1write(f, header, hdrlen); sha1write(f, header, hdrlen);
if (obj_type == OBJ_OFS_DELTA) { if (obj_type == OBJ_OFS_DELTA) {
unsigned long ofs = entry->offset - entry->delta->offset; off_t ofs = entry->offset - entry->delta->offset;
unsigned pos = sizeof(header) - 1; unsigned pos = sizeof(header) - 1;
header[pos] = ofs & 127; header[pos] = ofs & 127;
while (ofs >>= 7) while (ofs >>= 7)
@ -498,9 +498,9 @@ static unsigned long write_object(struct sha1file *f,
return hdrlen + datalen; return hdrlen + datalen;
} }
static unsigned long write_one(struct sha1file *f, static off_t write_one(struct sha1file *f,
struct object_entry *e, struct object_entry *e,
unsigned long offset) off_t offset)
{ {
if (e->offset || e->preferred_base) if (e->offset || e->preferred_base)
/* offset starts from header size and cannot be zero /* offset starts from header size and cannot be zero
@ -518,7 +518,7 @@ static void write_pack_file(void)
{ {
uint32_t i; uint32_t i;
struct sha1file *f; struct sha1file *f;
unsigned long offset; off_t offset;
struct pack_header hdr; struct pack_header hdr;
unsigned last_percent = 999; unsigned last_percent = 999;
int do_progress = progress; int do_progress = progress;
@ -671,13 +671,13 @@ static int add_object_entry(const unsigned char *sha1, unsigned hash, int exclud
uint32_t idx = nr_objects; uint32_t idx = nr_objects;
struct object_entry *entry; struct object_entry *entry;
struct packed_git *p; struct packed_git *p;
unsigned int found_offset = 0; off_t found_offset = 0;
struct packed_git *found_pack = NULL; struct packed_git *found_pack = NULL;
int ix, status = 0; int ix, status = 0;
if (!exclude) { if (!exclude) {
for (p = packed_git; p; p = p->next) { for (p = packed_git; p; p = p->next) {
unsigned long offset = find_pack_entry_one(sha1, p); off_t offset = find_pack_entry_one(sha1, p);
if (offset) { if (offset) {
if (incremental) if (incremental)
return 0; return 0;
@ -978,17 +978,17 @@ static void check_object(struct object_entry *entry)
if (entry->in_pack && !entry->preferred_base) { if (entry->in_pack && !entry->preferred_base) {
struct packed_git *p = entry->in_pack; struct packed_git *p = entry->in_pack;
struct pack_window *w_curs = NULL; struct pack_window *w_curs = NULL;
unsigned long left = p->pack_size - entry->in_pack_offset;
unsigned long size, used; unsigned long size, used;
unsigned int avail;
unsigned char *buf; unsigned char *buf;
struct object_entry *base_entry = NULL; struct object_entry *base_entry = NULL;
buf = use_pack(p, &w_curs, entry->in_pack_offset, NULL); buf = use_pack(p, &w_curs, entry->in_pack_offset, &avail);
/* We want in_pack_type even if we do not reuse delta. /* We want in_pack_type even if we do not reuse delta.
* There is no point not reusing non-delta representations. * There is no point not reusing non-delta representations.
*/ */
used = unpack_object_header_gently(buf, left, used = unpack_object_header_gently(buf, avail,
&entry->in_pack_type, &size); &entry->in_pack_type, &size);
/* Check if it is delta, and the base is also an object /* Check if it is delta, and the base is also an object
@ -997,7 +997,7 @@ static void check_object(struct object_entry *entry)
*/ */
if (!no_reuse_delta) { if (!no_reuse_delta) {
unsigned char c, *base_name; unsigned char c, *base_name;
unsigned long ofs; off_t ofs;
unsigned long used_0; unsigned long used_0;
/* there is at least 20 bytes left in the pack */ /* there is at least 20 bytes left in the pack */
switch (entry->in_pack_type) { switch (entry->in_pack_type) {

View file

@ -249,7 +249,7 @@ typedef enum {
/* Configured limits on output */ /* Configured limits on output */
static unsigned long max_depth = 10; static unsigned long max_depth = 10;
static unsigned long max_packsize = (1LL << 32) - 1; static off_t max_packsize = (1LL << 32) - 1;
static int force_update; static int force_update;
/* Stats and misc. counters */ /* Stats and misc. counters */
@ -1527,7 +1527,7 @@ static void unload_one_branch(void)
{ {
while (cur_active_branches while (cur_active_branches
&& cur_active_branches >= max_active_branches) { && cur_active_branches >= max_active_branches) {
unsigned long min_commit = ULONG_MAX; uintmax_t min_commit = ULONG_MAX;
struct branch *e, *l = NULL, *p = NULL; struct branch *e, *l = NULL, *p = NULL;
for (e = active_branches; e; e = e->active_next_branch) { for (e = active_branches; e; e = e->active_next_branch) {