}
idx = idx->next;
}
- return validate_file(zck, ZCK_LOG_WARNING);
+ int ret = validate_file(zck, ZCK_LOG_WARNING);
+ if(!seek_data(zck, zck->data_offset, SEEK_SET))
+ return 0;
+ if(!hash_init(zck, &(zck->check_full_hash), &(zck->hash_type)))
+ return 0;
+ return ret;
}
const char PUBLIC *zck_hash_name_from_type(int hash_type) {
return False;
if(!hash_update(zck, &(zck->check_full_hash), header, zck->header_length))
return False;
- if(validate_header(zck) < 1)
+ int ret = validate_header(zck);
+ if(ret < 1) {
+ if(ret == -1)
+ set_fatal_error(zck, "Header checksum failed verification");
return False;
+ }
return True;
}
void zck_log_v(const char *function, zck_log_type lt, const char *format,
va_list args) {
- if(lt < log_level)
+ if(lt < log_level || log_level == ZCK_LOG_ERROR)
return;
dprintf(log_fd, "%s: ", function);
static struct argp_option options[] = {
{"verbose", 'v', 0, 0,
"Increase verbosity (can be specified more than once for debugging)"},
- {"quiet", 'q', 0, 0, "Only show errors"},
{"stdout", 'c', 0, 0, "Direct output to stdout"},
{"version", 'V', 0, 0, "Show program version"},
{ 0 }
if(arguments->log_level < ZCK_LOG_DDEBUG)
arguments->log_level = ZCK_LOG_DDEBUG;
break;
- case 'q':
- arguments->log_level = ZCK_LOG_ERROR;
- break;
case 'c':
arguments->stdout = 1;
break;
struct arguments arguments = {0};
/* Defaults */
- arguments.log_level = ZCK_LOG_WARNING;
+ arguments.log_level = ZCK_LOG_ERROR;
argp_parse (&argp, argc, argv, 0, 0, &arguments);
if(!zck_init_read(zck, src_fd))
goto error2;
+ int ret = zck_validate_data_checksum(zck);
+ if(ret < 1) {
+ if(ret == -1)
+ printf("Data checksum failed verification\n");
+ goto error2;
+ }
+
size_t total = 0;
while(True) {
ssize_t read = zck_read(zck, data, BUF_SIZE);