}
size_t length = 0;
- if(read_data(zck, header, lead) < lead)
+ if(read_data(zck, header, lead) < lead) {
+ free(header);
+ set_error(zck, "Short read");
return false;
+ }
if(memcmp(header, "\0ZCK1", 5) != 0) {
free(header);
if(!zck_init_read(zck_src, src_fd)) {
printf("Error reading %s: %s", arguments.args[0],
zck_get_error(zck_src));
+ zck_free(&zck_src);
exit(1);
}
close(src_fd);
if(tgt_fd < 0) {
printf("Unable to open %s\n", arguments.args[1]);
perror("");
+ zck_free(&zck_src);
exit(1);
}
zckCtx *zck_tgt = zck_create();
if(zck_tgt == NULL) {
printf("Unable to create zchunk context\n");
+ zck_free(&zck_src);
exit(1);
}
if(!zck_init_read(zck_tgt, tgt_fd)) {
printf("Error reading %s: %s", arguments.args[1],
zck_get_error(zck_tgt));
+ zck_free(&zck_src);
+ zck_free(&zck_tgt);
exit(1);
}
close(tgt_fd);
printf("ERROR: Chunk hash types don't match:\n");
printf(" %s: %s\n", arguments.args[0], zck_hash_name_from_type(zck_get_chunk_hash_type(zck_tgt)));
printf(" %s: %s\n", arguments.args[1], zck_hash_name_from_type(zck_get_chunk_hash_type(zck_src)));
+ zck_free(&zck_src);
+ zck_free(&zck_tgt);
exit(1);
}
zckChunk *tgt_idx = zck_get_first_chunk(zck_tgt);
}
int main (int argc, char *argv[]) {
- curl_global_init(CURL_GLOBAL_ALL);
-
struct arguments arguments = {0};
/* Defaults */
argp_parse (&argp, argc, argv, 0, 0, &arguments);
+ curl_global_init(CURL_GLOBAL_ALL);
+
zck_set_log_level(arguments.log_level);
zckCtx *zck_src = NULL;
exit(1);
}
if(!zck_init_read(zck, src_fd)) {
- printf("%s", zck_get_error(zck));
- printf("Unable to read zchunk header\n");
+ printf("Error reading zchunk header: %s", zck_get_error(zck));
+ zck_free(&zck);
exit(1);
}
printf("Expected checksum: (SHA-256)%s\n", checksum);
exit(1);
}
+ free(cksum);
/* Go back to beginning of file and read data from it */
if(lseek(in, 0, SEEK_SET) != 0) {
if(!zck_close(zck))
exit(1);
+ zck_free(&zck);
+ free(data);
return 0;
}
if(digest == NULL)
return NULL;
zck_free(&zck);
- return get_digest_string(digest, hash_type.digest_size);
+ char *digest_string = get_digest_string(digest, hash_type.digest_size);
+ free(digest);
+ return digest_string;
}