]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change options descriptors array struct
authorBastian Dehn <hhaalo@arcor.de>
Sun, 22 Mar 2026 08:54:25 +0000 (09:54 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 22 Mar 2026 08:54:25 +0000 (09:54 +0100)
src/kds_s2000w_option_descriptors.c

index 2ee9fcf6d7031a0230ae5bae24c0d0f7d4397c88..a1a53f48bc07963dc23000389abb76757212c469 100644 (file)
@@ -7,8 +7,12 @@
 #define PROFILE_230802_V1_0_36_MAX_OPTION_COUNT 26
 #define PROFILE_MIN_MAX_OPTION_COUNT 12
 
-option_descriptor_t** kds_s2000w_descriptors = NULL;
-uint8_t kds_s2000w_max_option_count = 0;
+typedef struct {
+       option_descriptor_t** descriptors;
+       size_t size;
+} option_descriptors_t;
+
+option_descriptors_t* kds_s2000w_option_descriptors = NULL;
 
 option_descriptor_t* _kds_s2000w_option_descriptor_descriptor_init()
 {
@@ -58,8 +62,8 @@ void _kds_s2000w_option_descriptor_descriptor_free(option_descriptor_t* descript
 
 SANE_Status _kds_s2000w_option_descriptor_validate()
 {
-       for (int i = 0; i < kds_s2000w_max_option_count; i++) {
-               if (kds_s2000w_descriptors[i] == NULL) {
+       for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) {
+               if (kds_s2000w_option_descriptors->descriptors[i] == NULL) {
                        kds_s2000w_option_descriptors_free();
                        return SANE_STATUS_NO_MEM;
                }
@@ -1443,122 +1447,140 @@ option_descriptor_t* _kds_s2000w_option_descriptor_document_feeder_timeout_respo
  ******************************************************************************/
 SANE_Status _kds_s2000w_option_descriptors_init_min_profile()
 {
-       kds_s2000w_max_option_count = PROFILE_MIN_MAX_OPTION_COUNT;
+       kds_s2000w_option_descriptors = malloc(sizeof(option_descriptors_t));
+       if (kds_s2000w_option_descriptors == NULL)
+               return SANE_STATUS_NO_MEM;
 
-       kds_s2000w_descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_max_option_count);
-       if (kds_s2000w_descriptors == NULL)
+       kds_s2000w_option_descriptors->size = PROFILE_MIN_MAX_OPTION_COUNT;
+       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;
+       }
 
-       kds_s2000w_descriptors[0] = _kds_s2000w_option_descriptor_num_options();;
-       kds_s2000w_descriptors[1] = _kds_s2000w_option_descriptor_standard_group();
-       kds_s2000w_descriptors[2] = _kds_s2000w_option_descriptor_color_mode();
-       kds_s2000w_descriptors[3] = _kds_s2000w_option_descriptor_dpi();
-       kds_s2000w_descriptors[4] = _kds_s2000w_option_descriptor_scanside();
-       kds_s2000w_descriptors[5] = _kds_s2000w_option_descriptor_boldness_color_group();
-       kds_s2000w_descriptors[6] = _kds_s2000w_option_descriptor_color_drop();
-       kds_s2000w_descriptors[7] = _kds_s2000w_option_descriptor_config_reset();
-       kds_s2000w_descriptors[8] = _kds_s2000w_option_descriptor_image_processing_group();
-       kds_s2000w_descriptors[9] = _kds_s2000w_option_descriptor_skip_blank_pages();
-       kds_s2000w_descriptors[10] = _kds_s2000w_option_descriptor_feeder_group();
-       kds_s2000w_descriptors[11] = _kds_s2000w_option_descriptor_autostart();
+       kds_s2000w_option_descriptors->descriptors[0] = _kds_s2000w_option_descriptor_num_options();;
+       kds_s2000w_option_descriptors->descriptors[1] = _kds_s2000w_option_descriptor_standard_group();
+       kds_s2000w_option_descriptors->descriptors[2] = _kds_s2000w_option_descriptor_color_mode();
+       kds_s2000w_option_descriptors->descriptors[3] = _kds_s2000w_option_descriptor_dpi();
+       kds_s2000w_option_descriptors->descriptors[4] = _kds_s2000w_option_descriptor_scanside();
+       kds_s2000w_option_descriptors->descriptors[5] = _kds_s2000w_option_descriptor_boldness_color_group();
+       kds_s2000w_option_descriptors->descriptors[6] = _kds_s2000w_option_descriptor_color_drop();
+       kds_s2000w_option_descriptors->descriptors[7] = _kds_s2000w_option_descriptor_config_reset();
+       kds_s2000w_option_descriptors->descriptors[8] = _kds_s2000w_option_descriptor_image_processing_group();
+       kds_s2000w_option_descriptors->descriptors[9] = _kds_s2000w_option_descriptor_skip_blank_pages();
+       kds_s2000w_option_descriptors->descriptors[10] = _kds_s2000w_option_descriptor_feeder_group();
+       kds_s2000w_option_descriptors->descriptors[11] = _kds_s2000w_option_descriptor_autostart();
 
        return _kds_s2000w_option_descriptor_validate();
 }
 
 SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile()
 {
-       kds_s2000w_max_option_count = PROFILE_230802_V1_0_36_MAX_OPTION_COUNT;
+       kds_s2000w_option_descriptors = malloc(sizeof(option_descriptors_t));
+       if (kds_s2000w_option_descriptors == NULL)
+               return SANE_STATUS_NO_MEM;
 
-       kds_s2000w_descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_max_option_count);
-       if (kds_s2000w_descriptors == NULL)
+       kds_s2000w_option_descriptors->size = PROFILE_230802_V1_0_36_MAX_OPTION_COUNT;
+       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;
+       }
 
-       kds_s2000w_descriptors[0] = _kds_s2000w_option_descriptor_num_options();
-       kds_s2000w_descriptors[1] = _kds_s2000w_option_descriptor_standard_group();
-       kds_s2000w_descriptors[2] = _kds_s2000w_option_descriptor_scan_source();
-       kds_s2000w_descriptors[3] = _kds_s2000w_option_descriptor_color_mode();
-       kds_s2000w_descriptors[4] = _kds_s2000w_option_descriptor_dpi();
-       kds_s2000w_descriptors[5] = _kds_s2000w_option_descriptor_scanside();
-       kds_s2000w_descriptors[6] = _kds_s2000w_option_descriptor_boldness_smoothing_group();
-       kds_s2000w_descriptors[7] = _kds_s2000w_option_descriptor_foreground_boldness_mode();
-       kds_s2000w_descriptors[8] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness();
-       kds_s2000w_descriptors[9] = _kds_s2000w_option_descriptor_background_smoothing_mode();
-       kds_s2000w_descriptors[10] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness();
-       kds_s2000w_descriptors[11] = _kds_s2000w_option_descriptor_boldness_color_group();
-       kds_s2000w_descriptors[12] = _kds_s2000w_option_descriptor_color_drop();
-       kds_s2000w_descriptors[13] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness();
-       kds_s2000w_descriptors[14] = _kds_s2000w_option_descriptor_color_auto_brightness_mode();
-       kds_s2000w_descriptors[15] = _kds_s2000w_option_descriptor_color_balance_mode();
-       kds_s2000w_descriptors[16] = _kds_s2000w_option_descriptor_color_balance_agressiveness();
-       kds_s2000w_descriptors[17] = _kds_s2000w_option_descriptor_color_balance_red();
-       kds_s2000w_descriptors[18] = _kds_s2000w_option_descriptor_color_balance_green();
-       kds_s2000w_descriptors[19] = _kds_s2000w_option_descriptor_color_balance_blue();
-       kds_s2000w_descriptors[20] = _kds_s2000w_option_descriptor_binarization_contrast();
-       kds_s2000w_descriptors[21] = _kds_s2000w_option_descriptor_config_reset();
-       kds_s2000w_descriptors[22] = _kds_s2000w_option_descriptor_image_processing_group();
-       kds_s2000w_descriptors[23] = _kds_s2000w_option_descriptor_skip_blank_pages();
-       kds_s2000w_descriptors[24] = _kds_s2000w_option_descriptor_feeder_group();
-       kds_s2000w_descriptors[25] = _kds_s2000w_option_descriptor_autostart();
+       kds_s2000w_option_descriptors->descriptors[0] = _kds_s2000w_option_descriptor_num_options();
+       kds_s2000w_option_descriptors->descriptors[1] = _kds_s2000w_option_descriptor_standard_group();
+       kds_s2000w_option_descriptors->descriptors[2] = _kds_s2000w_option_descriptor_scan_source();
+       kds_s2000w_option_descriptors->descriptors[3] = _kds_s2000w_option_descriptor_color_mode();
+       kds_s2000w_option_descriptors->descriptors[4] = _kds_s2000w_option_descriptor_dpi();
+       kds_s2000w_option_descriptors->descriptors[5] = _kds_s2000w_option_descriptor_scanside();
+       kds_s2000w_option_descriptors->descriptors[6] = _kds_s2000w_option_descriptor_boldness_smoothing_group();
+       kds_s2000w_option_descriptors->descriptors[7] = _kds_s2000w_option_descriptor_foreground_boldness_mode();
+       kds_s2000w_option_descriptors->descriptors[8] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness();
+       kds_s2000w_option_descriptors->descriptors[9] = _kds_s2000w_option_descriptor_background_smoothing_mode();
+       kds_s2000w_option_descriptors->descriptors[10] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness();
+       kds_s2000w_option_descriptors->descriptors[11] = _kds_s2000w_option_descriptor_boldness_color_group();
+       kds_s2000w_option_descriptors->descriptors[12] = _kds_s2000w_option_descriptor_color_drop();
+       kds_s2000w_option_descriptors->descriptors[13] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness();
+       kds_s2000w_option_descriptors->descriptors[14] = _kds_s2000w_option_descriptor_color_auto_brightness_mode();
+       kds_s2000w_option_descriptors->descriptors[15] = _kds_s2000w_option_descriptor_color_balance_mode();
+       kds_s2000w_option_descriptors->descriptors[16] = _kds_s2000w_option_descriptor_color_balance_agressiveness();
+       kds_s2000w_option_descriptors->descriptors[17] = _kds_s2000w_option_descriptor_color_balance_red();
+       kds_s2000w_option_descriptors->descriptors[18] = _kds_s2000w_option_descriptor_color_balance_green();
+       kds_s2000w_option_descriptors->descriptors[19] = _kds_s2000w_option_descriptor_color_balance_blue();
+       kds_s2000w_option_descriptors->descriptors[20] = _kds_s2000w_option_descriptor_binarization_contrast();
+       kds_s2000w_option_descriptors->descriptors[21] = _kds_s2000w_option_descriptor_config_reset();
+       kds_s2000w_option_descriptors->descriptors[22] = _kds_s2000w_option_descriptor_image_processing_group();
+       kds_s2000w_option_descriptors->descriptors[23] = _kds_s2000w_option_descriptor_skip_blank_pages();
+       kds_s2000w_option_descriptors->descriptors[24] = _kds_s2000w_option_descriptor_feeder_group();
+       kds_s2000w_option_descriptors->descriptors[25] = _kds_s2000w_option_descriptor_autostart();
 
        return _kds_s2000w_option_descriptor_validate();
 }
 
 SANE_Status _kds_s2000w_option_descriptors_init_full_profile()
 {
-       kds_s2000w_max_option_count = PROFILE_FULL_MAX_OPTION_COUNT;
+       kds_s2000w_option_descriptors = malloc(sizeof(option_descriptors_t));
+       if (kds_s2000w_option_descriptors == NULL)
+               return SANE_STATUS_NO_MEM;
 
-       kds_s2000w_descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_max_option_count);
-       if (kds_s2000w_descriptors == NULL)
+       kds_s2000w_option_descriptors->size = PROFILE_FULL_MAX_OPTION_COUNT;
+       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;
+       }
 
-       kds_s2000w_descriptors[0] = _kds_s2000w_option_descriptor_num_options();
-       kds_s2000w_descriptors[1] = _kds_s2000w_option_descriptor_standard_group();
-       kds_s2000w_descriptors[2] = _kds_s2000w_option_descriptor_scan_source();
-       kds_s2000w_descriptors[3] = _kds_s2000w_option_descriptor_color_mode();
-       kds_s2000w_descriptors[4] = _kds_s2000w_option_descriptor_dpi();
-       kds_s2000w_descriptors[5] = _kds_s2000w_option_descriptor_scanside();
-       kds_s2000w_descriptors[6] = _kds_s2000w_option_descriptor_geometry_group();
-       kds_s2000w_descriptors[7] = _kds_s2000w_option_descriptor_cropping_mode();
-       kds_s2000w_descriptors[8] = _kds_s2000w_option_descriptor_cropping_image();
-       kds_s2000w_descriptors[9] = _kds_s2000w_option_descriptor_image_offset_x();
-       kds_s2000w_descriptors[10] = _kds_s2000w_option_descriptor_image_offset_y();
-       kds_s2000w_descriptors[11] = _kds_s2000w_option_descriptor_image_width();
-       kds_s2000w_descriptors[12] = _kds_s2000w_option_descriptor_image_height();
-       kds_s2000w_descriptors[13] = _kds_s2000w_option_descriptor_boldness_smoothing_group();
-       kds_s2000w_descriptors[14] = _kds_s2000w_option_descriptor_foreground_boldness_mode();
-       kds_s2000w_descriptors[15] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness();
-       kds_s2000w_descriptors[16] = _kds_s2000w_option_descriptor_background_smoothing_mode();
-       kds_s2000w_descriptors[17] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness();
-       kds_s2000w_descriptors[18] = _kds_s2000w_option_descriptor_boldness_color_group();
-       kds_s2000w_descriptors[19] = _kds_s2000w_option_descriptor_color_drop();
-       kds_s2000w_descriptors[20] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness();
-       kds_s2000w_descriptors[21] = _kds_s2000w_option_descriptor_color_auto_brightness_mode();
-       kds_s2000w_descriptors[22] = _kds_s2000w_option_descriptor_color_brightness();
-       kds_s2000w_descriptors[23] = _kds_s2000w_option_descriptor_color_contrast();
-       kds_s2000w_descriptors[24] = _kds_s2000w_option_descriptor_color_balance_mode();
-       kds_s2000w_descriptors[25] = _kds_s2000w_option_descriptor_color_balance_agressiveness();
-       kds_s2000w_descriptors[26] = _kds_s2000w_option_descriptor_color_balance_red();
-       kds_s2000w_descriptors[27] = _kds_s2000w_option_descriptor_color_balance_green();
-       kds_s2000w_descriptors[28] = _kds_s2000w_option_descriptor_color_balance_blue();
-       kds_s2000w_descriptors[29] = _kds_s2000w_option_descriptor_color_sharpen();
-       kds_s2000w_descriptors[30] = _kds_s2000w_option_descriptor_binarization_contrast();
-       kds_s2000w_descriptors[31] = _kds_s2000w_option_descriptor_config_reset();
-       kds_s2000w_descriptors[32] = _kds_s2000w_option_descriptor_image_processing_group();
-       kds_s2000w_descriptors[33] = _kds_s2000w_option_descriptor_skip_blank_pages();
-       kds_s2000w_descriptors[34] = _kds_s2000w_option_descriptor_skip_blank_page_content();
-       kds_s2000w_descriptors[35] = _kds_s2000w_option_descriptor_hole_fill();
-       kds_s2000w_descriptors[36] = _kds_s2000w_option_descriptor_post_scan_rotation();
-       kds_s2000w_descriptors[37] = _kds_s2000w_option_descriptor_edge_fill();
-       kds_s2000w_descriptors[38] = _kds_s2000w_option_descriptor_image_border();
-       kds_s2000w_descriptors[39] = _kds_s2000w_option_descriptor_jpeg_quality();
-       kds_s2000w_descriptors[40] = _kds_s2000w_option_descriptor_feeder_group();
-       kds_s2000w_descriptors[41] = _kds_s2000w_option_descriptor_autostart();
-       kds_s2000w_descriptors[42] = _kds_s2000w_option_descriptor_max_document_length();
-       kds_s2000w_descriptors[43] = _kds_s2000w_option_descriptor_transport_handling();
-       kds_s2000w_descriptors[44] = _kds_s2000w_option_descriptor_multifeed_sensitivity();
-       kds_s2000w_descriptors[45] = _kds_s2000w_option_descriptor_multifeed_response();
-       kds_s2000w_descriptors[46] = _kds_s2000w_option_descriptor_document_feeder_timeout();
-       kds_s2000w_descriptors[47] = _kds_s2000w_option_descriptor_document_feeder_timeout_response();
+       kds_s2000w_option_descriptors->descriptors[0] = _kds_s2000w_option_descriptor_num_options();
+       kds_s2000w_option_descriptors->descriptors[1] = _kds_s2000w_option_descriptor_standard_group();
+       kds_s2000w_option_descriptors->descriptors[2] = _kds_s2000w_option_descriptor_scan_source();
+       kds_s2000w_option_descriptors->descriptors[3] = _kds_s2000w_option_descriptor_color_mode();
+       kds_s2000w_option_descriptors->descriptors[4] = _kds_s2000w_option_descriptor_dpi();
+       kds_s2000w_option_descriptors->descriptors[5] = _kds_s2000w_option_descriptor_scanside();
+       kds_s2000w_option_descriptors->descriptors[6] = _kds_s2000w_option_descriptor_geometry_group();
+       kds_s2000w_option_descriptors->descriptors[7] = _kds_s2000w_option_descriptor_cropping_mode();
+       kds_s2000w_option_descriptors->descriptors[8] = _kds_s2000w_option_descriptor_cropping_image();
+       kds_s2000w_option_descriptors->descriptors[9] = _kds_s2000w_option_descriptor_image_offset_x();
+       kds_s2000w_option_descriptors->descriptors[10] = _kds_s2000w_option_descriptor_image_offset_y();
+       kds_s2000w_option_descriptors->descriptors[11] = _kds_s2000w_option_descriptor_image_width();
+       kds_s2000w_option_descriptors->descriptors[12] = _kds_s2000w_option_descriptor_image_height();
+       kds_s2000w_option_descriptors->descriptors[13] = _kds_s2000w_option_descriptor_boldness_smoothing_group();
+       kds_s2000w_option_descriptors->descriptors[14] = _kds_s2000w_option_descriptor_foreground_boldness_mode();
+       kds_s2000w_option_descriptors->descriptors[15] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness();
+       kds_s2000w_option_descriptors->descriptors[16] = _kds_s2000w_option_descriptor_background_smoothing_mode();
+       kds_s2000w_option_descriptors->descriptors[17] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness();
+       kds_s2000w_option_descriptors->descriptors[18] = _kds_s2000w_option_descriptor_boldness_color_group();
+       kds_s2000w_option_descriptors->descriptors[19] = _kds_s2000w_option_descriptor_color_drop();
+       kds_s2000w_option_descriptors->descriptors[20] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness();
+       kds_s2000w_option_descriptors->descriptors[21] = _kds_s2000w_option_descriptor_color_auto_brightness_mode();
+       kds_s2000w_option_descriptors->descriptors[22] = _kds_s2000w_option_descriptor_color_brightness();
+       kds_s2000w_option_descriptors->descriptors[23] = _kds_s2000w_option_descriptor_color_contrast();
+       kds_s2000w_option_descriptors->descriptors[24] = _kds_s2000w_option_descriptor_color_balance_mode();
+       kds_s2000w_option_descriptors->descriptors[25] = _kds_s2000w_option_descriptor_color_balance_agressiveness();
+       kds_s2000w_option_descriptors->descriptors[26] = _kds_s2000w_option_descriptor_color_balance_red();
+       kds_s2000w_option_descriptors->descriptors[27] = _kds_s2000w_option_descriptor_color_balance_green();
+       kds_s2000w_option_descriptors->descriptors[28] = _kds_s2000w_option_descriptor_color_balance_blue();
+       kds_s2000w_option_descriptors->descriptors[29] = _kds_s2000w_option_descriptor_color_sharpen();
+       kds_s2000w_option_descriptors->descriptors[30] = _kds_s2000w_option_descriptor_binarization_contrast();
+       kds_s2000w_option_descriptors->descriptors[31] = _kds_s2000w_option_descriptor_config_reset();
+       kds_s2000w_option_descriptors->descriptors[32] = _kds_s2000w_option_descriptor_image_processing_group();
+       kds_s2000w_option_descriptors->descriptors[33] = _kds_s2000w_option_descriptor_skip_blank_pages();
+       kds_s2000w_option_descriptors->descriptors[34] = _kds_s2000w_option_descriptor_skip_blank_page_content();
+       kds_s2000w_option_descriptors->descriptors[35] = _kds_s2000w_option_descriptor_hole_fill();
+       kds_s2000w_option_descriptors->descriptors[36] = _kds_s2000w_option_descriptor_post_scan_rotation();
+       kds_s2000w_option_descriptors->descriptors[37] = _kds_s2000w_option_descriptor_edge_fill();
+       kds_s2000w_option_descriptors->descriptors[38] = _kds_s2000w_option_descriptor_image_border();
+       kds_s2000w_option_descriptors->descriptors[39] = _kds_s2000w_option_descriptor_jpeg_quality();
+       kds_s2000w_option_descriptors->descriptors[40] = _kds_s2000w_option_descriptor_feeder_group();
+       kds_s2000w_option_descriptors->descriptors[41] = _kds_s2000w_option_descriptor_autostart();
+       kds_s2000w_option_descriptors->descriptors[42] = _kds_s2000w_option_descriptor_max_document_length();
+       kds_s2000w_option_descriptors->descriptors[43] = _kds_s2000w_option_descriptor_transport_handling();
+       kds_s2000w_option_descriptors->descriptors[44] = _kds_s2000w_option_descriptor_multifeed_sensitivity();
+       kds_s2000w_option_descriptors->descriptors[45] = _kds_s2000w_option_descriptor_multifeed_response();
+       kds_s2000w_option_descriptors->descriptors[46] = _kds_s2000w_option_descriptor_document_feeder_timeout();
+       kds_s2000w_option_descriptors->descriptors[47] = _kds_s2000w_option_descriptor_document_feeder_timeout_response();
 
        return _kds_s2000w_option_descriptor_validate();
 }
