Move dictionary decompression from zck_read_header to zck_read
authorJonathan Dieter <jdieter@gmail.com>
Wed, 9 May 2018 16:22:46 +0000 (19:22 +0300)
committerJonathan Dieter <jdieter@gmail.com>
Wed, 9 May 2018 16:46:54 +0000 (19:46 +0300)
Signed-off-by: Jonathan Dieter <jdieter@gmail.com>
src/lib/comp/comp.c
src/lib/header.c

index f6aca3eb7b80c0551c47088584e18201ff541192..68f069a93bec04ddc75f571df08340b3d469ec29 100644 (file)
@@ -418,6 +418,11 @@ ssize_t comp_read(zckCtx *zck, char *dst, size_t dst_size, int use_dict) {
     if(dst_size == 0)
         return 0;
 
+    /* Read dictionary if it exists and hasn't been read yet */
+    if(use_dict && !zck->comp.data_eof && zck->comp.data_idx == NULL &&
+       zck->index.first->length > 0 && !zck_import_dict(zck))
+        return -1;
+
     size_t dc = 0;
     char *src = zmalloc(dst_size - dc);
     if(src == NULL) {
@@ -473,7 +478,7 @@ ssize_t comp_read(zckCtx *zck, char *dst, size_t dst_size, int use_dict) {
             }
         }
         if(zck->comp.data_loc == zck->comp.data_idx->comp_length) {
-            if(comp_end_dchunk(zck, use_dict, zck->comp.data_idx->length) < 0)
+            if(!comp_end_dchunk(zck, use_dict, zck->comp.data_idx->length))
                 return -1;
             if(zck->comp.data_idx == NULL)
                 zck->comp.data_eof = True;
index 2b96aa5570e40af781302af232e6c48488f12884..5300d7db9f4e4e8a9bee6555c03ee7b177394efe 100644 (file)
@@ -341,7 +341,7 @@ int read_sig(zckCtx *zck) {
     return True;
 }
 
-int zck_read_header(zckCtx *zck) {
+int PUBLIC zck_read_header(zckCtx *zck) {
     VALIDATE_READ(zck);
 
     if(!read_lead_1(zck))
@@ -356,8 +356,6 @@ int zck_read_header(zckCtx *zck) {
         return False;
     if(!read_sig(zck))
         return False;
-    if(!zck_import_dict(zck))
-        return False;
     return True;
 }