From aa654d77e227490b588e0880abf137dc4a49ab37 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 18 Feb 2024 21:04:24 +0100 Subject: [PATCH] change read info per ptr --- src/kds_s2000w_handler.c | 13 +++++--- src/kds_s2000w_handler.h | 2 +- src/kds_s2000w_net.c | 42 +++++++++++------------ tests/kds_s2000w_net_get_params_tests.c | 5 ++- tests/kds_s2000w_net_read_tests.c | 44 ++++++++++++++++--------- 5 files changed, 62 insertions(+), 44 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 3d7e7e8..39f35a1 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -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); diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 101b152..6f1798f 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -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); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 7ff98e3..6b52d94 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -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; diff --git a/tests/kds_s2000w_net_get_params_tests.c b/tests/kds_s2000w_net_get_params_tests.c index 4481912..715ae48 100644 --- a/tests/kds_s2000w_net_get_params_tests.c +++ b/tests/kds_s2000w_net_get_params_tests.c @@ -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 diff --git a/tests/kds_s2000w_net_read_tests.c b/tests/kds_s2000w_net_read_tests.c index 3fec21d..1324843 100644 --- a/tests/kds_s2000w_net_read_tests.c +++ b/tests/kds_s2000w_net_read_tests.c @@ -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 -- 2.39.5