]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change read info per ptr
authorBastian Dehn <hhaalo@arcor.de>
Sun, 18 Feb 2024 20:04:24 +0000 (21:04 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 18 Feb 2024 20:04:24 +0000 (21:04 +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

index 3d7e7e87ef301c0750799573839197e86badd028..39f35a108c1b659d2d5d4e741c71fcea7a708eae 100644 (file)
@@ -182,11 +182,12 @@ void kds_s2000w_handler_open(const char* devicename, void** handle)
        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;
-       h->read_info.readed_bytes_per_line = 0;
-       h->read_info.readed_lines = 0;
+       h->read_info = malloc(sizeof(readinfo));
+       h->read_info->scan_started = 0;
+       h->read_info->cancel = 0;
+       h->read_info->read_size = 0;
+       h->read_info->readed_bytes_per_line = 0;
+       h->read_info->readed_lines = 0;
 
        init_gamma_table();
        image.size = 0;
@@ -260,6 +261,8 @@ void kds_s2000w_handler_close(void* handle)
        h->current_scan_status = NULL;
        free(h->current_metadata->image);
        h->current_metadata->image = NULL;
+       free(h->read_info);
+       h->read_info = NULL;
        free(h->current_metadata);
        h->current_metadata = NULL;
        free(h);
index 101b152177a1f9b606663eb47117626d71829916..6f1798f70917d090036a68adda1bef4adf94c8b9 100644 (file)
@@ -44,7 +44,7 @@ typedef struct {
        int state;
        scan_status* current_scan_status;
        metadata* current_metadata;
-       readinfo read_info;
+       readinfo* read_info;
 } handler;
 
 void kds_s2000w_handler_open(const char* devicename, void** handle);
index 7ff98e30c24d7333f210d91440159538e3e0cda8..6b52d94504eac005d323fce4103932cc0d59ec30 100644 (file)
@@ -110,7 +110,7 @@ void _sane_kds_s2000w_net_cancel(SANE_Handle handle)
 {
        debug_printf(ALL, "sane_kds_s2000w_net_cancel");
        handler* h = (handler*) handle;
-       h->read_info.cancel = 1;
+       h->read_info->cancel = 1;
        return;
 }
 
@@ -119,7 +119,7 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle,
 {
        debug_printf(ALL, "sane_kds_s2000w_net_get_parameters");
        handler* h = (handler*) handle;
-       if (!h->read_info.scan_started)
+       if (!h->read_info->scan_started)
                return SANE_STATUS_INVAL;
 
        for (int i = 0; i < 10; i++) {
@@ -141,9 +141,9 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle,
        params->pixels_per_line = mdata.pixels_per_line;
        params->lines = mdata.lines;
        params->depth = mdata.depth;
-       h->read_info.read_size = 0;
-       h->read_info.readed_bytes_per_line = 0;
-       h->read_info.readed_lines = 0;
+       h->read_info->read_size = 0;
+       h->read_info->readed_bytes_per_line = 0;
+       h->read_info->readed_lines = 0;
 
        debug_printf_int(DEBUG, "format", params->format);
        debug_printf_int(DEBUG, "last frame", params->last_frame);
@@ -159,8 +159,8 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle)
 {
        debug_printf(ALL, "sane_kds_s2000w_net_start");
        handler* h = (handler*) handle;
-       h->read_info.cancel = 0;
-       h->read_info.scan_started = 1;
+       h->read_info->cancel = 0;
+       h->read_info->scan_started = 1;
        kds_s2000w_handler_start_scan(handle);
        return SANE_STATUS_GOOD;
 }
@@ -170,8 +170,8 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
 {
        debug_printf(ALL, "sane_kds_s2000w_net_read");
        handler* h = (handler*) handle;
-       if (h->read_info.cancel) {
-               h->read_info.scan_started = 0;
+       if (h->read_info->cancel) {
+               h->read_info->scan_started = 0;
                *length = 0;
                kds_s2000w_handler_stop_scan(handle);
                sleep(1);
@@ -182,28 +182,28 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
        }
 
        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->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;
+               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;
+       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) {
-               h->read_info.readed_bytes_per_line = 0;
-               h->read_info.readed_lines++;
+       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++;
        }
 
        return SANE_STATUS_GOOD;
index 4481912f95c24a44d774622dc118ea530f892316..715ae4870150e8a26cb8cea5970a5b2610e35ef5 100644 (file)
@@ -5,7 +5,8 @@
 START_TEST(kds_s2000w_net_get_parameters_invalid_metdata)
 {
        handler h;
-       h.read_info.scan_started = 1;
+       h.read_info = malloc(sizeof(readinfo));
+       h.read_info->scan_started = 1;
        h.current_metadata = malloc(sizeof(metadata));
        h.current_metadata->valid = 0;
        SANE_Parameters* params = malloc(sizeof(SANE_Parameters));
@@ -18,5 +19,7 @@ START_TEST(kds_s2000w_net_get_parameters_invalid_metdata)
        params = NULL;
        free(h.current_metadata);
        h.current_metadata = NULL;
+       free(h.read_info);
+       h.read_info = NULL;
 }
 END_TEST
\ No newline at end of file
index 3fec21d35473e2282364c5eb9e5ac93e41359a64..13248431e66219fb9224574d8816c7096f35f830 100644 (file)
@@ -20,8 +20,9 @@ END_TEST
 START_TEST(sane_kds_s2000w_net_read_cancel_test)
 {
        handler h;
-       h.read_info.scan_started = 1;
-       h.read_info.cancel = 1;
+       h.read_info = malloc(sizeof(readinfo));
+       h.read_info->scan_started = 1;
+       h.read_info->cancel = 1;
        int* length = malloc(sizeof(int));
        *length = 0;
 
@@ -31,15 +32,18 @@ START_TEST(sane_kds_s2000w_net_read_cancel_test)
 
        free(length);
        length = NULL;
+       free(h.read_info);
+       h.read_info = NULL;
 }
 END_TEST
 
 START_TEST(sane_kds_s2000w_net_read_all_lines_test)
 {
        handler h;
-       h.read_info.cancel = 0;
-       h.read_info.read_size = 0;
-       h.read_info.readed_lines = 0;
+       h.read_info = malloc(sizeof(readinfo));
+       h.read_info->cancel = 0;
+       h.read_info->read_size = 0;
+       h.read_info->readed_lines = 0;
        char* image = malloc(sizeof(char) * 53);
        for (int i = 0; i < 3; i++) {
                image[i] = 0x0a;
@@ -62,7 +66,7 @@ START_TEST(sane_kds_s2000w_net_read_all_lines_test)
        }
 
        ck_assert_int_eq(status, SANE_STATUS_EOF);
-       ck_assert_int_eq(h.read_info.read_size, 53);
+       ck_assert_int_eq(h.read_info->read_size, 53);
 
        free(dataptr);
        dataptr = NULL;
@@ -71,16 +75,19 @@ START_TEST(sane_kds_s2000w_net_read_all_lines_test)
        h.current_metadata->image = NULL;
        free(h.current_metadata);
        h.current_metadata = NULL;
+       free(h.read_info);
+       h.read_info = NULL;
 }
 END_TEST
 
 START_TEST(sane_kds_s2000w_net_read_test)
 {
        handler h;
-       h.read_info.cancel = 0;
-       h.read_info.read_size = 0;
-       h.read_info.readed_bytes_per_line = 0;
-       h.read_info.readed_lines = 0;
+       h.read_info = malloc(sizeof(readinfo));
+       h.read_info->cancel = 0;
+       h.read_info->read_size = 0;
+       h.read_info->readed_bytes_per_line = 0;
+       h.read_info->readed_lines = 0;
        h.current_metadata = malloc(sizeof(metadata));
        h.current_metadata->format = 0;
        h.current_metadata->lines = 1;
@@ -100,7 +107,7 @@ START_TEST(sane_kds_s2000w_net_read_test)
 
        ck_assert_int_eq(*length, 65536);
        ck_assert_mem_eq(dataptr, image + 3, 65536);
-       ck_assert_int_eq(h.read_info.read_size, 65539);
+       ck_assert_int_eq(h.read_info->read_size, 65539);
 
        free(dataptr);
        dataptr = NULL;
@@ -111,6 +118,8 @@ START_TEST(sane_kds_s2000w_net_read_test)
        h.current_metadata->image = NULL;
        free(h.current_metadata);
        h.current_metadata = NULL;
+       free(h.read_info);
+       h.read_info = NULL;
 }
 END_TEST
 
@@ -118,10 +127,11 @@ END_TEST
 START_TEST(sane_kds_s2000w_net_read_bytes_per_line_bigger_test)
 {
        handler h;
-       h.read_info.cancel = 0;
-       h.read_info.read_size = 0;
-       h.read_info.readed_bytes_per_line = 0;
-       h.read_info.readed_lines = 0;
+       h.read_info = malloc(sizeof(readinfo));
+       h.read_info->cancel = 0;
+       h.read_info->read_size = 0;
+       h.read_info->readed_bytes_per_line = 0;
+       h.read_info->readed_lines = 0;
        h.current_metadata = malloc(sizeof(metadata));
        h.current_metadata->format = 0;
        h.current_metadata->lines = 1;
@@ -140,7 +150,7 @@ START_TEST(sane_kds_s2000w_net_read_bytes_per_line_bigger_test)
        _sane_kds_s2000w_net_read(&h, dataptr, maxlen, length);
        _sane_kds_s2000w_net_read(&h, dataptr, maxlen, length);
 
-       ck_assert_int_eq(h.read_info.read_size, 95003);
+       ck_assert_int_eq(h.read_info->read_size, 95003);
 
        free(dataptr);
        dataptr = NULL;
@@ -151,5 +161,7 @@ START_TEST(sane_kds_s2000w_net_read_bytes_per_line_bigger_test)
        h.current_metadata->image = NULL;
        free(h.current_metadata);
        h.current_metadata = NULL;
+       free(h.read_info);
+       h.read_info = NULL;
 }
 END_TEST
\ No newline at end of file