From ccf112857c5d2d7f9b8cfe2e17271d73642510d7 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 25 Mar 2026 17:07:18 +0100 Subject: [PATCH] change option mask to pointer --- src/kds_s2000w_handler.h | 2 +- src/kds_s2000w_handler_opts.c | 31 ++++++++++++++----------------- src/kds_s2000w_handler_opts.h | 2 +- src/kds_s2000w_net.c | 8 ++++++-- tests/kds_s2000w_net_tests.c | 19 +++++++++++-------- 5 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index aaf8193..fa59460 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -72,7 +72,7 @@ connection_state_t kds_s2000w_handler_open(void** handle); void kds_s2000w_handler_close(handler_t* h); void kds_s2000w_handler_recreate_session(handler_t* h); -mask_option_groups_t kds_s2000w_handler_get_available_options(); +mask_option_groups_t* kds_s2000w_handler_get_available_options(); int32_t kds_s2000w_handler_opts_get_option(handler_t* handle, uint32_t option, void* value, int32_t* info); int32_t kds_s2000w_handler_opts_set_option(handler_t* handle, uint32_t option, void* value, int32_t* info); diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index c47fd04..c7095c3 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -558,23 +558,20 @@ void _kds_s2000w_handler_opts_set_depends_opts(const handler_t* h, } } -mask_option_groups_t kds_s2000w_handler_get_available_options() +mask_option_groups_t* kds_s2000w_handler_get_available_options() { + mask_option_groups_t* available_options = malloc(sizeof(mask_option_groups_t)); + if (available_options == NULL) + return NULL; + + memset(available_options, 0, sizeof(mask_option_groups_t)); + response_t* resp = kds_s2000w_client_response_init(); kds_s2000w_client_get_capabilities(resp); json_object* capabilities = json_tokener_parse(resp->data); json_object* defaults = json_object_object_get(capabilities, "Defaults"); - mask_option_groups_t available_options = { - .standard_group = 0, - .geometry_group = 0, - .boldness_smoothing_group = 0, - .boldness_color_group = 0, - .image_processing_group = 0, - .feeder_group = 0 - }; - const char* standard_group[] = { SCAN_SOURCE, COLOR_MODE, @@ -582,7 +579,7 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() SCAN_SIDE }; size_t len = sizeof(standard_group) / sizeof(const char*); - available_options.standard_group = _kds_s2000w_handler_get_group_available_options(defaults, standard_group, len); + available_options->standard_group = _kds_s2000w_handler_get_group_available_options(defaults, standard_group, len); const char* geometry_group[] = { CROPPING_MODE, @@ -593,7 +590,7 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() IMAGE_HEIGHT }; len = sizeof(geometry_group) / sizeof(const char*); - available_options.geometry_group = _kds_s2000w_handler_get_group_available_options(defaults, geometry_group, len); + available_options->geometry_group = _kds_s2000w_handler_get_group_available_options(defaults, geometry_group, len); const char* boldness_smoothing_group[] = { FOREGROUND_BOLDNESS_MODE, @@ -602,7 +599,7 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() BACKGROUND_SMOOTHING_AGGRESSIVENESS }; len = sizeof(boldness_smoothing_group) / sizeof(const char*); - available_options.boldness_smoothing_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_smoothing_group, len); + available_options->boldness_smoothing_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_smoothing_group, len); const char* boldness_color_group[] = { COLOR_DROP_OUT, @@ -620,8 +617,8 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() RESET, }; len = sizeof(boldness_color_group) / sizeof(const char*); - available_options.boldness_color_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_color_group, len); - available_options.boldness_color_group |= 1 << 12; + available_options->boldness_color_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_color_group, len); + available_options->boldness_color_group |= 1 << 12; const char* image_processing_group[] = { SKIP_BLANK_PAGES, @@ -633,7 +630,7 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() JPEG_QUALITY }; len = sizeof(image_processing_group) / sizeof(const char*); - available_options.image_processing_group = _kds_s2000w_handler_get_group_available_options(defaults, image_processing_group, len); + available_options->image_processing_group = _kds_s2000w_handler_get_group_available_options(defaults, image_processing_group, len); const char* feeder_group[] = { AUTOSTART, @@ -645,7 +642,7 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() DOCUMENT_FEEDER_TIMEOUT_RESPONSE }; len = sizeof(feeder_group) / sizeof(const char*), - available_options.feeder_group = _kds_s2000w_handler_get_group_available_options(defaults, feeder_group, len); + available_options->feeder_group = _kds_s2000w_handler_get_group_available_options(defaults, feeder_group, len); json_object_put(capabilities); capabilities = NULL; diff --git a/src/kds_s2000w_handler_opts.h b/src/kds_s2000w_handler_opts.h index 1254519..e50fd44 100644 --- a/src/kds_s2000w_handler_opts.h +++ b/src/kds_s2000w_handler_opts.h @@ -3,7 +3,7 @@ #include #include "kds_s2000w_handler.h" -mask_option_groups_t kds_s2000w_handler_get_available_options(); +mask_option_groups_t* kds_s2000w_handler_get_available_options(); int32_t kds_s2000w_handler_opts_get_option(handler_t* h, uint32_t option, void* value, int32_t* info); int32_t kds_s2000w_handler_opts_set_option(handler_t* h, uint32_t option, void* value, int32_t* info); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 55545c1..4aff009 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -98,8 +98,12 @@ SANE_Status sane_kds_s2000w_net_open(SANE_String_Const devicename, return SANE_STATUS_DEVICE_BUSY; } - mask_option_groups_t option_mask = kds_s2000w_handler_get_available_options(); - return kds_s2000w_option_descriptors_init(h->profile); + mask_option_groups_t* option_mask = kds_s2000w_handler_get_available_options(); + SANE_Status status = kds_s2000w_option_descriptors_init(h->profile); + + free(option_mask); + option_mask = NULL; + return status; } void sane_kds_s2000w_net_close(SANE_Handle handle) diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index a13d055..3b2d2d4 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -948,14 +948,17 @@ void kds_s2000w_handler_available_options_test(void** state) will_return(__wrap_kds_s2000w_client_get_capabilities, 0); expect_function_call(__wrap_kds_s2000w_client_get_capabilities); - mask_option_groups_t option_mask = kds_s2000w_handler_get_available_options(); - - assert_int_equal(option_mask.standard_group, 0xf); - assert_int_equal(option_mask.geometry_group, 0x3f); - assert_int_equal(option_mask.boldness_smoothing_group, 0xf); - assert_int_equal(option_mask.boldness_color_group, 0x1fff); - assert_int_equal(option_mask.image_processing_group, 0x7f); - assert_int_equal(option_mask.feeder_group, 0x7f); + mask_option_groups_t* option_mask = kds_s2000w_handler_get_available_options(); + + assert_int_equal(option_mask->standard_group, 0xf); + assert_int_equal(option_mask->geometry_group, 0x3f); + assert_int_equal(option_mask->boldness_smoothing_group, 0xf); + assert_int_equal(option_mask->boldness_color_group, 0x1fff); + assert_int_equal(option_mask->image_processing_group, 0x7f); + assert_int_equal(option_mask->feeder_group, 0x7f); + + free(option_mask); + option_mask = NULL; } int main() -- 2.47.3