X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=csum-file.c;h=53f5375b6ca3368de6647cf5edcd7fb4dec79657;hb=a12c6b0149e3dadd0701dac4fd0ba2463d251650;hp=fc97d6e04528b5c5b55fc211a462f3cb828f3d49;hpb=8769e93327f5efc26d179d794a67a5b993cd3693;p=git.git diff --git a/csum-file.c b/csum-file.c index fc97d6e04..53f5375b6 100644 --- a/csum-file.c +++ b/csum-file.c @@ -158,6 +158,26 @@ struct sha1file *sha1fd_throughput(int fd, const char *name, struct progress *tp return f; } +void sha1file_checkpoint(struct sha1file *f, struct sha1file_checkpoint *checkpoint) +{ + sha1flush(f); + checkpoint->offset = f->total; + checkpoint->ctx = f->ctx; +} + +int sha1file_truncate(struct sha1file *f, struct sha1file_checkpoint *checkpoint) +{ + off_t offset = checkpoint->offset; + + if (ftruncate(f->fd, offset) || + lseek(f->fd, offset, SEEK_SET) != offset) + return -1; + f->total = offset; + f->ctx = checkpoint->ctx; + f->offset = 0; /* sha1flush() was called in checkpoint */ + return 0; +} + void crc32_begin(struct sha1file *f) { f->crc32 = crc32(0, NULL, 0);