}
int zck_range_get_need_dl(zckRangeInfo *info, zckCtx *zck_src, zckCtx *zck_tgt) {
- zckIndex *tgt_idx = zck_get_index(zck_tgt);
- zckIndex *src_idx = zck_get_index(zck_src);
+ zckIndexInfo *tgt_info = zck_get_index(zck_tgt);
+ zckIndexInfo *src_info = zck_get_index(zck_src);
+ zckIndex *tgt_idx = tgt_info->first;
+ zckIndex *src_idx = src_info->first;
while(tgt_idx) {
int found = False;
- src_idx = zck_get_index(zck_src);
+ src_idx = src_info->first;
while(src_idx) {
if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) == 0) {
free(tmp);
tmp = next;
}
- memset(&(zck->index), 0, sizeof(zckIndexInfo));
}
+ if(zck->index.hash_type)
+ free(zck->index.hash_type);
+ memset(&(zck->index), 0, sizeof(zckIndexInfo));
if(zck->full_hash_digest) {
free(zck->full_hash_digest);
zck->full_hash_digest = NULL;
return False;
}
dl->index.count = dl->index.count + 1;
+ return True;
}
int zck_index_add_chunk(zckCtx *zck, char *data, size_t size) {
- zckIndex *new_index;
zckHash hash;
if(zck == NULL) {
if(!zck_index_new_chunk(&(zck->index), NULL, size))
return False;
} else {
- if(!zck_hash_update(&(zck->full_hash), data, size)) {
- free(new_index);
+ if(!zck_hash_update(&(zck->full_hash), data, size))
return False;
- }
- if(!zck_hash_init(&hash, zck->index.hash_type)) {
- free(new_index);
+ if(!zck_hash_init(&hash, zck->index.hash_type))
return False;
- }
- if(!zck_hash_update(&hash, data, size)) {
- free(new_index);
+ if(!zck_hash_update(&hash, data, size))
return False;
- }
+
char *digest = zck_hash_finalize(&hash);
if(digest == NULL) {
zck_log(ZCK_LOG_ERROR,
return False;
}
memcpy(&hash_type, dst, 1);
- if(!zck_hash_setup(zck->index.hash_type, hash_type)) {
+ if(!zck_set_chunk_hash_type(zck, hash_type)) {
if(dst)
free(dst);
return False;
printf(" %s: %s\n", argv[2], zck_hash_name_from_type(zck_get_chunk_hash_type(zck_src)));
return 1;
}
- zckIndex *tgt_idx = zck_get_index(zck_tgt);
- zckIndex *src_idx = zck_get_index(zck_src);
+ zckIndexInfo *tgt_info = zck_get_index(zck_tgt);
+ if(tgt_info == NULL)
+ exit(1);
+ zckIndexInfo *src_info = zck_get_index(zck_src);
+ if(src_info == NULL)
+ exit(1);
+ zckIndex *tgt_idx = tgt_info->first;
+ zckIndex *src_idx = src_info->first;
if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) != 0)
printf("WARNING: Dicts don't match\n");
int dl_size = 0;
int matched_chunks = 0;
while(tgt_idx) {
int found = False;
- src_idx = zck_get_index(zck_src);
+ src_idx = src_info->first;
while(src_idx) {
if(memcmp(tgt_idx->digest, src_idx->digest, zck_get_chunk_digest_size(zck_tgt)) == 0) {
exit(1);
}
close(src_fd);
- zckIndex *idx = zck_get_index(zck);
+
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);
printf("\n");
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)));
+ zckIndexInfo *idxi = zck_get_index(zck);
+ if(idxi == NULL)
+ exit(1);
+ zckIndex *idx = idxi->first;
while(idx) {
for(int i=0; i<zck_get_chunk_digest_size(zck); i++)
printf("%02x", (unsigned char)idx->digest[i]);