From 8ebb3a8a5e99c9cb28cc6e309a071563aadb5e74 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 18 Feb 2024 16:40:20 +0100 Subject: [PATCH] move metadata from read info to handler --- src/kds_s2000w_handler.c | 20 +++++++++---------- src/kds_s2000w_handler.h | 2 +- src/kds_s2000w_net.c | 30 ++++++++++++++--------------- tests/kds_s2000w_net_read_tests.c | 32 +++++++++++++++---------------- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index ae4ea13..2511535 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -185,16 +185,16 @@ void kds_s2000w_handler_open(const char* devicename, void** handle) h->read_info.read_size = 0; h->read_info.readed_bytes_per_line = 0; h->read_info.readed_lines = 0; - h->read_info.current_metadata.format = 0; - h->read_info.current_metadata.is_last = 0; - h->read_info.current_metadata.size = 0; - h->read_info.current_metadata.bytes_per_line = 0; - h->read_info.current_metadata.pixels_per_line = 0; - h->read_info.current_metadata.lines = 0; - h->read_info.current_metadata.depth = 0; - h->read_info.current_metadata.valid = 0; - h->read_info.current_metadata.scanned_all_complete = 0; - h->read_info.current_metadata.image = NULL; + 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; init_gamma_table(); image.size = 0; diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index e29e214..ceaed78 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -38,13 +38,13 @@ typedef struct { int read_size; int readed_bytes_per_line; int readed_lines; - metadata current_metadata; } readinfo; typedef struct { long sessionid; int state; scan_status current_scan_status; + metadata current_metadata; readinfo read_info; } handler; diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 9955aa0..ab6ef0c 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -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->read_info.current_metadata = kds_s2000w_handler_get_parameters(handle); - if (h->read_info.current_metadata.valid) + h->current_metadata = kds_s2000w_handler_get_parameters(handle); + if (h->current_metadata.valid) break; } - if (!h->read_info.current_metadata.valid) + if (!h->current_metadata.valid) return SANE_STATUS_UNSUPPORTED; - params->format = h->read_info.current_metadata.format; - params->last_frame = h->read_info.current_metadata.is_last; - params->bytes_per_line = h->read_info.current_metadata.bytes_per_line; - params->pixels_per_line = h->read_info.current_metadata.pixels_per_line; - params->lines = h->read_info.current_metadata.lines; - params->depth = h->read_info.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->read_info.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->read_info.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->read_info.current_metadata.bytes_per_line - h->read_info.readed_bytes_per_line < max_length) - maxlen = h->read_info.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->read_info.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->read_info.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++; } diff --git a/tests/kds_s2000w_net_read_tests.c b/tests/kds_s2000w_net_read_tests.c index 1386f28..7f58d89 100644 --- a/tests/kds_s2000w_net_read_tests.c +++ b/tests/kds_s2000w_net_read_tests.c @@ -39,25 +39,25 @@ 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; char* image = malloc(sizeof(char) * 53); for (int i = 0; i < 3; i++) { image[i] = 0x0a; } image[3] = 0xff; - h.read_info.current_metadata.format = 0; - h.read_info.current_metadata.image = image; - h.read_info.current_metadata.bytes_per_line = 10; - h.read_info.current_metadata.lines = 5; + h.current_metadata.format = 0; + h.current_metadata.image = image; + h.current_metadata.bytes_per_line = 10; + h.current_metadata.lines = 5; - int* length = malloc(sizeof(int)); - *length = 0; + int length = 0; SANE_Int maxlen = 65536; char* dataptr = malloc(sizeof(char) * maxlen); SANE_Status status = 0; for (int i = 0; i < 6; i++) { - status = _sane_kds_s2000w_net_read(&h, dataptr, 65535, length); + status = _sane_kds_s2000w_net_read(&h, dataptr, 65535, &length); } ck_assert_int_eq(status, SANE_STATUS_EOF); @@ -65,8 +65,6 @@ START_TEST(sane_kds_s2000w_net_read_all_lines_test) free(dataptr); dataptr = NULL; - free(length); - length = NULL; free(image); image = NULL; } @@ -79,15 +77,15 @@ 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.read_info.current_metadata.format = 0; - h.read_info.current_metadata.lines = 1; - h.read_info.current_metadata.bytes_per_line = 65536; + 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.read_info.current_metadata.image = image; + h.current_metadata.image = image; SANE_Int maxlen = 65536; char* dataptr = malloc(sizeof(char) * maxlen); @@ -116,15 +114,15 @@ 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.read_info.current_metadata.format = 0; - h.read_info.current_metadata.lines = 1; - h.read_info.current_metadata.bytes_per_line = 95000; + 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.read_info.current_metadata.image = image; + h.current_metadata.image = image; SANE_Int maxlen = 65536; char* dataptr = malloc(sizeof(char) * maxlen); -- 2.39.5