]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change metdata with pointer
authorBastian Dehn <hhaalo@arcor.de>
Sun, 18 Feb 2024 18:34:01 +0000 (19:34 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 18 Feb 2024 18:38:17 +0000 (19:38 +0100)
src/kds_s2000w_handler.c
src/kds_s2000w_handler.h
src/kds_s2000w_net.c
tests/kds_s2000w_net_get_params_tests.c
tests/kds_s2000w_net_read_tests.c
tests/runtests.c

index b6b51c6a0e72d7cdcc39436ec3d99ee1ba4767ef..3d7e7e87ef301c0750799573839197e86badd028 100644 (file)
@@ -21,13 +21,13 @@ void _get_current_metadata(handler* h)
        resp = kds_s2000w_client_response_init();
        kds_s2000w_client_get_metadata(h->sessionid, h->current_scan_status->current_image_number, resp);
        if (resp->code != 200) {
-               h->current_metadata.valid = 0;
+               h->current_metadata->valid = 0;
                kds_s2000w_client_response_free(resp);
                resp = NULL;
                return;
        }
 
-       h->current_metadata.valid = 0;
+       h->current_metadata->valid = 0;
        json_object* metadataResp = NULL;
        json_object* metadata = NULL;
        json_object* mdata_value = NULL;
@@ -36,19 +36,19 @@ void _get_current_metadata(handler* h)
        metadataResp = json_tokener_parse(resp->data);
        metadata = json_object_object_get(metadataResp, "Metadata");
        mdata_value = json_object_object_get(metadata, "BitDepth");
-       h->current_metadata.depth = json_object_get_int(mdata_value);
+       h->current_metadata->depth = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        mdata_value = json_object_object_get(metadata, "ImageSize");
-       h->current_metadata.size = json_object_get_int(mdata_value);
+       h->current_metadata->size = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        mdata_value = json_object_object_get(metadata, "ImageWidth");
-       h->current_metadata.pixels_per_line = json_object_get_int(mdata_value);
+       h->current_metadata->pixels_per_line = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        mdata_value = json_object_object_get(metadata, "ImageHeight");
-       h->current_metadata.lines = json_object_get_int(mdata_value);
+       h->current_metadata->lines = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        json_object_put(metadataResp);
@@ -58,15 +58,15 @@ void _get_current_metadata(handler* h)
        mdata_value = NULL;
 
        if (strcmp(color_value, "Color") == 0)
-               h->current_metadata.format = 1;
+               h->current_metadata->format = 1;
 
        if (strcmp(color_value, "Gray") == 0)
-               h->current_metadata.format = 0;
+               h->current_metadata->format = 0;
 
        if (strcmp(color_value, "BW") == 0)
-               h->current_metadata.format = 0;
+               h->current_metadata->format = 0;
 
-       if (h->current_metadata.format == 1)
+       if (h->current_metadata->format == 1)
                channels = 3;
 
        if (pnm_image.size > 0) {
@@ -74,24 +74,24 @@ void _get_current_metadata(handler* h)
                pnm_image.data = NULL;
                pnm_image.size = 0;
        }
-       if (h->current_metadata.depth > 8) {
-               h->current_metadata.depth = 8;
-               kds_s2000w_convert_jpg_to_pnm_With_depth(&image, &pnm_image, h->current_metadata.depth);
+       if (h->current_metadata->depth > 8) {
+               h->current_metadata->depth = 8;
+               kds_s2000w_convert_jpg_to_pnm_With_depth(&image, &pnm_image, h->current_metadata->depth);
        } else {
                kds_s2000w_convert_jpg_to_pnm(&image, &pnm_image);
        }
 
-       h->current_metadata.size = pnm_image.size;
-       h->current_metadata.image = pnm_image.data;
+       h->current_metadata->size = pnm_image.size;
+       h->current_metadata->image = pnm_image.data;
        debug_printf_int(DEBUG, "size of pnm image", pnm_image.size);
 
-       if (h->current_metadata.depth == 1)
-               h->current_metadata.bytes_per_line = channels * floor((h->current_metadata.pixels_per_line + 7) / 8);
+       if (h->current_metadata->depth == 1)
+               h->current_metadata->bytes_per_line = channels * floor((h->current_metadata->pixels_per_line + 7) / 8);
        else
-               h->current_metadata.bytes_per_line = channels * h->current_metadata.pixels_per_line * h->current_metadata.depth / 8;
+               h->current_metadata->bytes_per_line = channels * h->current_metadata->pixels_per_line * h->current_metadata->depth / 8;
 
-       h->current_metadata.valid = 1;
-       h->current_metadata.is_last = 0;
+       h->current_metadata->valid = 1;
+       h->current_metadata->is_last = 0;
        
        metadata = NULL;
        kds_s2000w_client_response_free(resp);
@@ -171,16 +171,17 @@ void kds_s2000w_handler_open(const char* devicename, void** handle)
        h->current_scan_status->available_images = 0;
        h->current_scan_status->downloaded_images = 0;
        h->current_scan_status->complete_scanned = 0;
-       h->current_metadata.format = 0;
-       h->current_metadata.is_last = 0;
-       h->current_metadata.size = 0;
-       h->current_metadata.bytes_per_line = 0;
-       h->current_metadata.pixels_per_line = 0;
-       h->current_metadata.lines = 0;
-       h->current_metadata.depth = 0;
-       h->current_metadata.valid = 0;
-       h->current_metadata.scanned_all_complete = 0;
-       h->current_metadata.image = NULL;
+       h->current_metadata = malloc(sizeof(metadata));
+       h->current_metadata->format = 0;
+       h->current_metadata->is_last = 0;
+       h->current_metadata->size = 0;
+       h->current_metadata->bytes_per_line = 0;
+       h->current_metadata->pixels_per_line = 0;
+       h->current_metadata->lines = 0;
+       h->current_metadata->depth = 0;
+       h->current_metadata->valid = 0;
+       h->current_metadata->scanned_all_complete = 0;
+       h->current_metadata->image = NULL;
        h->read_info.scan_started = 0;
        h->read_info.cancel = 0;
        h->read_info.read_size = 0;
@@ -236,7 +237,7 @@ void kds_s2000w_handler_open(const char* devicename, void** handle)
        h->current_scan_status->available_images = 0;
        h->current_scan_status->downloaded_images = 0;
        h->current_scan_status->complete_scanned = 0;
-       h->current_metadata.scanned_all_complete = 0;
+       h->current_metadata->scanned_all_complete = 0;
        return;
 }
 
@@ -257,6 +258,10 @@ void kds_s2000w_handler_close(void* handle)
        image.data = NULL;
        free(h->current_scan_status);
        h->current_scan_status = NULL;
+       free(h->current_metadata->image);
+       h->current_metadata->image = NULL;
+       free(h->current_metadata);
+       h->current_metadata = NULL;
        free(h);
        h = NULL;
 }
