diff options
author | Rene Scharfe <rene.scharfe@lsrfire.ath.cx> | 2006-06-18 14:57:56 +0400 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-06-18 15:17:49 +0400 |
commit | 37958be79227dc01f965993174af42672fc6756c (patch) | |
tree | edc3c29b8f310916509ea3bf869be485f23232a2 | |
parent | cb115748ec0d4c6faccd09f3637ea436482dd7d5 (diff) |
git-tar-tree: Simplify write_trailer()
We can write the trailer in one or at most two steps; it will always
fit within two blocks. With the last caller of get_record() gone we
can get rid of it.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | builtin-tar-tree.c | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/builtin-tar-tree.c b/builtin-tar-tree.c index f6310b9032..f646c5bd6e 100644 --- a/builtin-tar-tree.c +++ b/builtin-tar-tree.c @@ -47,31 +47,6 @@ static void write_if_needed(void) } } -/* acquire the next record from the buffer; user must call write_if_needed() */ -static char *get_record(void) -{ - char *p = block + offset; - memset(p, 0, RECORDSIZE); - offset += RECORDSIZE; - return p; -} - -/* - * The end of tar archives is marked by 1024 nul bytes and after that - * follows the rest of the block (if any). - */ -static void write_trailer(void) -{ - get_record(); - write_if_needed(); - get_record(); - write_if_needed(); - while (offset) { - get_record(); - write_if_needed(); - } -} - /* * queues up writes, so that all our write(2) calls write exactly one * full block; pads writes to RECORDSIZE @@ -107,6 +82,21 @@ static void write_blocked(void *buf, unsigned long size) write_if_needed(); } +/* + * The end of tar archives is marked by 2*512 nul bytes and after that + * follows the rest of the block (if any). + */ +static void write_trailer(void) +{ + int tail = BLOCKSIZE - offset; + memset(block + offset, 0, tail); + reliable_write(block, BLOCKSIZE); + if (tail < 2 * RECORDSIZE) { + memset(block, 0, offset); + reliable_write(block, BLOCKSIZE); + } +} + static void strbuf_append_string(struct strbuf *sb, const char *s) { int slen = strlen(s); |