@@ -1585,44 +1607,46 @@ SANE_Status kds_s2000w_option_descriptors_init(profile_t profile)
 
 void kds_s2000w_option_descriptors_free()
 {
-       if (kds_s2000w_descriptors == NULL)
+       if (kds_s2000w_option_descriptors == NULL)
                return;
 
-       for (int i = 0; i < kds_s2000w_max_option_count; i++) {
-               _kds_s2000w_option_descriptor_descriptor_free(kds_s2000w_descriptors[i]);
-               kds_s2000w_descriptors[i] = NULL;
+       for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) {
+               _kds_s2000w_option_descriptor_descriptor_free(kds_s2000w_option_descriptors->descriptors[i]);
+               kds_s2000w_option_descriptors->descriptors[i] = NULL;
        }
 
-       free(kds_s2000w_descriptors);
-       kds_s2000w_descriptors = NULL;
+       free(kds_s2000w_option_descriptors->descriptors);
+       kds_s2000w_option_descriptors->descriptors = NULL;
+       free(kds_s2000w_option_descriptors);
+       kds_s2000w_option_descriptors = NULL;
 }
 
 uint8_t kds_s2000w_option_descriptors_get_max_option_count()
 {
-       return kds_s2000w_max_option_count;
+       return kds_s2000w_option_descriptors->size;
 }
 
 option_descriptor_t* kds_s2000w_option_descriptors_full_get_by_number(uint32_t number)
 {
-       if (number >= kds_s2000w_max_option_count)
+       if (number >= kds_s2000w_option_descriptors->size)
                return NULL;
 
-       return kds_s2000w_descriptors[number];
+       return kds_s2000w_option_descriptors->descriptors[number];
 }
 
 SANE_Option_Descriptor* kds_s2000w_option_descriptors_get_by_number(uint32_t number)
 {
-       if (number >= kds_s2000w_max_option_count)
+       if (number >= kds_s2000w_option_descriptors->size)
                return NULL;
 
-       return kds_s2000w_descriptors[number]->descriptor;
+       return kds_s2000w_option_descriptors->descriptors[number]->descriptor;
 }
 
 SANE_Option_Descriptor* kds_s2000w_option_descriptors_get_by_config_name(const char* name)
 {
-       for (int i = 0; i < kds_s2000w_max_option_count; i++) {
-               if (strcmp(kds_s2000w_descriptors[i]->config_name, name) == 0)
-                       return kds_s2000w_descriptors[i]->descriptor;
+       for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) {
+               if (strcmp(kds_s2000w_option_descriptors->descriptors[i]->config_name, name) == 0)
+                       return kds_s2000w_option_descriptors->descriptors[i]->descriptor;
        }
 
        return NULL;