ZCK_VAL_HEADER_HASH_TYPE, /* Set what the header hash type *should* be */
ZCK_VAL_HEADER_LENGTH, /* Set what the header length *should* be */
ZCK_UNCOMP_HEADER, /* Header should contain uncompressed size, too */
+ ZCK_NO_WRITE, /* Do not write to file when creating zck file -
+ Used to calculate header from existing umcompressed data */
ZCK_COMP_TYPE = 100, /* Set compression type using zck_comp */
ZCK_MANUAL_CHUNK, /* Disable auto-chunking */
ZCK_CHUNK_MIN, /* Minimum chunk size when manual chunking */
return -1;
zck->comp.dc_data_size += src_size;
- if(dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) {
+ if(zck->no_write == 0 && dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) {
free(dst);
return -1;
}
}
}
- if(zck->temp_fd) {
+ if(zck->temp_fd || zck->no_write) {
if(zck->comp.dict) {
char *dst = NULL;
size_t dst_size = 0;
zck->comp.dict_size, &dst, &dst_size, 0) < 0)
return false;
zck->comp.dc_data_size = zck->comp.dict_size;
- if(!write_data(zck, zck->temp_fd, dst, dst_size)) {
+ if(zck->no_write == 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) {
free(dst);
return false;
}
if(!zck->comp.end_cchunk(zck, comp, &dst, &dst_size, 0))
return false;
zck->comp.dc_data_size = 0;
- if(!write_data(zck, zck->temp_fd, dst, dst_size)) {
+ if(zck->no_write == 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) {
free(dst);
return false;
}
if(!zck->comp.end_cchunk(zck, &(zck->comp), &dst, &dst_size, 1))
return -1;
zck->comp.dc_data_size = 0;
- if(dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) {
+ if(zck->no_write == 0 && dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) {
free(dst);
return -1;
}
"Writing header: %llu bytes",
(long long unsigned) zck->lead_size
);
- if(!write_data(zck, zck->fd, zck->header, zck->header_size))
+ if(zck->no_write == 0 && !write_data(zck, zck->fd, zck->header, zck->header_size))
return false;
return true;
}
if(!set_chunk_hash_type(zck, ZCK_HASH_SHA256))
return false;
}
+ } else if(option == ZCK_NO_WRITE) {
+ if(value == 0) {
+ if(zck->no_write == 1) {
+ set_error(zck, "Unable to enable write after it's been disabled");
+ return false;
+ }
+ zck->no_write = 0;
+ } else if(value == 1) {
+ zck->no_write = 1;
+ if(zck->temp_fd) {
+ close(zck->temp_fd);
+ zck->temp_fd = 0;
+ }
+ } else {
+ set_error(zck, "Unknown value %lli for ZCK_NO_WRITE", (long long) value);
+ return false;
+ }
/* Hash options */
} else if(option < 100) {