Change zck_get_index_digest and zck_get_data_digest to return string
authorJonathan Dieter <jdieter@gmail.com>
Sun, 15 Apr 2018 18:46:16 +0000 (21:46 +0300)
committerJonathan Dieter <jdieter@gmail.com>
Sun, 15 Apr 2018 18:46:16 +0000 (21:46 +0300)
version of digest and make sure digest isn't cleared after closing file
for writing

Signed-off-by: Jonathan Dieter <jdieter@gmail.com>
src/lib/dl/dl.c
src/lib/zck.c
src/zck_read_header.c

index 3181ad9dec06b6acb7cff731e753bbae6313a2fc..8cec72a6fc63c5dce6c6228b438988b9bb5b7de3 100644 (file)
@@ -458,12 +458,11 @@ int PUBLIC zck_dl_get_header(zckCtx *zck, zckDL *dl, char *url) {
     if(!zck_read_index_hash(zck))
         return False;
     start += zck->hash_type.digest_size;
-    char *digest = zck_get_index_digest(zck);
     zck_log(ZCK_LOG_DEBUG, "Index hash: (%s)",
             zck_hash_name_from_type(zck_get_full_hash_type(zck)));
-    for(int i=0; i<zck_get_full_digest_size(zck); i++)
-        zck_log(ZCK_LOG_DEBUG, "%02x", (unsigned char)digest[i]);
-    zck_log(ZCK_LOG_DEBUG, "\n");
+    char *digest = zck_get_index_digest(zck);
+    zck_log(ZCK_LOG_DEBUG, "%s\n", digest);
+    free(digest);
 
     /* Read and store compression type and index size */
     if(!zck_read_ct_is(zck))
index 60c014ed147f1b1d8bb32180ecc316b9584f4dd8..eb48165f4c5f4048f57159736ed48446fc67ddc7 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <stdint.h>
 #include <string.h>
 #include <sys/types.h>
@@ -54,7 +55,6 @@ int PUBLIC zck_close(zckCtx *zck) {
         if(!chunks_from_temp(zck))
             return False;
         zck_log(ZCK_LOG_DEBUG, "Finished writing file, cleaning up\n");
-        zck_index_free(zck);
         zck_comp_close(zck);
         if(zck->temp_fd) {
             close(zck->temp_fd);
@@ -233,16 +233,24 @@ zckIndex PUBLIC *zck_get_index(zckCtx *zck) {
     return &(zck->index);
 }
 
+char *get_digest_string(const char *digest, int size) {
+    char *str = zmalloc(size*2+1);
+
+    for(int i=0; i<size; i++)
+        snprintf(str + i*2, 3, "%02x", (unsigned char)digest[i]);
+    return str;
+}
+
 char PUBLIC *zck_get_index_digest(zckCtx *zck) {
     if(zck == NULL)
         return NULL;
-    return zck->index_digest;
+    return get_digest_string(zck->index_digest, zck->hash_type.digest_size);
 }
 
 char PUBLIC *zck_get_data_digest(zckCtx *zck) {
     if(zck == NULL)
         return NULL;
-    return zck->full_hash_digest;
+    return get_digest_string(zck->full_hash_digest, zck->hash_type.digest_size);
 }
 
 ssize_t PUBLIC zck_get_header_length(zckCtx *zck) {
index 0029260038ffdb0e8f7cb71df5399256836b98a7..a70574dcded59ef8d166bf19bf6bfccd3b1bbcf2 100644 (file)
@@ -56,16 +56,12 @@ int main (int argc, char *argv[]) {
     close(src_fd);
 
     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);
-    for(int i=0; i<zck_get_full_digest_size(zck); i++)
-            printf("%02x", (unsigned char)digest[i]);
-    printf("\n");
-    printf("Data checksum: ");
+    printf("Header checksum: %s\n", digest);
+    free(digest);
     digest = zck_get_data_digest(zck);
-    for(int i=0; i<zck_get_full_digest_size(zck); i++)
-            printf("%02x", (unsigned char)digest[i]);
-    printf("\n");
+    printf("Data checksum: %s\n", digest);
+    free(digest);
     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)));
     zckIndex *idxi = zck_get_index(zck);