summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Jonathan Tan <jonathantanmy@google.com>2017-08-18 15:20:27 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-08-23 15:12:07 -0700
commit32b42e152fcc453273fadb5a7d639e4e9b506783 (patch)
tree263a76fc30d72df6178c00298dd91e7bfd92c724
parentpack: move {,re}prepare_packed_git and approximate_object_count (diff)
downloadtgif-32b42e152fcc453273fadb5a7d639e4e9b506783.tar.xz
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.h1
-rw-r--r--packfile.c25
-rw-r--r--packfile.h2
-rw-r--r--sha1_file.c25
4 files changed, 27 insertions, 26 deletions
diff --git a/cache.h b/cache.h
index a9f45512dc..faa8940aff 100644
--- a/cache.h
+++ b/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 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)