New functions and rework zck_get_header_length so it works after only the
authorJonathan Dieter <jdieter@gmail.com>
Mon, 4 Jun 2018 07:46:11 +0000 (10:46 +0300)
committerJonathan Dieter <jdieter@gmail.com>
Mon, 4 Jun 2018 07:46:11 +0000 (10:46 +0300)
lead has been read

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

index 69043946c0f5a256a236bc92e0f4af93d93a2141..2923b6696bf2d8452abd778627468218d0cf8cdf 100644 (file)
                                 return False; \
                             }
 
+/* If lead format changes, this needs to be changed */
+int PUBLIC get_min_download_size() {
+    /* Lead + hash type + hash digest + header size */
+    return 5 + MAX_COMP_SIZE*2 + get_max_hash_size();
+}
+
 int PUBLIC zck_set_ioption(zckCtx *zck, zck_ioption option, ssize_t value) {
     /* Set hash type */
     if(option == ZCK_HASH_FULL_TYPE) {
@@ -287,6 +293,10 @@ zckCtx PUBLIC *zck_init_read (int src_fd) {
     if(zck == NULL)
         return NULL;
 
+    if(!zck_read_lead(zck)) {
+        zck_free(&zck);
+        return NULL;
+    }
     if(!zck_read_header(zck)) {
         zck_free(&zck);
         return NULL;
@@ -331,12 +341,24 @@ int PUBLIC zck_get_full_hash_type(zckCtx *zck) {
     return zck->hash_type.type;
 }
 
+ssize_t PUBLIC zck_get_full_digest_size(zckCtx *zck) {
+    if(zck == NULL)
+        return -1;
+    return zck->hash_type.digest_size;
+}
+
 int PUBLIC zck_get_chunk_hash_type(zckCtx *zck) {
     if(zck == NULL)
         return -1;
     return zck->index.hash_type;
 }
 
+ssize_t PUBLIC zck_get_chunk_digest_size(zckCtx *zck) {
+    if(zck == NULL)
+        return -1;
+    return zck->index.digest_size;
+}
+
 ssize_t PUBLIC zck_get_index_count(zckCtx *zck) {
     if(zck == NULL)
         return -1;
@@ -378,7 +400,13 @@ char PUBLIC *zck_get_chunk_digest(zckIndexItem *item) {
 ssize_t PUBLIC zck_get_header_length(zckCtx *zck) {
     if(zck == NULL)
         return -1;
-    return zck->data_offset;
+    return zck->lead_size + zck->header_length;
+}
+
+ssize_t PUBLIC zck_get_lead_length(zckCtx *zck) {
+    if(zck == NULL)
+        return -1;
+    return zck->lead_size;
 }
 
 ssize_t PUBLIC zck_get_data_length(zckCtx *zck) {
@@ -616,3 +644,7 @@ int PUBLIC zck_validate_checksums(zckCtx *zck) {
 
     return valid_file;
 }
+
+int PUBLIC zck_get_fd(zckCtx *zck) {
+    return zck->fd;
+}