From 216f142df1e8d265269fd0fc07a9917065137f3b Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 22 Mar 2026 11:39:16 +0100 Subject: [PATCH] change descriptor init method --- src/kds_s2000w_option_descriptors.c | 73 +++++++++++------------------ 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index db0d71f..7e5a3b7 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -1442,6 +1442,28 @@ option_descriptor_t* _kds_s2000w_option_descriptor_document_feeder_timeout_respo /******************************************************************************* * profiles ******************************************************************************/ +SANE_Status _kds_s2000w_option_descriptor_init_profile(descriptor_fn* fn, size_t size) +{ + kds_s2000w_option_descriptors = malloc(sizeof(option_descriptors_t)); + if (kds_s2000w_option_descriptors == NULL) + return SANE_STATUS_NO_MEM; + + kds_s2000w_option_descriptors->size = size; + kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); + if (kds_s2000w_option_descriptors->descriptors == NULL) { + free(kds_s2000w_option_descriptors); + kds_s2000w_option_descriptors = NULL; + return SANE_STATUS_NO_MEM; + } + + + for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) { + kds_s2000w_option_descriptors->descriptors[i] = fn[i](); + } + + return _kds_s2000w_option_descriptor_validate(); +} + SANE_Status _kds_s2000w_option_descriptors_init_min_profile() { descriptor_fn fn[] = { @@ -1459,20 +1481,8 @@ SANE_Status _kds_s2000w_option_descriptors_init_min_profile() _kds_s2000w_option_descriptor_autostart }; - kds_s2000w_option_descriptors->size = sizeof(fn) / sizeof(descriptor_fn);; - kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); - if (kds_s2000w_option_descriptors->descriptors == NULL) { - free(kds_s2000w_option_descriptors); - kds_s2000w_option_descriptors = NULL; - return SANE_STATUS_NO_MEM; - } - - - for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) { - kds_s2000w_option_descriptors->descriptors[i] = fn[i](); - } - - return _kds_s2000w_option_descriptor_validate(); + size_t size = sizeof(fn) / sizeof(descriptor_fn); + return _kds_s2000w_option_descriptor_init_profile(fn, size); } SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile() @@ -1506,20 +1516,8 @@ SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile() _kds_s2000w_option_descriptor_autostart }; - kds_s2000w_option_descriptors->size = sizeof(fn) / sizeof(descriptor_fn); - kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); - if (kds_s2000w_option_descriptors->descriptors == NULL) { - free(kds_s2000w_option_descriptors); - kds_s2000w_option_descriptors = NULL; - return SANE_STATUS_NO_MEM; - } - - for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) { - kds_s2000w_option_descriptors->descriptors[i] = fn[i](); - } - - - return _kds_s2000w_option_descriptor_validate(); + size_t size = sizeof(fn) / sizeof(descriptor_fn); + return _kds_s2000w_option_descriptor_init_profile(fn, size); } SANE_Status _kds_s2000w_option_descriptors_init_full_profile() @@ -1575,19 +1573,8 @@ SANE_Status _kds_s2000w_option_descriptors_init_full_profile() _kds_s2000w_option_descriptor_document_feeder_timeout_response }; - kds_s2000w_option_descriptors->size = sizeof(fn) / sizeof(descriptor_fn); - kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); - if (kds_s2000w_option_descriptors->descriptors == NULL) { - free(kds_s2000w_option_descriptors); - kds_s2000w_option_descriptors = NULL; - return SANE_STATUS_NO_MEM; - } - - for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) { - kds_s2000w_option_descriptors->descriptors[i] = fn[i](); - } - - return _kds_s2000w_option_descriptor_validate(); + size_t size = sizeof(fn) / sizeof(descriptor_fn); + return _kds_s2000w_option_descriptor_init_profile(fn, size); } /******************************************************************************* @@ -1595,10 +1582,6 @@ SANE_Status _kds_s2000w_option_descriptors_init_full_profile() ******************************************************************************/ SANE_Status kds_s2000w_option_descriptors_init(profile_t profile) { - kds_s2000w_option_descriptors = malloc(sizeof(option_descriptors_t)); - if (kds_s2000w_option_descriptors == NULL) - return SANE_STATUS_NO_MEM; - switch (profile) { case PROFILE_FULL: return _kds_s2000w_option_descriptors_init_full_profile(); -- 2.47.3