@@ -281,7 +286,7 @@ void kds_s2000w_handler_stop_scan(void* handle)
        resp = NULL;
 }
 
-metadata kds_s2000w_handler_get_parameters(void* handle)
+void kds_s2000w_handler_get_parameters(void* handle)
 {
        debug_printf(ALL, "kds_s2000w_handler_get_parameters");
        handler* h = (handler*) handle;
@@ -292,21 +297,19 @@ metadata kds_s2000w_handler_get_parameters(void* handle)
 
        if (h->current_scan_status->complete_scanned
                && h->current_scan_status->downloaded_images == h->current_scan_status->available_images) {
-               h->current_metadata.valid = 1;
-               h->current_metadata.scanned_all_complete = 1;
-               h->current_metadata.is_last = 1;
-               return h->current_metadata;
+               h->current_metadata->valid = 1;
+               h->current_metadata->scanned_all_complete = 1;
+               h->current_metadata->is_last = 1;
+               return;
        }
 
        if (h->current_scan_status->downloaded_images >= h->current_scan_status->available_images) {
-               h->current_metadata.valid = 0;
-               return h->current_metadata;
+               h->current_metadata->valid = 0;
+               return;
        }
 
        _download_current_image(h);
        _get_current_metadata(h);
        _delete_current_image(h);
        h->current_scan_status->current_image_number++;
-
-       return h->current_metadata;
 }
\ No newline at end of file
index 14edb3d7367882aabad4466d89c3bae7a0594179..101b152177a1f9b606663eb47117626d71829916 100644 (file)
@@ -43,7 +43,7 @@ typedef struct {
        long sessionid;
        int state;
        scan_status* current_scan_status;
-       metadata current_metadata;
+       metadata* current_metadata;
        readinfo read_info;
 } handler;
 
