Rewrite binaries to use new API
authorJonathan Dieter <jdieter@gmail.com>
Tue, 10 Apr 2018 12:59:43 +0000 (15:59 +0300)
committerJonathan Dieter <jdieter@gmail.com>
Tue, 10 Apr 2018 12:59:43 +0000 (15:59 +0300)
Signed-off-by: Jonathan Dieter <jdieter@gmail.com>
src/unzck.c
src/zck.c
src/zck_delta_size.c
src/zck_dl.c
src/zck_read_header.c

index 04029e5b99ea65d0923991a7d2840dffafaa33d3..d792f1f696ca2154b1e1b26cc9e976d87e4eba66 100644 (file)
@@ -34,6 +34,8 @@
 #include <unistd.h>
 #include <zck.h>
 
+#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);
 }
index a35da14cdc8f706bff13b58968316068ab8af99f..eccd844a187553f2781bce6ae40ee95ecde21f44 100644 (file)
--- 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);
index 283b5b3c422031333d044308c05926bdc76564c2..12ddc3bea92a5cfcad953b8a91946f3aee1200f7 100644 (file)
 #include <zck.h>
 
 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 <source> <target>\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");
index cfc6a63f6c97be44dff8c2f7fd28d782fb3aa225..64546d3e6b16fa6bb7fc65e9d435069d85057ddd 100644 (file)
 #include <zck.h>
 
 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);
     }
index 81fb67b11d869d1aca29e179da56e68eb5a10aca..0029260038ffdb0e8f7cb71df5399256836b98a7 100644 (file)
@@ -34,8 +34,6 @@
 #include <zck.h>
 
 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)));