From: Bastian Dehn Date: Sun, 18 Feb 2024 18:34:01 +0000 (+0100) Subject: change metdata with pointer X-Git-Tag: v1.0.0^2~234 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=53f981db7bb166b5231a2fca2ce05fa2add03252;p=sane-kds-s2000w-net.git change metdata with pointer --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index b6b51c6..3d7e7e8 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -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 diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 14edb3d..101b152 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -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 diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index ab6ef0c..dd7ca97 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->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++; } diff --git a/tests/kds_s2000w_net_get_params_tests.c b/tests/kds_s2000w_net_get_params_tests.c index 1996e54..4481912 100644 --- a/tests/kds_s2000w_net_get_params_tests.c +++ b/tests/kds_s2000w_net_get_params_tests.c @@ -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 diff --git a/tests/kds_s2000w_net_read_tests.c b/tests/kds_s2000w_net_read_tests.c index 7f58d89..3fec21d 100644 --- a/tests/kds_s2000w_net_read_tests.c +++ b/tests/kds_s2000w_net_read_tests.c @@ -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 diff --git a/tests/runtests.c b/tests/runtests.c index 448369a..696c6cd 100644 --- a/tests/runtests.c +++ b/tests/runtests.c @@ -1,17 +1,12 @@ #include #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