diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-10-28 11:40:48 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-10-28 11:40:48 -0700 |
commit | c0ad465725302b9411e53d248871c36880b6f8fd (patch) | |
tree | 33e1a393619b1c55af02fbcb715804500798987d | |
parent | e8e1c29021da446d0c50573ef9619bf74f515c20 (diff) | |
download | git-c0ad465725302b9411e53d248871c36880b6f8fd.tar.gz |
write_pack_header(): a helper function
Factor out a small logic out of the private write_pack_file() function
in builtin/pack-objects.c
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/pack-objects.c | 9 | ||||
-rw-r--r-- | pack-write.c | 12 | ||||
-rw-r--r-- | pack.h | 2 |
3 files changed, 17 insertions, 6 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index ba3705d1de..6643c1657a 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -571,7 +571,6 @@ static void write_pack_file(void) uint32_t i = 0, j; struct sha1file *f; off_t offset; - struct pack_header hdr; uint32_t nr_remaining = nr_result; time_t last_mtime = 0; struct object_entry **write_order; @@ -596,11 +595,9 @@ static void write_pack_file(void) f = sha1fd(fd, pack_tmp_name); } - hdr.hdr_signature = htonl(PACK_SIGNATURE); - hdr.hdr_version = htonl(PACK_VERSION); - hdr.hdr_entries = htonl(nr_remaining); - sha1write(f, &hdr, sizeof(hdr)); - offset = sizeof(hdr); + offset = write_pack_header(f, nr_remaining); + if (!offset) + die_errno("unable to write pack header"); nr_written = 0; for (; i < nr_objects; i++) { struct object_entry *e = write_order[i]; diff --git a/pack-write.c b/pack-write.c index 9cd3bfbb4b..46f3f846be 100644 --- a/pack-write.c +++ b/pack-write.c @@ -178,6 +178,18 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec return index_name; } +off_t write_pack_header(struct sha1file *f, uint32_t nr_entries) +{ + struct pack_header hdr; + + hdr.hdr_signature = htonl(PACK_SIGNATURE); + hdr.hdr_version = htonl(PACK_VERSION); + hdr.hdr_entries = htonl(nr_entries); + if (sha1write(f, &hdr, sizeof(hdr))) + return 0; + return sizeof(hdr); +} + /* * Update pack header with object_count and compute new SHA1 for pack data * associated to pack_fd, and write that SHA1 at the end. That new SHA1 @@ -2,6 +2,7 @@ #define PACK_H #include "object.h" +#include "csum-file.h" /* * Packed object header @@ -74,6 +75,7 @@ extern const char *write_idx_file(const char *index_name, struct pack_idx_entry extern int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr); extern int verify_pack_index(struct packed_git *); extern int verify_pack(struct packed_git *); +extern off_t write_pack_header(struct sha1file *f, uint32_t); extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t); extern char *index_pack_lockfile(int fd); extern int encode_in_pack_object_header(enum object_type, uintmax_t, unsigned char *); |