Signed-off-by: Jonathan Tan <jonathantanmy@xxxxxxxxxx> --- cache.h | 1 - pack.h | 1 + packfile.c | 40 ++++++++++++++++++++++++++++++++++++++++ sha1_file.c | 39 --------------------------------------- 4 files changed, 41 insertions(+), 40 deletions(-) diff --git a/cache.h b/cache.h index 9c70759a6..e29918c75 100644 --- a/cache.h +++ b/cache.h @@ -1661,7 +1661,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 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/pack.h b/pack.h index 4a7f88a38..69c92d8d2 100644 --- a/pack.h +++ b/pack.h @@ -168,5 +168,6 @@ extern void reprepare_packed_git(void); unsigned long approximate_object_count(void); 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); #endif diff --git a/packfile.c b/packfile.c index 6e4f1c6e3..511afad85 100644 --- a/packfile.c +++ b/packfile.c @@ -3,6 +3,7 @@ #include "pack.h" #include "dir.h" #include "mergesort.h" +#include "delta.h" char *odb_pack_name(struct strbuf *buf, const unsigned char *sha1, @@ -908,3 +909,42 @@ unsigned long unpack_object_header_buffer(const unsigned char *buf, *sizep = size; return used; } + +unsigned long get_size_from_delta(struct packed_git *p, + struct pack_window **w_curs, + off_t curpos) +{ + const unsigned char *data; + unsigned char delta_head[20], *in; + git_zstream stream; + int st; + + memset(&stream, 0, sizeof(stream)); + stream.next_out = delta_head; + stream.avail_out = sizeof(delta_head); + + git_inflate_init(&stream); + do { + in = use_pack(p, w_curs, curpos, &stream.avail_in); + stream.next_in = in; + st = git_inflate(&stream, Z_FINISH); + curpos += stream.next_in - in; + } while ((st == Z_OK || st == Z_BUF_ERROR) && + stream.total_out < sizeof(delta_head)); + git_inflate_end(&stream); + if ((st != Z_STREAM_END) && stream.total_out != sizeof(delta_head)) { + error("delta data unpack-initial failed"); + return 0; + } + + /* Examine the initial part of the delta to figure out + * the result size. + */ + data = delta_head; + + /* ignore base size */ + get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); + + /* Read the result size */ + return get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); +} diff --git a/sha1_file.c b/sha1_file.c index 1f4b4ba2c..7d354d9b6 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1099,45 +1099,6 @@ int parse_sha1_header(const char *hdr, unsigned long *sizep) return parse_sha1_header_extended(hdr, &oi, 0); } -unsigned long get_size_from_delta(struct packed_git *p, - struct pack_window **w_curs, - off_t curpos) -{ - const unsigned char *data; - unsigned char delta_head[20], *in; - git_zstream stream; - int st; - - memset(&stream, 0, sizeof(stream)); - stream.next_out = delta_head; - stream.avail_out = sizeof(delta_head); - - git_inflate_init(&stream); - do { - in = use_pack(p, w_curs, curpos, &stream.avail_in); - stream.next_in = in; - st = git_inflate(&stream, Z_FINISH); - curpos += stream.next_in - in; - } while ((st == Z_OK || st == Z_BUF_ERROR) && - stream.total_out < sizeof(delta_head)); - git_inflate_end(&stream); - if ((st != Z_STREAM_END) && stream.total_out != sizeof(delta_head)) { - error("delta data unpack-initial failed"); - return 0; - } - - /* Examine the initial part of the delta to figure out - * the result size. - */ - data = delta_head; - - /* ignore base size */ - get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); - - /* Read the result size */ - return get_delta_hdr_size(&data, delta_head+sizeof(delta_head)); -} - static off_t get_delta_base(struct packed_git *p, struct pack_window **w_curs, off_t *curpos, -- 2.14.0.434.g98096fd7a8-goog