@@ -54,5 +54,5 @@ void kds_s2000w_handler_set_option(void* handle, int option, void* value, int* i
 void kds_s2000w_handler_set_option_auto(int option);
 void kds_s2000w_handler_start_scan(void* handle);
 void kds_s2000w_handler_stop_scan(void* handle);
-metadata kds_s2000w_handler_get_parameters(void* handle);
+void kds_s2000w_handler_get_parameters(void* handle);
 #endif
\ No newline at end of file
index ab6ef0c2639735f46e9004aec7d99e13a53f368c..dd7ca97a322d92bdcd97a0046881f72767bc3c3d 100644 (file)
@@ -124,20 +124,20 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle,
 
        for (int i = 0; i < 10; i++) {
                sleep(1);
-               h->current_metadata = kds_s2000w_handler_get_parameters(handle);
-               if (h->current_metadata.valid)
+               kds_s2000w_handler_get_parameters(handle);
+               if (h->current_metadata->valid)
                        break;
        }
 
-       if (!h->current_metadata.valid)
+       if (!h->current_metadata->valid)
                return SANE_STATUS_UNSUPPORTED;
 
-       params->format = h->current_metadata.format;
-       params->last_frame = h->current_metadata.is_last;
-       params->bytes_per_line = h->current_metadata.bytes_per_line;
-       params->pixels_per_line = h->current_metadata.pixels_per_line;
-       params->lines = h->current_metadata.lines;
-       params->depth = h->current_metadata.depth;
+       params->format = h->current_metadata->format;
+       params->last_frame = h->current_metadata->is_last;
+       params->bytes_per_line = h->current_metadata->bytes_per_line;
+       params->pixels_per_line = h->current_metadata->pixels_per_line;
+       params->lines = h->current_metadata->lines;
+       params->depth = h->current_metadata->depth;
        h->read_info.read_size = 0;
        h->read_info.readed_bytes_per_line = 0;
        h->read_info.readed_lines = 0;
@@ -177,27 +177,27 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
                return SANE_STATUS_CANCELLED;
        }
 
-       int skip_header_bytes = _sane_kds_s2000w_net_find_first_data_byte(h->current_metadata.image);
+       int skip_header_bytes = _sane_kds_s2000w_net_find_first_data_byte(h->current_metadata->image);
        if (h->read_info.read_size <= 0)
                h->read_info.read_size += skip_header_bytes;
 
-       if (h->read_info.readed_lines >= h->current_metadata.lines) {
+       if (h->read_info.readed_lines >= h->current_metadata->lines) {
                *length = 0;
                h->read_info.readed_lines = 0;
                return SANE_STATUS_EOF;
        }
 
        int maxlen = max_length;
-       if (h->current_metadata.bytes_per_line - h->read_info.readed_bytes_per_line < max_length)
-               maxlen = h->current_metadata.bytes_per_line - h->read_info.readed_bytes_per_line;
+       if (h->current_metadata->bytes_per_line - h->read_info.readed_bytes_per_line < max_length)
+               maxlen = h->current_metadata->bytes_per_line - h->read_info.readed_bytes_per_line;
 
        *length = maxlen;
-       memcpy(data, h->current_metadata.image + h->read_info.read_size, *length);
+       memcpy(data, h->current_metadata->image + h->read_info.read_size, *length);
 
        h->read_info.readed_bytes_per_line += *length;
        h->read_info.read_size += *length;
 
-       if (h->read_info.readed_bytes_per_line >= h->current_metadata.bytes_per_line) {
+       if (h->read_info.readed_bytes_per_line >= h->current_metadata->bytes_per_line) {
                h->read_info.readed_bytes_per_line = 0;
                h->read_info.readed_lines++;
        }
index 1996e54a61a955b1b4de51c9fd4ff1ef53f6bb70..4481912f95c24a44d774622dc118ea530f892316 100644 (file)
@@ -6,7 +6,8 @@ START_TEST(kds_s2000w_net_get_parameters_invalid_metdata)
 {
        handler h;
        h.read_info.scan_started = 1;
-       mdata.valid = 0;
+       h.current_metadata = malloc(sizeof(metadata));
+       h.current_metadata->valid = 0;
        SANE_Parameters* params = malloc(sizeof(SANE_Parameters));
 
        SANE_Status status = _sane_kds_s2000w_net_get_parameters(&h, params);
@@ -15,5 +16,7 @@ START_TEST(kds_s2000w_net_get_parameters_invalid_metdata)
 
        free(params);
        params = NULL;
+       free(h.current_metadata);
+       h.current_metadata = NULL;
 }
 END_TEST
\ No newline at end of file
index 7f58d89806b8fd36445e5a01c4d740c7e71cacba..3fec21d35473e2282364c5eb9e5ac93e41359a64 100644 (file)
@@ -45,10 +45,11 @@ START_TEST(sane_kds_s2000w_net_read_all_lines_test)
                image[i] = 0x0a;
        }
        image[3] = 0xff;
-       h.current_metadata.format = 0;
-       h.current_metadata.image = image;
-       h.current_metadata.bytes_per_line = 10;
-       h.current_metadata.lines = 5;
+       h.current_metadata = malloc(sizeof(metadata));
+       h.current_metadata->format = 0;
+       h.current_metadata->image = image;
+       h.current_metadata->bytes_per_line = 10;
+       h.current_metadata->lines = 5;
 
        int length = 0;
 
@@ -65,8 +66,11 @@ START_TEST(sane_kds_s2000w_net_read_all_lines_test)
 
        free(dataptr);
        dataptr = NULL;
-       free(image);
        image = NULL;
+       free(h.current_metadata->image);
+       h.current_metadata->image = NULL;
+       free(h.current_metadata);
+       h.current_metadata = NULL;
 }
 END_TEST
 
