From 5000d4916b17acd919e562eac0b37b9dd30daef9 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Tue, 30 Apr 2024 21:02:46 +0200 Subject: [PATCH] add read black and white header --- src/kds_s2000w_net.c | 6 ++++- tests/kds_s2000w_net_read_tests.c | 35 +++++++++++++++++++++++++++ tests/kds_s2000w_net_read_tests.h | 1 + tests/kds_s2000w_net_read_tests_run.c | 1 + 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 8c1764e..fa95635 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -12,7 +12,11 @@ int _sane_kds_s2000w_net_find_first_data_byte(const char* data) { debug_printf(ALL, "sane_kds_s2000w_net_find_first_data_byte"); - const int header_spaces = 3; + int header_spaces = 3; + + if (strncmp(data, "P4", 2) == 0) + header_spaces = 2; + const char space = 0x0a; int space_count = 0; int byte_count = 0; diff --git a/tests/kds_s2000w_net_read_tests.c b/tests/kds_s2000w_net_read_tests.c index 43862d5..4463ed7 100644 --- a/tests/kds_s2000w_net_read_tests.c +++ b/tests/kds_s2000w_net_read_tests.c @@ -113,6 +113,41 @@ void sane_kds_s2000w_net_read_test() h = NULL; } +void sane_kds_s2000w_net_read_bw_test() +{ + handler* h = init_handler(); + h->pnm_image->size = 655541; + h->pnm_image->data = malloc(sizeof(char) * 65541); + char* imagedata = (char*) h->pnm_image->data; + imagedata[0] = 'P'; + imagedata[1] = '4'; + for (int i = 2; i < 4; i++) { + imagedata[i] = 0x0a; + } + for (int i = 4; i < 65541; i++) { + imagedata[i] = 0xff; + } + + SANE_Int maxlen = 65536; + char* dataptr = malloc(sizeof(char) * maxlen); + SANE_Int* length = malloc(sizeof(SANE_Int)); + + _sane_kds_s2000w_net_read(h, (void*) dataptr, maxlen, length); + + assert_int_equal(*length, 65536); + assert_memory_equal(dataptr, h->pnm_image->data + 5, 65536); + assert_int_equal(h->read_info->read_size, 65540); + + free(dataptr); + dataptr = NULL; + free(length); + length = NULL; + free(h->pnm_image->data); + h->pnm_image->data = NULL; + free_handler(h); + h = NULL; +} + void sane_kds_s2000w_net_read_bytes_per_line_bigger_test() { handler* h = init_handler(); diff --git a/tests/kds_s2000w_net_read_tests.h b/tests/kds_s2000w_net_read_tests.h index 107db57..8b375b4 100644 --- a/tests/kds_s2000w_net_read_tests.h +++ b/tests/kds_s2000w_net_read_tests.h @@ -10,6 +10,7 @@ void sane_kds_s2000w_net_read_cancel_test(); void sane_kds_s2000w_net_read_without_data(); void sane_kds_s2000w_net_read_empty_image(); void sane_kds_s2000w_net_read_test(); +void sane_kds_s2000w_net_read_bw_test(); void sane_kds_s2000w_net_read_bytes_per_line_bigger_test(); #endif \ No newline at end of file diff --git a/tests/kds_s2000w_net_read_tests_run.c b/tests/kds_s2000w_net_read_tests_run.c index 07cf066..4950a01 100644 --- a/tests/kds_s2000w_net_read_tests_run.c +++ b/tests/kds_s2000w_net_read_tests_run.c @@ -7,6 +7,7 @@ int main() cmocka_unit_test(sane_kds_s2000w_net_read_without_data), cmocka_unit_test(sane_kds_s2000w_net_read_empty_image), cmocka_unit_test(sane_kds_s2000w_net_read_test), + cmocka_unit_test(sane_kds_s2000w_net_read_bw_test), cmocka_unit_test(sane_kds_s2000w_net_read_bytes_per_line_bigger_test) }; -- 2.39.5