return zck_comp_reset(zck);
}
-int zck_set_compression_type(zckCtx *zck, int type) {
+int PUBLIC zck_set_compression_type(zckCtx *zck, int type) {
VALIDATE(zck);
zckComp *comp = &(zck->comp);
return True;
}
-int zck_set_comp_parameter(zckCtx *zck, int option, void *value) {
+int PUBLIC zck_set_comp_parameter(zckCtx *zck, int option, void *value) {
VALIDATE(zck);
/* Cannot change compression parameters after compression has started */
return True;
}
-const char *zck_comp_name_from_type(int comp_type) {
+const char PUBLIC *zck_comp_name_from_type(int comp_type) {
if(comp_type > 2) {
snprintf(unknown+8, 21, "%i)", comp_type);
return unknown;
return True;
}
-ssize_t zck_write(zckCtx *zck, const char *src, const size_t src_size) {
+ssize_t PUBLIC zck_write(zckCtx *zck, const char *src, const size_t src_size) {
VALIDATE_WRITE_SIZE(zck);
if(!zck->comp.started && !zck_comp_init(zck))
return src_size;
}
-ssize_t zck_end_chunk(zckCtx *zck) {
+ssize_t PUBLIC zck_end_chunk(zckCtx *zck) {
VALIDATE_WRITE_SIZE(zck);
if(!zck->comp.started && !zck_comp_init(zck))
return -2;
}
-ssize_t zck_read(zckCtx *zck, char *dst, size_t dst_size) {
+ssize_t PUBLIC zck_read(zckCtx *zck, char *dst, size_t dst_size) {
VALIDATE_READ_SIZE(zck);
return comp_read(zck, dst, dst_size, 1);
return True;
}
-int zck_dl_copy_src_chunks(zckRange *info, zckCtx *src, zckCtx *tgt) {
+int PUBLIC zck_dl_copy_src_chunks(zckRange *info, zckCtx *src, zckCtx *tgt) {
zckIndex *tgt_info = zck_get_index(tgt);
zckIndex *src_info = zck_get_index(src);
zckIndexItem *tgt_idx = tgt_info->first;
return True;
}
-int zck_dl_range(zckDL *dl, char *url) {
+int PUBLIC zck_dl_range(zckDL *dl, char *url) {
return zck_dl_range_chk_chunk(dl, url, 1);
}
}
/* Download header */
-int zck_dl_get_header(zckCtx *zck, zckDL *dl, char *url) {
+int PUBLIC zck_dl_get_header(zckCtx *zck, zckDL *dl, char *url) {
if(zck == NULL) {
zck_log(ZCK_LOG_ERROR, "zckCtx not initialized\n");
return False;
return True;
}
-size_t zck_dl_get_bytes_downloaded(zckDL *dl) {
+size_t PUBLIC zck_dl_get_bytes_downloaded(zckDL *dl) {
VALIDATE(dl);
return dl->dl;
}
-size_t zck_dl_get_bytes_uploaded(zckDL *dl) {
+size_t PUBLIC zck_dl_get_bytes_uploaded(zckDL *dl) {
VALIDATE(dl);
return dl->ul;
}
-void zck_dl_global_init() {
+void PUBLIC zck_dl_global_init() {
curl_global_init(CURL_GLOBAL_ALL);
}
-void zck_dl_global_cleanup() {
+void PUBLIC zck_dl_global_cleanup() {
curl_global_cleanup();
}
}
/* Initialize zckDL. When finished, zckDL *must* be freed by zck_dl_free() */
-zckDL *zck_dl_init() {
+zckDL PUBLIC *zck_dl_init() {
zckDL *dl = zmalloc(sizeof(zckDL));
if(!dl) {
zck_log(ZCK_LOG_ERROR, "Unable to allocate %lu bytes for zckDL\n",
}
/* Free zckDL and set pointer to NULL */
-void zck_dl_free(zckDL **dl) {
+void PUBLIC zck_dl_free(zckDL **dl) {
if(!*dl)
return;
if((*dl)->priv) {
free(range);
}
-void zck_range_close(zckRange *info) {
+void PUBLIC zck_range_close(zckRange *info) {
zckRangeItem *next = info->first;
while(next) {
zckRangeItem *tmp = next;
return True;
}
-int zck_range_calc_segments(zckRange *info, unsigned int max_ranges) {
+int PUBLIC zck_range_calc_segments(zckRange *info, unsigned int max_ranges) {
if(max_ranges == 0)
return False;
info->segments = (info->count + max_ranges - 1) / max_ranges;
}
/* Returns 1 if data hash matches, 0 if it doesn't and -1 if failure */
-int zck_hash_check_data(zckCtx *zck, int dst_fd) {
+int PUBLIC zck_hash_check_data(zckCtx *zck, int dst_fd) {
if(!seek_data(dst_fd, zck->header_size + zck->index_size, SEEK_SET))
return -1;
if(!zck_hash_init(&(zck->check_full_hash), &(zck->hash_type)))
return NULL;
}
-const char *zck_hash_name_from_type(int hash_type) {
+const char PUBLIC *zck_hash_name_from_type(int hash_type) {
if(hash_type > 1) {
snprintf(unknown+8, 21, "%i)", hash_type);
return unknown;
static log_type log_level = ZCK_LOG_ERROR;
-void zck_set_log_level(log_type ll) {
+void PUBLIC zck_set_log_level(log_type ll) {
log_level = ll;
}
-void zck_log(log_type lt, const char *format, ...) {
+void PUBLIC zck_log(log_type lt, const char *format, ...) {
if(lt >= log_level) {
va_list args;
va_start(args, format);
sources = []
+add_global_arguments('-fvisibility=hidden', language : 'c')
subdir('comp')
subdir('hash')
subdir('index')
return False; \
}
-int zck_close(zckCtx *zck) {
+int PUBLIC zck_close(zckCtx *zck) {
VALIDATE(zck);
if(zck->mode == ZCK_MODE_WRITE) {
}
}
-void zck_free(zckCtx **zck) {
+void PUBLIC zck_free(zckCtx **zck) {
if(*zck == NULL)
return;
zck_clear(*zck);
*zck = NULL;
}
-zckCtx *zck_create() {
+zckCtx PUBLIC *zck_create() {
zckCtx *zck = zmalloc(sizeof(zckCtx));
if(zck == NULL) {
zck_log(ZCK_LOG_ERROR, "Unable to allocate %lu bytes\n",
return zck;
}
-zckCtx *zck_init_adv_read (int src_fd) {
+zckCtx PUBLIC *zck_init_adv_read (int src_fd) {
zckCtx *zck = zck_create();
if(zck == NULL)
return NULL;
return zck;
}
-zckCtx *zck_init_read (int src_fd) {
+zckCtx PUBLIC *zck_init_read (int src_fd) {
zckCtx *zck = zck_init_adv_read(src_fd);
if(zck == NULL)
return NULL;
return zck;
}
-zckCtx *zck_init_write (int dst_fd) {
+zckCtx PUBLIC *zck_init_write (int dst_fd) {
zckCtx *zck = zck_create();
if(zck == NULL)
return NULL;
return NULL;
}
-int zck_set_full_hash_type(zckCtx *zck, int hash_type) {
+int PUBLIC zck_set_full_hash_type(zckCtx *zck, int hash_type) {
VALIDATE(zck);
zck_log(ZCK_LOG_INFO, "Setting full hash to %s\n",
zck_hash_name_from_type(hash_type));
return True;
}
-int zck_set_chunk_hash_type(zckCtx *zck, int hash_type) {
+int PUBLIC zck_set_chunk_hash_type(zckCtx *zck, int hash_type) {
VALIDATE(zck);
memset(&(zck->chunk_hash_type), 0, sizeof(zckHashType));
zck_log(ZCK_LOG_INFO, "Setting chunk hash to %s\n",
return True;
}
-int zck_get_full_digest_size(zckCtx *zck) {
+int PUBLIC zck_get_full_digest_size(zckCtx *zck) {
if(zck == NULL)
return -1;
return zck->hash_type.digest_size;
}
-int zck_get_chunk_digest_size(zckCtx *zck) {
+int PUBLIC zck_get_chunk_digest_size(zckCtx *zck) {
if(zck == NULL || zck->index.digest_size == 0)
return -1;
return zck->index.digest_size;
}
-int zck_get_full_hash_type(zckCtx *zck) {
+int PUBLIC zck_get_full_hash_type(zckCtx *zck) {
if(zck == NULL)
return -1;
return zck->hash_type.type;
}
-int zck_get_chunk_hash_type(zckCtx *zck) {
+int PUBLIC zck_get_chunk_hash_type(zckCtx *zck) {
if(zck == NULL)
return -1;
return zck->index.hash_type;
}
-ssize_t zck_get_index_count(zckCtx *zck) {
+ssize_t PUBLIC zck_get_index_count(zckCtx *zck) {
if(zck == NULL)
return -1;
return zck->index.count;
}
-zckIndex *zck_get_index(zckCtx *zck) {
+zckIndex PUBLIC *zck_get_index(zckCtx *zck) {
if(zck == NULL)
return NULL;
return &(zck->index);
}
-char *zck_get_index_digest(zckCtx *zck) {
+char PUBLIC *zck_get_index_digest(zckCtx *zck) {
if(zck == NULL)
return NULL;
return zck->index_digest;
}
-char *zck_get_data_digest(zckCtx *zck) {
+char PUBLIC *zck_get_data_digest(zckCtx *zck) {
if(zck == NULL)
return NULL;
return zck->full_hash_digest;
}
-ssize_t zck_get_header_length(zckCtx *zck) {
+ssize_t PUBLIC zck_get_header_length(zckCtx *zck) {
if(zck == NULL)
return -1;
return zck->header_size + zck->index_size;
#define zmalloc(x) calloc(1, x)
+#define PUBLIC __attribute__((visibility("default")))
+
struct zckComp;
typedef int (*finit)(struct zckComp *comp);