@@ -77,15 +81,16 @@ START_TEST(sane_kds_s2000w_net_read_test)
        h.read_info.read_size = 0;
        h.read_info.readed_bytes_per_line = 0;
        h.read_info.readed_lines = 0;
-       h.current_metadata.format = 0;
-       h.current_metadata.lines = 1;
-       h.current_metadata.bytes_per_line = 65536;
+       h.current_metadata = malloc(sizeof(metadata));
+       h.current_metadata->format = 0;
+       h.current_metadata->lines = 1;
+       h.current_metadata->bytes_per_line = 65536;
        char* image = malloc(sizeof(char) * 65539);
        for (int i = 0; i < 3; i++) {
                image[i] = 0x0a;
        }
        image[3] = 0xff;
-       h.current_metadata.image = image;
+       h.current_metadata->image = image;
 
        SANE_Int maxlen = 65536;
        char* dataptr = malloc(sizeof(char) * maxlen);
@@ -101,8 +106,11 @@ START_TEST(sane_kds_s2000w_net_read_test)
        dataptr = NULL;
        free(length);
        length = NULL;
-       free(image);
        image = NULL;
+       free(h.current_metadata->image);
+       h.current_metadata->image = NULL;
+       free(h.current_metadata);
+       h.current_metadata = NULL;
 }
 END_TEST
 
@@ -114,15 +122,16 @@ START_TEST(sane_kds_s2000w_net_read_bytes_per_line_bigger_test)
        h.read_info.read_size = 0;
        h.read_info.readed_bytes_per_line = 0;
        h.read_info.readed_lines = 0;
-       h.current_metadata.format = 0;
-       h.current_metadata.lines = 1;
-       h.current_metadata.bytes_per_line = 95000;
+       h.current_metadata = malloc(sizeof(metadata));
+       h.current_metadata->format = 0;
+       h.current_metadata->lines = 1;
+       h.current_metadata->bytes_per_line = 95000;
        char* image = malloc(sizeof(char) * 95003);
        for (int i = 0; i < 3; i++) {
                image[i] = 0x0a;
        }
        image[3] = 0xff;
-       h.current_metadata.image = image;
+       h.current_metadata->image = image;
 
        SANE_Int maxlen = 65536;
        char* dataptr = malloc(sizeof(char) * maxlen);
@@ -137,7 +146,10 @@ START_TEST(sane_kds_s2000w_net_read_bytes_per_line_bigger_test)
        dataptr = NULL;
        free(length);
        length = NULL;
-       free(image);
        image = NULL;
+       free(h.current_metadata->image);
+       h.current_metadata->image = NULL;
+       free(h.current_metadata);
+       h.current_metadata = NULL;
 }
 END_TEST
\ No newline at end of file
index 448369ad75f175f2a5d8c07c517a309810599d9a..696c6cdf5951971f3ac37355db197971bd70a67d 100644 (file)
@@ -1,17 +1,12 @@
 #include <check.h>
 #include "../src/kds_s2000w_handler.h"
 
-metadata mdata;
-
 #define sleep no_sleep
-#define kds_s2000w_handler_get_parameters mock_get_params
+#define kds_s2000w_handler_get_parameters void_mock
 #define kds_s2000w_handler_stop_scan void_mock
 #define kds_s2000w_handler_close void_mock
 #define kds_s2000w_handler_open void_mock
 uint no_sleep(uint secondes) {}
-metadata mock_get_params() {
-       return mdata;
-}
 void void_mock() {}
 #include "../src/kds_s2000w_net.c"
 #undef kds_s2000w_handler_stop_scan