From: Jonathan Dieter Date: Mon, 4 Jun 2018 07:46:11 +0000 (+0300) Subject: New functions and rework zck_get_header_length so it works after only the X-Git-Tag: archive/raspbian/1.1.9+ds1-1+rpi1~1^2~259 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6cb745f967a314a5569659272dcf2ac4d68a8129;p=zchunk.git New functions and rework zck_get_header_length so it works after only the lead has been read Signed-off-by: Jonathan Dieter --- diff --git a/src/lib/zck.c b/src/lib/zck.c index 6904394..2923b66 100644 --- a/src/lib/zck.c +++ b/src/lib/zck.c @@ -54,6 +54,12 @@ 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; +}