Browse Source

pack: move unpack_object_header_buffer()

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jonathan Tan 8 years ago committed by Junio C Hamano
parent
commit
32b42e152f
  1. 1
      cache.h
  2. 25
      packfile.c
  3. 2
      packfile.h
  4. 25
      sha1_file.c

1
cache.h

@ -1663,7 +1663,6 @@ extern off_t find_pack_entry_one(const unsigned char *sha1, struct packed_git *)


extern int is_pack_valid(struct packed_git *); extern int is_pack_valid(struct packed_git *);
extern void *unpack_entry(struct packed_git *, off_t, enum object_type *, unsigned long *); extern void *unpack_entry(struct packed_git *, off_t, enum object_type *, unsigned long *);
extern unsigned long unpack_object_header_buffer(const unsigned char *buf, unsigned long len, enum object_type *type, unsigned long *sizep);
extern unsigned long get_size_from_delta(struct packed_git *, struct pack_window **, off_t); extern unsigned long get_size_from_delta(struct packed_git *, struct pack_window **, off_t);
extern int unpack_object_header(struct packed_git *, struct pack_window **, off_t *, unsigned long *); extern int unpack_object_header(struct packed_git *, struct pack_window **, off_t *, unsigned long *);



25
packfile.c

@ -884,3 +884,28 @@ void reprepare_packed_git(void)
prepare_packed_git_run_once = 0; prepare_packed_git_run_once = 0;
prepare_packed_git(); prepare_packed_git();
} }

unsigned long unpack_object_header_buffer(const unsigned char *buf,
unsigned long len, enum object_type *type, unsigned long *sizep)
{
unsigned shift;
unsigned long size, c;
unsigned long used = 0;

c = buf[used++];
*type = (c >> 4) & 7;
size = c & 15;
shift = 4;
while (c & 0x80) {
if (len <= used || bitsizeof(long) <= shift) {
error("bad object header");
size = used = 0;
break;
}
c = buf[used++];
size += (c & 0x7f) << shift;
shift += 7;
}
*sizep = size;
return used;
}

2
packfile.h

@ -62,6 +62,8 @@ extern void close_all_packs(void);
extern void unuse_pack(struct pack_window **); extern void unuse_pack(struct pack_window **);
extern struct packed_git *add_packed_git(const char *path, size_t path_len, int local); extern struct packed_git *add_packed_git(const char *path, size_t path_len, int local);


extern unsigned long unpack_object_header_buffer(const unsigned char *buf, unsigned long len, enum object_type *type, unsigned long *sizep);

extern void release_pack_memory(size_t); extern void release_pack_memory(size_t);


extern int open_packed_git(struct packed_git *p); extern int open_packed_git(struct packed_git *p);

25
sha1_file.c

@ -915,31 +915,6 @@ void *map_sha1_file(const unsigned char *sha1, unsigned long *size)
return map_sha1_file_1(NULL, sha1, size); return map_sha1_file_1(NULL, sha1, size);
} }


unsigned long unpack_object_header_buffer(const unsigned char *buf,
unsigned long len, enum object_type *type, unsigned long *sizep)
{
unsigned shift;
unsigned long size, c;
unsigned long used = 0;

c = buf[used++];
*type = (c >> 4) & 7;
size = c & 15;
shift = 4;
while (c & 0x80) {
if (len <= used || bitsizeof(long) <= shift) {
error("bad object header");
size = used = 0;
break;
}
c = buf[used++];
size += (c & 0x7f) << shift;
shift += 7;
}
*sizep = size;
return used;
}

static int unpack_sha1_short_header(git_zstream *stream, static int unpack_sha1_short_header(git_zstream *stream,
unsigned char *map, unsigned long mapsize, unsigned char *map, unsigned long mapsize,
void *buffer, unsigned long bufsiz) void *buffer, unsigned long bufsiz)

Loading…
Cancel
Save