diff options
author | Jonathan Tan <jonathantanmy@google.com> | 2017-08-19 01:20:27 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-08-24 01:12:07 +0300 |
commit | 32b42e152fcc453273fadb5a7d639e4e9b506783 (patch) | |
tree | 263a76fc30d72df6178c00298dd91e7bfd92c724 | |
parent | 0abe14f6a5b7681b4ea02d1bd0a64332587ae053 (diff) |
pack: move unpack_object_header_buffer()
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | cache.h | 1 | ||||
-rw-r--r-- | packfile.c | 25 | ||||
-rw-r--r-- | packfile.h | 2 | ||||
-rw-r--r-- | sha1_file.c | 25 |
4 files changed, 27 insertions, 26 deletions
@@ -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 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 int unpack_object_header(struct packed_git *, struct pack_window **, off_t *, unsigned long *); diff --git a/packfile.c b/packfile.c index 56ec50febe..1116942043 100644 --- a/packfile.c +++ b/packfile.c @@ -884,3 +884,28 @@ void reprepare_packed_git(void) prepare_packed_git_run_once = 0; 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; +} diff --git a/packfile.h b/packfile.h index 97246ca1ad..3954e3ec48 100644 --- a/packfile.h +++ b/packfile.h @@ -62,6 +62,8 @@ extern void close_all_packs(void); extern void unuse_pack(struct pack_window **); 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 int open_packed_git(struct packed_git *p); diff --git a/sha1_file.c b/sha1_file.c index 289eff2915..24f4249564 100644 --- a/sha1_file.c +++ b/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); } -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, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz) |