Finish refactoring zckIndex and zckIndexInfo
authorJonathan Dieter <jdieter@gmail.com>
Wed, 7 Mar 2018 11:30:49 +0000 (13:30 +0200)
committerJonathan Dieter <jdieter@gmail.com>
Wed, 7 Mar 2018 11:30:49 +0000 (13:30 +0200)
Signed-off-by: Jonathan Dieter <jdieter@gmail.com>
src/lib/dl/range.c
src/lib/index/index_common.c
src/lib/index/index_create.c
src/lib/index/index_read.c
src/zck_delta_size.c
src/zck_read_header.c

index 2c29d6b0a67d145b0d32a6921f4d0637d968f64f..af495f91922aed2dacc044dbd18614f143d33a8b 100644 (file)
@@ -136,11 +136,13 @@ int zck_range_calc_segments(zckRangeInfo *info, unsigned int max_ranges) {
 }
 
 int zck_range_get_need_dl(zckRangeInfo *info, zckCtx *zck_src, zckCtx *zck_tgt) {
-    zckIndex *tgt_idx = zck_get_index(zck_tgt);
-    zckIndex *src_idx = zck_get_index(zck_src);
+    zckIndexInfo *tgt_info = zck_get_index(zck_tgt);
+    zckIndexInfo *src_info = zck_get_index(zck_src);
+    zckIndex *tgt_idx = tgt_info->first;
+    zckIndex *src_idx = src_info->first;
     while(tgt_idx) {
         int found = False;
-        src_idx = zck_get_index(zck_src);
+        src_idx = src_info->first;
 
         while(src_idx) {
             if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) == 0) {
index 9012228291e1674e11ad6d0db92baa208aa85752..19f6fa4f626bbc0cb4cc3ff427d1fcca0b6c7d6f 100644 (file)
@@ -42,8 +42,10 @@ int zck_index_free(zckCtx *zck) {
             free(tmp);
             tmp = next;
         }
-        memset(&(zck->index), 0, sizeof(zckIndexInfo));
     }
+    if(zck->index.hash_type)
+        free(zck->index.hash_type);
+    memset(&(zck->index), 0, sizeof(zckIndexInfo));
     if(zck->full_hash_digest) {
         free(zck->full_hash_digest);
         zck->full_hash_digest = NULL;
index 3f8744e1fd8dfcaa074eabbdc3c4dcfc12816398..f6910918205c579ef79db53b891d9d775fcfa8db 100644 (file)
@@ -162,10 +162,10 @@ int zck_index_add_dl_chunk(zckDL *dl, char *digest, size_t size) {
         return False;
     }
     dl->index.count = dl->index.count + 1;
+    return True;
 }
 
 int zck_index_add_chunk(zckCtx *zck, char *data, size_t size) {
-    zckIndex *new_index;
     zckHash hash;
 
     if(zck == NULL) {
@@ -177,18 +177,13 @@ int zck_index_add_chunk(zckCtx *zck, char *data, size_t size) {
         if(!zck_index_new_chunk(&(zck->index), NULL, size))
             return False;
     } else {
-        if(!zck_hash_update(&(zck->full_hash), data, size)) {
-            free(new_index);
+        if(!zck_hash_update(&(zck->full_hash), data, size))
             return False;
-        }
-        if(!zck_hash_init(&hash, zck->index.hash_type)) {
-            free(new_index);
+        if(!zck_hash_init(&hash, zck->index.hash_type))
             return False;
-        }
-        if(!zck_hash_update(&hash, data, size)) {
-            free(new_index);
+        if(!zck_hash_update(&hash, data, size))
             return False;
-        }
+
         char *digest = zck_hash_finalize(&hash);
         if(digest == NULL) {
             zck_log(ZCK_LOG_ERROR,
index ef2ea42506f4292a95ca779b2c38bde6342026bf..bb157867621ea373336ae4258c820178f9277152 100644 (file)
@@ -91,7 +91,7 @@ int zck_index_read(zckCtx *zck, char *data, size_t size) {
         return False;
     }
     memcpy(&hash_type, dst, 1);
-    if(!zck_hash_setup(zck->index.hash_type, hash_type)) {
+    if(!zck_set_chunk_hash_type(zck, hash_type)) {
         if(dst)
             free(dst);
         return False;
index 8991a74dcf8b317c6f68c1dd52123b105500c93a..efd62288066e3d9186373aadf3147a8643a873cc 100644 (file)
@@ -75,8 +75,14 @@ int main (int argc, char *argv[]) {
         printf("   %s: %s\n", argv[2], zck_hash_name_from_type(zck_get_chunk_hash_type(zck_src)));
         return 1;
     }
-    zckIndex *tgt_idx = zck_get_index(zck_tgt);
-    zckIndex *src_idx = zck_get_index(zck_src);
+    zckIndexInfo *tgt_info = zck_get_index(zck_tgt);
+    if(tgt_info == NULL)
+        exit(1);
+    zckIndexInfo *src_info = zck_get_index(zck_src);
+    if(src_info == NULL)
+        exit(1);
+    zckIndex *tgt_idx = tgt_info->first;
+    zckIndex *src_idx = src_info->first;
     if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) != 0)
         printf("WARNING: Dicts don't match\n");
     int dl_size = 0;
@@ -84,7 +90,7 @@ int main (int argc, char *argv[]) {
     int matched_chunks = 0;
     while(tgt_idx) {
         int found = False;
-        src_idx = zck_get_index(zck_src);
+        src_idx = src_info->first;
 
         while(src_idx) {
             if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) == 0) {
index 920f30fb419677b2208c8cebd50817320a514b9d..93e418ed0ef2040696ae9b20b52c2e0590d9dcea 100644 (file)
@@ -54,7 +54,7 @@ int main (int argc, char *argv[]) {
         exit(1);
     }
     close(src_fd);
-    zckIndex *idx = zck_get_index(zck);
+
     printf("Overall checksum type: %s\n", zck_hash_name_from_type(zck_get_full_hash_type(zck)));
     printf("Index checksum: ");
     char *digest = zck_get_index_digest(zck);
@@ -68,6 +68,10 @@ int main (int argc, char *argv[]) {
     printf("\n");
     printf("Index count: %lu\n", zck_get_index_count(zck));
     printf("Chunk checksum type: %s\n", zck_hash_name_from_type(zck_get_chunk_hash_type(zck)));
+    zckIndexInfo *idxi = zck_get_index(zck);
+    if(idxi == NULL)
+        exit(1);
+    zckIndex *idx = idxi->first;
     while(idx) {
         for(int i=0; i<zck_get_chunk_digest_size(zck); i++)
             printf("%02x", (unsigned char)idx->digest[i]);