}
int zck_hash_update(zckHash *hash, const char *message, const size_t size) {
+ if(message == NULL && size == 0)
+ return True;
+ if(message == NULL) {
+ zck_log(ZCK_LOG_ERROR,
+ "Hash data is supposed to have %lu bytes, but is NULL\n", size);
+ return False;
+ }
+ if(size == 0) {
+ zck_log(ZCK_LOG_ERROR,
+ "Hash data is supposed to be 0-length, but is not NULL\n");
+ return False;
+ }
if(hash && hash->ctx && hash->type) {
if(hash->type->type == ZCK_HASH_SHA1) {
SHA1_Update((SHA_CTX *)hash->ctx, (const sha1_byte *)message, size);
#include "zck_private.h"
+#define VALIDATE(f) if(!f) { \
+ zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n"); \
+ return False; \
+ }
+
int zck_write_file(zckCtx *zck) {
- if(zck == NULL) {
- zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n");
- return False;
- }
+ VALIDATE(zck);
zck_index_finalize(zck);
zck_log(ZCK_LOG_DEBUG, "Writing header\n");
if(!zck_write_header(zck))
zck->temp_fd = 0;
}
free(zck);
- zck = NULL;
}
zckCtx *zck_create() {
}
int zck_set_full_hash_type(zckCtx *zck, uint8_t hash_type) {
- if(zck == NULL) {
- zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n");
- return False;
- }
+ VALIDATE(zck);
zck_log(ZCK_LOG_INFO, "Setting full hash to %s\n",
zck_hash_name_from_type(hash_type));
if(!zck_hash_setup(&(zck->hash_type), hash_type)) {
}
int zck_set_chunk_hash_type(zckCtx *zck, uint8_t hash_type) {
- if(zck == NULL) {
- zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n");
- return False;
- }
+ VALIDATE(zck);
memset(&(zck->chunk_hash_type), 0, sizeof(zckHashType));
zck_log(ZCK_LOG_INFO, "Setting chunk hash to %s\n",
zck_hash_name_from_type(hash_type));
zck_log(ZCK_LOG_ERROR, "Unable to create temporary file\n");
return -1;
}
- /*if(unlink(fname) < 0) {
+ if(unlink(fname) < 0) {
free(fname);
zck_log(ZCK_LOG_ERROR, "Unable to delete temporary file\n");
return -1;
- }*/
+ }
free(fname);
return temp_fd;
}
int zck_init_write (zckCtx *zck, int dst_fd) {
- /* Clear zck */
+ VALIDATE(zck);
+ zck_free(zck);
memset(zck, 0, sizeof(zckCtx));
zck->temp_fd = zck_get_tmp_fd();
}
int zck_import_dict(zckCtx *zck, char *data, size_t size) {
+ VALIDATE(zck);
+ if(data == NULL || size == 0) {
+ zck_log(ZCK_LOG_ERROR,
+ "Attempting to initialize an empty compression dictionary\n");
+ return False;
+ }
if(!zck_comp_close(zck))
return False;
if(!zck_set_comp_parameter(zck, ZCK_COMMON_DICT, data))
int zck_validate_chunk(zckCtx *zck, char *data, size_t size, zckIndex *idx,
int chk_num) {
+ VALIDATE(zck);
+ if(idx == NULL) {
+ zck_log(ZCK_LOG_ERROR, "zckIndex not initialized\n");
+ return False;
+ }
zckHash chunk_hash;
/* Overall chunk checksum */
}
int zck_validate_file(zckCtx *zck) {
+ VALIDATE(zck);
char *digest = zck_hash_finalize(&(zck->check_full_hash));
if(digest == NULL) {
zck_log(ZCK_LOG_ERROR,
}
int zck_decompress_to_file(zckCtx *zck, int src_fd, int dst_fd) {
+ VALIDATE(zck);
if(!zck_read_header(zck, src_fd))
return False;
if(!zck_hash_init(&(zck->check_full_hash), &(zck->hash_type)))