From: Jonathan Dieter Date: Tue, 10 Apr 2018 12:59:43 +0000 (+0300) Subject: Rewrite binaries to use new API X-Git-Tag: archive/raspbian/1.1.9+ds1-1+rpi1~1^2~331 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=096994de2116ac13cd8308f071d0e86c5849b8b4;p=zchunk.git Rewrite binaries to use new API Signed-off-by: Jonathan Dieter --- diff --git a/src/unzck.c b/src/unzck.c index 04029e5..d792f1f 100644 --- a/src/unzck.c +++ b/src/unzck.c @@ -34,6 +34,8 @@ #include #include +#define BLK_SIZE 32768 + int main (int argc, char *argv[]) { char *out_name; @@ -62,20 +64,36 @@ int main (int argc, char *argv[]) { exit(1); } - zckCtx *zck = zck_create(); + zckCtx *zck = zck_init_read(src_fd); if(zck == NULL) exit(1); - if(!zck_decompress_to_file(zck, src_fd, dst_fd)) { - unlink(out_name); - free(out_name); - close(src_fd); - close(dst_fd); - zck_free(&zck); - exit(1); + char *data = malloc(BLK_SIZE); + int good_exit = False; + while(True) { + ssize_t read = zck_read(zck, data, BLK_SIZE); + if(read < 0) + goto error; + if(read == 0) + break; + if(read > BLK_SIZE) + printf("read: %lu\n", read); + if(write(dst_fd, data, read) != read) { + printf("Error writing to %s\n", out_name); + goto error; + } } + good_exit = True; +error: + free(data); + if(!good_exit) + unlink(out_name); free(out_name); + zck_close(zck); close(src_fd); close(dst_fd); zck_free(&zck); + if(!good_exit) + exit(1); + exit(0); } diff --git a/src/zck.c b/src/zck.c index a35da14..eccd844 100644 --- a/src/zck.c +++ b/src/zck.c @@ -86,11 +86,11 @@ int main (int argc, char *argv[]) { } free(out_name); - zckCtx *zck = zck_create(); - if(zck == NULL) - exit(1); - if(!zck_init_write(zck, dst_fd)) + zckCtx *zck = zck_init_write(dst_fd); + if(zck == NULL) { + printf("Unable to write to %s\n", out_name); exit(1); + } /*if(!zck_set_compression_type(zck, ZCK_COMP_NONE)) { perror("Unable to set compression type\n"); @@ -162,9 +162,9 @@ int main (int argc, char *argv[]) { } prev_srpm = next_srpm; printf("Compressing %li bytes\n", next-found); - if(!zck_write(zck, found, next-found)) + if(zck_write(zck, found, next-found) < 0) exit(1); - if(!zck_end_chunk(zck)) + if(zck_end_chunk(zck) < 0) exit(1); found = next; search = next + 1; @@ -172,9 +172,9 @@ int main (int argc, char *argv[]) { search = data + in_size; } else { printf("Completing %li bytes\n", data+in_size-found); - if(!zck_write(zck, found, data+in_size-found)) + if(zck_write(zck, found, data+in_size-found) < 0) exit(1); - if(!zck_end_chunk(zck)) + if(zck_end_chunk(zck) < 0) exit(1); search = NULL; } @@ -206,16 +206,16 @@ int main (int argc, char *argv[]) { cur_loc = data + in_size; } printf("Completing %li bytes\n", cur_loc-start); - if(!zck_write(zck, start, cur_loc-start)) + if(zck_write(zck, start, cur_loc-start) < 0) exit(1); - if(!zck_end_chunk(zck)) + if(zck_end_chunk(zck) < 0) exit(1); start = cur_loc; } } free(data); } - if(!zck_write_file(zck)) + if(!zck_close(zck)) exit(1); zck_free(&zck); close(dst_fd); diff --git a/src/zck_delta_size.c b/src/zck_delta_size.c index 283b5b3..12ddc3b 100644 --- a/src/zck_delta_size.c +++ b/src/zck_delta_size.c @@ -35,11 +35,6 @@ #include int main (int argc, char *argv[]) { - zckCtx *zck_src = zck_create(); - zckCtx *zck_tgt = zck_create(); - - /*zck_set_log_level(ZCK_LOG_DEBUG);*/ - if(argc != 3) { printf("Usage: %s \n", argv[0]); exit(1); @@ -51,11 +46,12 @@ int main (int argc, char *argv[]) { perror(""); exit(1); } - if(!zck_read_header(zck_src, src_fd)) { + zckCtx *zck_src = zck_init_read(src_fd); + if(zck_src == NULL) { printf("Unable to open %s\n", argv[1]); exit(1); } - close(src_fd); + zck_close(zck_src); int tgt_fd = open(argv[2], O_RDONLY); if(tgt_fd < 0) { @@ -63,11 +59,12 @@ int main (int argc, char *argv[]) { perror(""); exit(1); } - if(!zck_read_header(zck_tgt, tgt_fd)) { + zckCtx *zck_tgt = zck_init_read(tgt_fd); + if(zck_tgt == NULL) { printf("Unable to open %s\n", argv[2]); exit(1); } - close(tgt_fd); + zck_close(zck_tgt); if(zck_get_chunk_hash_type(zck_tgt) != zck_get_chunk_hash_type(zck_src)) { printf("ERROR: Chunk hash types don't match:\n"); diff --git a/src/zck_dl.c b/src/zck_dl.c index cfc6a63..64546d3 100644 --- a/src/zck_dl.c +++ b/src/zck_dl.c @@ -37,10 +37,9 @@ #include int main (int argc, char *argv[]) { - zckCtx *zck_src = zck_create(); zckCtx *zck_tgt = zck_create(); - if(zck_src == NULL || zck_tgt == NULL) + if(zck_tgt == NULL) exit(1); zck_dl_global_init(); @@ -57,7 +56,8 @@ int main (int argc, char *argv[]) { perror(""); exit(1); } - if(!zck_read_header(zck_src, src_fd)) { + zckCtx *zck_src = zck_init_read(src_fd); + if(zck_src == NULL) { printf("Unable to open %s\n", argv[1]); exit(1); } diff --git a/src/zck_read_header.c b/src/zck_read_header.c index 81fb67b..0029260 100644 --- a/src/zck_read_header.c +++ b/src/zck_read_header.c @@ -34,8 +34,6 @@ #include int main (int argc, char *argv[]) { - zckCtx *zck = zck_create(); - zck_set_log_level(ZCK_LOG_DEBUG); if(argc != 2) { @@ -49,10 +47,12 @@ int main (int argc, char *argv[]) { perror(""); exit(1); } - if(!zck_read_header(zck, src_fd)) { + zckCtx *zck = zck_init_read(src_fd); + if(zck == NULL) { perror("Unable to read header\n"); exit(1); } + zck_close(zck); close(src_fd); printf("Overall checksum type: %s\n", zck_hash_name_from_type(zck_get_full_hash_type(zck)));