From 73dff932cd85b5c1f1f7811d5f994eee637ca5fb Mon Sep 17 00:00:00 2001 From: Jonathan Dieter Date: Tue, 5 Jun 2018 14:09:35 +0300 Subject: [PATCH] Fix IndexItem->valid so it is either -1 (failed), 0 (missing) or 1 (good) Signed-off-by: Jonathan Dieter --- src/lib/index/index_read.c | 41 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/lib/index/index_read.c b/src/lib/index/index_read.c index 431f09c..8dc99fd 100644 --- a/src/lib/index/index_read.c +++ b/src/lib/index/index_read.c @@ -32,10 +32,15 @@ #include "zck_private.h" +#define VALIDATE(f) if(!f) { \ + zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n"); \ + return False; \ + } + int zck_index_read(zckCtx *zck, char *data, size_t size, size_t max_length) { + VALIDATE(zck); size_t length = 0; - /* Read and configure hash type */ int hash_type; if(!compint_to_int(&hash_type, data + length, &length, max_length)) @@ -88,7 +93,7 @@ int zck_index_read(zckCtx *zck, char *data, size_t size, size_t max_length) { return False; new->length = chunk_length; - new->valid = False; + new->valid = 0; idx_loc += new->comp_length; zck->index.length = idx_loc; @@ -102,3 +107,35 @@ int zck_index_read(zckCtx *zck, char *data, size_t size, size_t max_length) { zck->index_string = NULL; return True; } + +int PUBLIC zck_missing_chunks(zckCtx *zck) { + if(zck == NULL) { + zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n"); + return -1; + } + int missing = 0; + for(zckIndexItem *idx = zck->index.first; idx; idx=idx->next) + if(idx->valid == 0) + missing++; + return missing; +} + +int PUBLIC zck_has_failed_chunks(zckCtx *zck) { + if(zck == NULL) { + zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n"); + return -1; + } + int failed = 0; + for(zckIndexItem *idx = zck->index.first; idx; idx=idx->next) + if(idx->valid == -1) + failed++; + return failed; +} + +int PUBLIC zck_reset_failed_chunks(zckCtx *zck) { + VALIDATE(zck); + for(zckIndexItem *idx = zck->index.first; idx; idx=idx->next) + if(idx->valid == -1) + idx->valid = 0; + return True; +} -- 2.30.2