From eb6371afa574ffbce00ed4de2618ad28fd01cde2 Mon Sep 17 00:00:00 2001 From: Otavio Pontes Date: Thu, 18 Apr 2019 12:34:36 -0700 Subject: [PATCH] curl: Use a struct declaration instead of void pointers We can declare the scruct in a header file and define it in a source file so we can avoid using void pointers for the handle. It's a better approach because compilers can trigger errors if we use a different type. Signed-off-by: Otavio Pontes --- src/curl_async.c | 29 +++++++++-------------------- src/fullfile.c | 4 ++-- src/packs.c | 4 ++-- src/swupd_curl.h | 15 ++++++++++----- 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/curl_async.c b/src/curl_async.c index 8b6864a0..b2fd5802 100644 --- a/src/curl_async.c +++ b/src/curl_async.c @@ -175,7 +175,7 @@ static void reevaluate_number_of_parallel_downloads(struct swupd_curl_parallel_h info("Curl - Reducing number of parallel downloads to %ld\n", h->max_xfer); } -void *swupd_curl_parallel_download_start(size_t max_xfer) +struct swupd_curl_parallel_handle *swupd_curl_parallel_download_start(size_t max_xfer) { struct swupd_curl_parallel_handle *h = calloc(1, sizeof(struct swupd_curl_parallel_handle)); ON_NULL_ABORT(h); @@ -211,30 +211,24 @@ error: return NULL; } -void swupd_curl_parallel_download_set_callbacks(void *handle, swupd_curl_success_cb success_cb, swupd_curl_error_cb error_cb, swupd_curl_free_cb free_cb) +void swupd_curl_parallel_download_set_callbacks(struct swupd_curl_parallel_handle *h, swupd_curl_success_cb success_cb, swupd_curl_error_cb error_cb, swupd_curl_free_cb free_cb) { - struct swupd_curl_parallel_handle *h; - - if (!handle) { + if (!h) { error("Curl - Invalid parallel download handle\n"); return; } - h = handle; h->success_cb = success_cb; h->error_cb = error_cb; h->free_cb = free_cb; } -void swupd_curl_parallel_download_set_progress_callbacks(void *handle, swupd_curl_progress_cb progress_cb, void *data) +void swupd_curl_parallel_download_set_progress_callbacks(struct swupd_curl_parallel_handle *h, swupd_curl_progress_cb progress_cb, void *data) { - struct swupd_curl_parallel_handle *h; - - if (!handle) { + if (!h) { error("Curl - Invalid parallel download handle\n"); return; } - h = handle; h->progress_cb = progress_cb; h->data = data; @@ -505,16 +499,14 @@ out_bad: return -1; } -int swupd_curl_parallel_download_enqueue(void *handle, const char *url, const char *filename, const char *hash, void *data) +int swupd_curl_parallel_download_enqueue(struct swupd_curl_parallel_handle *h, const char *url, const char *filename, const char *hash, void *data) { - struct swupd_curl_parallel_handle *h; struct multi_curl_file *file; - if (!handle) { + if (!h) { error("Curl - Invalid parallel download handle\n"); return -1; } - h = handle; file = calloc(1, sizeof(struct multi_curl_file)); ON_NULL_ABORT(file); @@ -539,22 +531,19 @@ int swupd_curl_parallel_download_enqueue(void *handle, const char *url, const ch return process_download(h, file); } -int swupd_curl_parallel_download_end(void *handle, int *num_downloads) +int swupd_curl_parallel_download_end(struct swupd_curl_parallel_handle *h, int *num_downloads) { - struct swupd_curl_parallel_handle *h; struct multi_curl_file *file; int i, downloads = 0; struct list *l; bool retry = true; int ret = 0; - if (!handle) { + if (!h) { error("Curl - Invalid parallel download handle\n"); return -1; } - h = handle; - while (poll_fewer_than(h, 0, 0) == 0 && retry) { retry = false; diff --git a/src/fullfile.c b/src/fullfile.c index cdd9d9c0..49277bfe 100644 --- a/src/fullfile.c +++ b/src/fullfile.c @@ -48,7 +48,7 @@ static void download_mix_file(struct file *file) free_string(&filename); } -static void download_file(void *download_handle, struct file *file) +static void download_file(struct swupd_curl_parallel_handle *download_handle, struct file *file) { char *url, *filename; @@ -121,7 +121,7 @@ static double fullfile_query_total_download_size(struct list *files) */ int download_fullfiles(struct list *files, int *num_downloads) { - void *download_handle; + struct swupd_curl_parallel_handle *download_handle; struct list *iter; struct list *need_download = NULL; struct file *file; diff --git a/src/packs.c b/src/packs.c index f0b415dd..29b9ca0a 100644 --- a/src/packs.c +++ b/src/packs.c @@ -113,7 +113,7 @@ static bool download_successful(void *data) return finalize_pack_download(pack_data->module, pack_data->newversion, pack_data->filename) == 0; } -static int download_pack(void *download_handle, int oldversion, int newversion, char *module, int is_mix) +static int download_pack(struct swupd_curl_parallel_handle *download_handle, int oldversion, int newversion, char *module, int is_mix) { char *url = NULL; int err = -1; @@ -208,7 +208,7 @@ int download_subscribed_packs(struct list *subs, struct manifest *mom, bool requ int err; unsigned int list_length; unsigned int complete = 0; - void *download_handle; + struct swupd_curl_parallel_handle *download_handle; char *packs_size; /* make a new list with only the bundles we actually need to download packs for */ diff --git a/src/swupd_curl.h b/src/swupd_curl.h index fd9b49b3..add519ce 100644 --- a/src/swupd_curl.h +++ b/src/swupd_curl.h @@ -30,6 +30,11 @@ enum download_status { DOWNLOAD_STATUS_ERROR, }; +/* + * Handle for swupd curl parallel functions. + */ +struct swupd_curl_parallel_handle; + /* * Callback to be called when a download is successful. */ @@ -92,7 +97,7 @@ int swupd_curl_get_file_memory(const char *url, struct curl_file_data *file_data * * Note: This function is non-blocking. */ -void *swupd_curl_parallel_download_start(size_t max_xfer); +struct swupd_curl_parallel_handle *swupd_curl_parallel_download_start(size_t max_xfer); /* * Set parallel downloads callbacks. @@ -108,7 +113,7 @@ void *swupd_curl_parallel_download_start(size_t max_xfer); * to schedule a retry. * - free_cb(): Called when data is ready to be freed. */ -void swupd_curl_parallel_download_set_callbacks(void *handle, swupd_curl_success_cb success_cb, swupd_curl_error_cb error_cb, swupd_curl_free_cb free_cb); +void swupd_curl_parallel_download_set_callbacks(struct swupd_curl_parallel_handle *handle, swupd_curl_success_cb success_cb, swupd_curl_error_cb error_cb, swupd_curl_free_cb free_cb); /* * Set parallel downloads progress callback @@ -118,7 +123,7 @@ void swupd_curl_parallel_download_set_callbacks(void *handle, swupd_curl_success * function prints the download progress, so it will always return 0. * - data: User data to be informed to progress_cb. */ -void swupd_curl_parallel_download_set_progress_callbacks(void *handle, swupd_curl_progress_cb progress_cb, void *data); +void swupd_curl_parallel_download_set_progress_callbacks(struct swupd_curl_parallel_handle *handle, swupd_curl_progress_cb progress_cb, void *data); /* * Enqueue a file to be downloaded. If the number of current downloads is higher @@ -136,7 +141,7 @@ void swupd_curl_parallel_download_set_progress_callbacks(void *handle, swupd_cur * * Note: This function MAY be blocked. */ -int swupd_curl_parallel_download_enqueue(void *handle, const char *url, const char *filename, const char *hash, void *data); +int swupd_curl_parallel_download_enqueue(struct swupd_curl_parallel_handle *handle, const char *url, const char *filename, const char *hash, void *data); /* * Finish all pending downloads and free memory allocated by parallel download @@ -149,7 +154,7 @@ int swupd_curl_parallel_download_enqueue(void *handle, const char *url, const ch * * Note: This function MAY be blocked. */ -int swupd_curl_parallel_download_end(void *handle, int *num_downloads); +int swupd_curl_parallel_download_end(struct swupd_curl_parallel_handle *handle, int *num_downloads); #ifdef __cplusplus }