]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change remove global client errbuf
authorBastian Dehn <hhaalo@arcor.de>
Mon, 13 Oct 2025 18:15:03 +0000 (20:15 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Mon, 13 Oct 2025 18:15:03 +0000 (20:15 +0200)
src/kds_s2000w_client.c

index 6d0b415783421ae70578f284f11ce13f674cc327..671cedb80fcfcf0ac5e7faafea89ad852cbac201 100644 (file)
@@ -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