From b25b2ccc5eedd3150557af4c9b85885ea294bd7d Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Mon, 13 Oct 2025 20:15:03 +0200 Subject: [PATCH] change remove global client errbuf --- src/kds_s2000w_client.c | 71 +++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/src/kds_s2000w_client.c b/src/kds_s2000w_client.c index 6d0b415..671cedb 100644 --- a/src/kds_s2000w_client.c +++ b/src/kds_s2000w_client.c @@ -25,7 +25,6 @@ #define CONFIGURATION_PATH "/api/session/configuration" CURL* curl = NULL; -char* errbuf = NULL; typedef struct { char* scanner_url; @@ -88,7 +87,7 @@ void _kds_s2000w_client_print_error_status(CURL* curl) kds_s2000w_debug_printf(ERROR, header->value); } -void _kds_s2000w_client_print_error_result(CURLcode result) +void _kds_s2000w_client_print_error_result(const CURLcode result, const char* errbuf) { if (result == CURLE_OK) return; @@ -96,7 +95,6 @@ void _kds_s2000w_client_print_error_result(CURLcode result) size_t len = strlen(errbuf); if (len > 0) { kds_s2000w_debug_printf(ERROR, errbuf); - memset(errbuf, 0, CURL_ERROR_SIZE); return; } @@ -122,6 +120,16 @@ void _kds_s2000w_client_set_config(const char* scanner_url, const char* username client_config.heartbeat = heartbeat; } +char* _kds_s2000w_client_errbuf_init() +{ + char* errbuf = malloc(sizeof(char) * CURL_ERROR_SIZE); + if (errbuf == NULL) + return NULL; + + memset(errbuf, 0, CURL_ERROR_SIZE); + return errbuf; +} + void kds_s2000w_client_init(const char* scanner_url, const char* username, bool ssl_verify, uint8_t heartbeat) { kds_s2000w_debug_printf(ALL, "kds_s2000w_client_init"); @@ -129,11 +137,6 @@ void kds_s2000w_client_init(const char* scanner_url, const char* username, bool _kds_s2000w_client_set_config(scanner_url, username, ssl_verify, heartbeat); curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); - errbuf = malloc(CURL_ERROR_SIZE); - if (errbuf == NULL) - return; - - memset(errbuf, 0, CURL_ERROR_SIZE); } void kds_s2000w_client_free() @@ -147,8 +150,6 @@ void kds_s2000w_client_free() curl_easy_cleanup(curl); curl = NULL; curl_global_cleanup(); - free(errbuf); - errbuf = NULL; } response* kds_s2000w_client_response_init() @@ -213,6 +214,7 @@ uint8_t kds_s2000w_client_open_session(response* resp) curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); @@ -222,7 +224,7 @@ uint8_t kds_s2000w_client_open_session(response* resp) curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -232,6 +234,8 @@ uint8_t kds_s2000w_client_open_session(response* resp) body = NULL; curl_free(url); url = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -269,11 +273,12 @@ void kds_s2000w_client_close_session(int64_t sessionid) curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, HTTP_DELETE); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); _kds_s2000w_client_set_verbose(); CURLcode result = curl_easy_perform(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -283,6 +288,8 @@ void kds_s2000w_client_close_session(int64_t sessionid) headers = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; } uint8_t kds_s2000w_client_get_capabilities(response* resp) @@ -307,6 +314,7 @@ uint8_t kds_s2000w_client_get_capabilities(response* resp) curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); @@ -316,7 +324,7 @@ uint8_t kds_s2000w_client_get_capabilities(response* resp) curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -324,6 +332,8 @@ uint8_t kds_s2000w_client_get_capabilities(response* resp) headers = NULL; curl_free(url); url = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -364,6 +374,7 @@ uint8_t kds_s2000w_client_status_session(int64_t sessionid, response* resp) curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); @@ -373,7 +384,7 @@ uint8_t kds_s2000w_client_status_session(int64_t sessionid, response* resp) curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -383,6 +394,8 @@ uint8_t kds_s2000w_client_status_session(int64_t sessionid, response* resp) url = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -421,12 +434,13 @@ uint8_t kds_s2000w_client_start_scan(int64_t sessionid) curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); _kds_s2000w_client_set_verbose(); CURLcode result = curl_easy_perform(curl); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -436,6 +450,8 @@ uint8_t kds_s2000w_client_start_scan(int64_t sessionid) url = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -474,12 +490,13 @@ uint8_t kds_s2000w_client_stop_scan(int64_t sessionid) curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); _kds_s2000w_client_set_verbose(); CURLcode result = curl_easy_perform(curl); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -489,6 +506,8 @@ uint8_t kds_s2000w_client_stop_scan(int64_t sessionid) url = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -537,6 +556,7 @@ uint8_t kds_s2000w_client_get_image(int64_t sessionid, uint8_t img_number, respo curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); @@ -545,7 +565,7 @@ uint8_t kds_s2000w_client_get_image(int64_t sessionid, uint8_t img_number, respo curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -557,6 +577,8 @@ uint8_t kds_s2000w_client_get_image(int64_t sessionid, uint8_t img_number, respo url_path = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -605,12 +627,13 @@ uint8_t kds_s2000w_client_delete_image(int64_t sessionid, uint8_t img_number) curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, HTTP_DELETE); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); _kds_s2000w_client_set_verbose(); CURLcode result = curl_easy_perform(curl); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -622,6 +645,8 @@ uint8_t kds_s2000w_client_delete_image(int64_t sessionid, uint8_t img_number) url = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -659,6 +684,7 @@ uint8_t kds_s2000w_client_get_option(int64_t sessionid, response* resp) curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); @@ -668,7 +694,7 @@ uint8_t kds_s2000w_client_get_option(int64_t sessionid, response* resp) curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -678,6 +704,8 @@ uint8_t kds_s2000w_client_get_option(int64_t sessionid, response* resp) url = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; return result; } @@ -717,13 +745,14 @@ uint8_t kds_s2000w_client_set_option(int64_t sessionid, response* resp) curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, HTTP_PUT); _kds_s2000w_client_set_ssl_verification_off(curl); + char* errbuf = _kds_s2000w_client_errbuf_init(); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); _kds_s2000w_client_set_verbose(); CURLcode result = curl_easy_perform(curl); curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code); _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result); + _kds_s2000w_client_print_error_result(result, errbuf); curl_url_cleanup(url_handler); url_handler = NULL; @@ -733,6 +762,8 @@ uint8_t kds_s2000w_client_set_option(int64_t sessionid, response* resp) url = NULL; free(header_str); header_str = NULL; + free(errbuf); + errbuf = NULL; return result; } \ No newline at end of file -- 2.47.3