]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
init only init available options
authorBastian Dehn <hhaalo@arcor.de>
Thu, 26 Mar 2026 16:50:17 +0000 (17:50 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Thu, 26 Mar 2026 16:50:17 +0000 (17:50 +0100)
src/kds_s2000w_option_descriptors.c
src/kds_s2000w_option_descriptors.h
tests/kds_s2000w_option_descriptor_tests.c

index dac032eb00ef4f72c0a6180da24ab1a970f3aef2..01c6b12ae611e22ceeebbe537f4bf39fe9a1cb8a 100644 (file)
@@ -96,6 +96,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_num_options(const mask_option
  ******************************************************************************/
 option_descriptor_t* _kds_s2000w_option_descriptor_standard_group(const mask_option_t* mask)
 {
+       if (mask->standard_group == 0)
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -115,6 +118,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_standard_group(const mask_opt
 
 option_descriptor_t* _kds_s2000w_option_descriptor_scan_source(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->standard_group, BIT_SCAN_SOURCE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -146,6 +152,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_scan_source(const mask_option
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_mode(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->standard_group, BIT_COLOR_MODE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -177,6 +186,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_mode(const mask_option_
 
 option_descriptor_t* _kds_s2000w_option_descriptor_dpi(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->standard_group, BIT_DPI))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -210,6 +222,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_dpi(const mask_option_t* mask
 
 option_descriptor_t* _kds_s2000w_option_descriptor_scanside(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->standard_group, BIT_SCAN_SIDE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -243,6 +258,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_scanside(const mask_option_t*
  ******************************************************************************/
 option_descriptor_t* _kds_s2000w_option_descriptor_geometry_group(const mask_option_t* mask)
 {
+       if (GEOMETRY_GROUP == 0)
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -262,6 +280,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_geometry_group(const mask_opt
 
 option_descriptor_t* _kds_s2000w_option_descriptor_cropping_mode(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->geometry_group, BIT_CROPPING_MODE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -294,6 +315,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_cropping_mode(const mask_opti
 
 option_descriptor_t* _kds_s2000w_option_descriptor_cropping_image(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->geometry_group, BIT_CROPPING_IMAGE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -324,6 +348,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_cropping_image(const mask_opt
 
 option_descriptor_t* _kds_s2000w_option_descriptor_image_offset_x(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->geometry_group, BIT_IMAGE_OFFSET_X))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -354,6 +381,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_image_offset_x(const mask_opt
 
 option_descriptor_t* _kds_s2000w_option_descriptor_image_offset_y(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->geometry_group, BIT_IMAGE_OFFSET_Y))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -384,6 +414,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_image_offset_y(const mask_opt
 
 option_descriptor_t* _kds_s2000w_option_descriptor_image_width(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->geometry_group, BIT_IMAGE_WIDTH))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -414,6 +447,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_image_width(const mask_option
 
 option_descriptor_t* _kds_s2000w_option_descriptor_image_height(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->geometry_group, BIT_IMAGE_HEIGHT))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -447,6 +483,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_image_height(const mask_optio
  ******************************************************************************/
 option_descriptor_t* _kds_s2000w_option_descriptor_boldness_smoothing_group(const mask_option_t* mask)
 {
+       if (mask->boldness_smoothing_group == 0)
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -466,6 +505,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_boldness_smoothing_group(cons
 
 option_descriptor_t* _kds_s2000w_option_descriptor_foreground_boldness_mode(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_smoothing_group, BIT_FOREGROUND_BOLDNESS_MODE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -497,6 +539,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_foreground_boldness_mode(cons
 
 option_descriptor_t* _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_smoothing_group, BIT_FOREGROUND_BOLDNESS_AGGRESSIVENESS))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -527,6 +572,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_foreground_boldness_aggressiv
 
 option_descriptor_t* _kds_s2000w_option_descriptor_background_smoothing_mode(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_smoothing_group, BIT_BACKGROUND_SMOOTHING_MODE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -558,6 +606,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_background_smoothing_mode(con
 
 option_descriptor_t* _kds_s2000w_option_descriptor_background_smoothing_aggressiveness(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_smoothing_group, BIT_BACKGROUND_SMOOTHING_AGGRESSIVENESS))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -591,6 +642,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_background_smoothing_aggressi
  ******************************************************************************/
 option_descriptor_t* _kds_s2000w_option_descriptor_boldness_color_group(const mask_option_t* mask)
 {
+       if (mask->boldness_color_group == 0)
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -610,6 +664,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_boldness_color_group(const ma
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_drop(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_DROP_OUT))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -646,6 +703,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_drop(const mask_option_
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_drop_out_aggressiveness(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_DROP_OUT_AGGRESSIVENESS))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -676,6 +736,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_drop_out_aggressiveness
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_auto_brightness_mode(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_AUTO_BRIGHTNESS_MODE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -707,6 +770,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_auto_brightness_mode(co
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_brightness(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_BRIGHTNESS))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -737,6 +803,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_brightness(const mask_o
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_contrast(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_CONTRAST))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -767,6 +836,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_contrast(const mask_opt
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_mode(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_BALANCE_MODE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -799,6 +871,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_mode(const mask
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_agressiveness(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_BALANCE_AGGRESSIVENESS))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -829,6 +904,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_agressiveness(c
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_red(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_BALANCE_RED))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -859,6 +937,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_red(const mask_
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_green(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_BALANCE_GREEN))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -889,6 +970,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_green(const mas
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_blue(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_BALANCE_BLUE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -919,6 +1003,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_balance_blue(const mask
 
 option_descriptor_t* _kds_s2000w_option_descriptor_color_sharpen(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_COLOR_SHARPEN))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -951,6 +1038,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_color_sharpen(const mask_opti
 
 option_descriptor_t* _kds_s2000w_option_descriptor_binarization_contrast(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_BINARIZATION_CONTRAST))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -981,6 +1071,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_binarization_contrast(const m
 
 option_descriptor_t* _kds_s2000w_option_descriptor_config_reset(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->boldness_color_group, BIT_RESET))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1003,6 +1096,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_config_reset(const mask_optio
  ******************************************************************************/
 option_descriptor_t* _kds_s2000w_option_descriptor_image_processing_group(const mask_option_t* mask)
 {
+       if (mask->image_processing_group == 0)
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1022,6 +1118,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_image_processing_group(const
 
 option_descriptor_t* _kds_s2000w_option_descriptor_skip_blank_pages(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->image_processing_group, BIT_SKIP_BLANK_PAGES))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1041,6 +1140,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_skip_blank_pages(const mask_o
 
 option_descriptor_t* _kds_s2000w_option_descriptor_skip_blank_page_content(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->image_processing_group, BIT_SKIP_BLANK_PAGES_CONTENT))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1071,6 +1173,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_skip_blank_page_content(const
 
 option_descriptor_t* _kds_s2000w_option_descriptor_hole_fill(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->image_processing_group, BIT_HOLE_FILL))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1090,6 +1195,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_hole_fill(const mask_option_t
 
 option_descriptor_t* _kds_s2000w_option_descriptor_post_scan_rotation(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->image_processing_group, BIT_POST_SCAN_ROTATION))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1123,6 +1231,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_post_scan_rotation(const mask
 
 option_descriptor_t* _kds_s2000w_option_descriptor_edge_fill(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->image_processing_group, BIT_EDGE_FILL))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1154,6 +1265,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_edge_fill(const mask_option_t
 
 option_descriptor_t* _kds_s2000w_option_descriptor_image_border(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->image_processing_group, BIT_IMAGE_BORDER))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1185,6 +1299,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_image_border(const mask_optio
 
 option_descriptor_t* _kds_s2000w_option_descriptor_jpeg_quality(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->image_processing_group, BIT_JPEG_QUALITY))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1221,6 +1338,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_jpeg_quality(const mask_optio
  ******************************************************************************/
 option_descriptor_t* _kds_s2000w_option_descriptor_feeder_group(const mask_option_t* mask)
 {
+       if (mask->feeder_group == 0)
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1240,6 +1360,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_feeder_group(const mask_optio
 
 option_descriptor_t* _kds_s2000w_option_descriptor_autostart(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->feeder_group, BIT_AUTOSTART))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1259,6 +1382,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_autostart(const mask_option_t
 
 option_descriptor_t* _kds_s2000w_option_descriptor_max_document_length(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->feeder_group, BIT_MAX_DOCUMENT_LENGTH))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1289,6 +1415,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_max_document_length(const mas
 
 option_descriptor_t* _kds_s2000w_option_descriptor_transport_handling(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->feeder_group, BIT_TRANSPORT_HANDLING))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1321,6 +1450,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_transport_handling(const mask
 
 option_descriptor_t* _kds_s2000w_option_descriptor_multifeed_sensitivity(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->feeder_group, BIT_MULTIFEED_SENSITIVITY))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1353,6 +1485,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_multifeed_sensitivity(const m
 
 option_descriptor_t *_kds_s2000w_option_descriptor_multifeed_response(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->feeder_group, BIT_MULTIFEED_RESPONSE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1383,6 +1518,9 @@ option_descriptor_t *_kds_s2000w_option_descriptor_multifeed_response(const mask
 
 option_descriptor_t* _kds_s2000w_option_descriptor_document_feeder_timeout(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->feeder_group, BIT_DOCUMENT_FEEDER_TIMEOUT))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1413,6 +1551,9 @@ option_descriptor_t* _kds_s2000w_option_descriptor_document_feeder_timeout(const
 
 option_descriptor_t* _kds_s2000w_option_descriptor_document_feeder_timeout_response(const mask_option_t* mask)
 {
+       if (!EXISTS_OPTION(mask->feeder_group, BIT_DOCUMENT_FEEDER_TIMEOUT_RESPONSE))
+               return NULL;
+
        option_descriptor_t* descriptor = _kds_s2000w_option_descriptor_descriptor_init();
        if (descriptor == NULL)
                return NULL;
@@ -1501,9 +1642,19 @@ SANE_Status _kds_s2000w_option_descriptor_init_profile(descriptor_fn* fn, size_t
                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](mask);
+               kds_s2000w_option_descriptors->descriptors[i] = NULL;
+       }
+
+       option_descriptor_t* option = NULL;
+       size_t option_count = 0;
+       for (size_t i = 0; i < MAX_AVAILABLE_OPTIONS; i++) {
+               option = fn[i](mask);
+               if (option != NULL)
+                       kds_s2000w_option_descriptors->descriptors[option_count++] = option;
+
+               if (option_count >= kds_s2000w_option_descriptors->size)
+                       break;
        }
 
        return _kds_s2000w_option_descriptor_validate();
index ab65f7ade5e559cda281a3d69d0413b8731251da..8eb75c143a59a0e2536fb0f5cd6db5c18ca198a7 100644 (file)
@@ -7,7 +7,7 @@
  * option bitmasks
  ******************************************************************************/
 
-#define EXISTS_OPTION(group, option_bit) group >> option_bit & 1
+#define EXISTS_OPTION(group, option_bit) (group >> option_bit & 1)
 
 #define BIT_SCAN_SOURCE 0
 #define BIT_COLOR_MODE 1
index fc473bc2c5ad3a6206843b7625a666f6ebb5803a..01bd15f6356da557680aacf153e869d0472c6f5b 100644 (file)
@@ -909,6 +909,31 @@ void kds_s2000w_option_init_descriptor_no_mem_test()
        }
 }
 
+void kds_s2000w_option_get_min_profile_from_mask()
+{
+       kds_s2000w_option_descriptors_free();
+       mask_option_t* mask = malloc(sizeof(mask_option_t));
+       if (mask == NULL)
+               return;
+       memset(mask, 0, sizeof(mask_option_t));
+       mask->standard_group = 1 << BIT_DPI;
+       kds_s2000w_option_descriptors_init(mask);
+       free(mask);
+       mask = NULL;
+
+       option_descriptor_t* option_count = kds_s2000w_option_descriptors_full_get_by_number(0);
+       option_descriptor_t* std_group = kds_s2000w_option_descriptors_full_get_by_number(1);
+       option_descriptor_t* dpi = kds_s2000w_option_descriptors_full_get_by_number(2);
+       option_descriptor_t* unkown = kds_s2000w_option_descriptors_full_get_by_number(3);
+
+       assert_string_equal(option_count->config_name, OPTION_COUNT);
+       assert_string_equal(std_group->config_name, STANDARD_GROUP);
+       assert_string_equal(dpi->config_name, DPI);
+       assert_null(unkown);
+
+       kds_s2000w_option_descriptors_free();
+}
+
 int main()
 {
        const struct CMUnitTest option_descriptor_tests[] = {
@@ -965,7 +990,8 @@ int main()
                cmocka_unit_test(kds_s2000w_option_full_get_descriptor_by_number),
                cmocka_unit_test(kds_s2000w_option_full_get_descriptor_over_max_options_test),
                cmocka_unit_test(kds_s2000w_option_get_unknown_descriptor_test),
-               cmocka_unit_test(kds_s2000w_option_init_descriptor_no_mem_test)
+               cmocka_unit_test(kds_s2000w_option_init_descriptor_no_mem_test),
+               cmocka_unit_test(kds_s2000w_option_get_min_profile_from_mask)
        };
 
        return cmocka_run_group_tests(option_descriptor_tests, setup, teardown);