From 00b33c227e3e378e27da69e09fc246147bf4d151 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 10 Mar 2024 14:21:13 +0100 Subject: [PATCH] change init descriptory array on stack --- src/kds_s2000w_option_descriptors.c | 551 ++++++++++++++-------------- 1 file changed, 271 insertions(+), 280 deletions(-) diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 7221057..db3097b 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -3,7 +3,7 @@ #include "kds_s2000w_option_descriptors.h" #include "kds_s2000w_debug.h" -SANE_Option_Descriptor** descriptor_array = NULL; +SANE_Option_Descriptor descriptor_array[MAX_OPTION_COUNT]; SANE_Word constraint_dpi[] = {2, 200, 300}; SANE_Word constraint_depth[] = {2, 1, 8}; @@ -26,147 +26,147 @@ SANE_String_Const* constraint_binarization_mode = NULL; SANE_String_Const* constraint_max_document_length = NULL; SANE_String_Const* constraint_scan_source = NULL; -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_standard_group() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_standard_group() { debug_printf(ALL, "kds_s2000w_option_descriptor_standard_group"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = SANE_NAME_STANDARD; - descriptor->title = SANE_TITLE_STANDARD; - descriptor->desc = SANE_DESC_STANDARD; - descriptor->unit = SANE_UNIT_NONE; - descriptor->cap = SANE_CAP_SOFT_DETECT; - descriptor->constraint_type = SANE_CONSTRAINT_NONE; - descriptor->type = SANE_TYPE_GROUP; - descriptor->size = 0; + descriptor.name = SANE_NAME_STANDARD; + descriptor.title = SANE_TITLE_STANDARD; + descriptor.desc = SANE_DESC_STANDARD; + descriptor.unit = SANE_UNIT_NONE; + descriptor.cap = SANE_CAP_SOFT_DETECT; + descriptor.constraint_type = SANE_CONSTRAINT_NONE; + descriptor.type = SANE_TYPE_GROUP; + descriptor.size = 0; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_geometry_group() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_geometry_group() { debug_printf(ALL, "kds_s2000w_option_descriptor_scan_area_group"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = SANE_NAME_GEOMETRY; - descriptor->title = SANE_TITLE_GEOMETRY; - descriptor->desc = SANE_DESC_GEOMETRY; - descriptor->unit = SANE_UNIT_NONE; - descriptor->cap = SANE_CAP_SOFT_DETECT; - descriptor->constraint_type = SANE_CONSTRAINT_NONE; - descriptor->type = SANE_TYPE_GROUP; - descriptor->size = 0; + descriptor.name = SANE_NAME_GEOMETRY; + descriptor.title = SANE_TITLE_GEOMETRY; + descriptor.desc = SANE_DESC_GEOMETRY; + descriptor.unit = SANE_UNIT_NONE; + descriptor.cap = SANE_CAP_SOFT_DETECT; + descriptor.constraint_type = SANE_CONSTRAINT_NONE; + descriptor.type = SANE_TYPE_GROUP; + descriptor.size = 0; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_num_options() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_num_options() { debug_printf(ALL, "kds_s2000w_option_descriptor_num_options"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = SANE_NAME_NUM_OPTIONS; - descriptor->title = SANE_TITLE_NUM_OPTIONS; - descriptor->desc = SANE_DESC_NUM_OPTIONS; - descriptor->unit = SANE_UNIT_NONE; - descriptor->cap = SANE_CAP_SOFT_DETECT; - descriptor->constraint_type = SANE_CONSTRAINT_NONE; - descriptor->type = SANE_TYPE_INT; - descriptor->size = sizeof(SANE_Int); + descriptor.name = SANE_NAME_NUM_OPTIONS; + descriptor.title = SANE_TITLE_NUM_OPTIONS; + descriptor.desc = SANE_DESC_NUM_OPTIONS; + descriptor.unit = SANE_UNIT_NONE; + descriptor.cap = SANE_CAP_SOFT_DETECT; + descriptor.constraint_type = SANE_CONSTRAINT_NONE; + descriptor.type = SANE_TYPE_INT; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_dpi() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_dpi() { debug_printf(ALL, "kds_s2000w_option_descriptor_dpi"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = SANE_NAME_SCAN_RESOLUTION; - descriptor->title = SANE_TITLE_SCAN_RESOLUTION; - descriptor->desc = SANE_DESC_SCAN_RESOLUTION; - descriptor->unit = SANE_UNIT_DPI; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_WORD_LIST; - descriptor->constraint.word_list = constraint_dpi; - descriptor->type = SANE_TYPE_INT; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = SANE_NAME_SCAN_RESOLUTION; + descriptor.title = SANE_TITLE_SCAN_RESOLUTION; + descriptor.desc = SANE_DESC_SCAN_RESOLUTION; + descriptor.unit = SANE_UNIT_DPI; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_WORD_LIST; + descriptor.constraint.word_list = constraint_dpi; + descriptor.type = SANE_TYPE_INT; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_scanside() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_scanside() { debug_printf(ALL, "kds_s2000w_option_descriptor_scanside"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "scanside"; - descriptor->title = "Duplex Mode"; - descriptor->desc = "Duplex Mode"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = "scanside"; + descriptor.title = "Duplex Mode"; + descriptor.desc = "Duplex Mode"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_scanside = malloc(sizeof(char*) * 3); constraint_scanside[0] = "Simplex"; constraint_scanside[1] = "Duplex"; constraint_scanside[2] = NULL; - descriptor->constraint.string_list = constraint_scanside; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_scanside; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_mode() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_mode() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_mode"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = SANE_NAME_SCAN_MODE; - descriptor->title = SANE_TITLE_SCAN_MODE; - descriptor->desc = SANE_DESC_SCAN_MODE; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = SANE_NAME_SCAN_MODE; + descriptor.title = SANE_TITLE_SCAN_MODE; + descriptor.desc = SANE_DESC_SCAN_MODE; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_colormode = malloc(sizeof(char*) * 4); constraint_colormode[0] = "Color"; constraint_colormode[1] = "Gray"; constraint_colormode[2] = "BW"; constraint_colormode[3] = NULL; - descriptor->constraint.string_list = constraint_colormode; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_colormode; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_skip_blank_pages() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_skip_blank_pages() { debug_printf(ALL, "kds_s2000w_option_descriptor_skip_blank_pages"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "skip-blank-pages"; - descriptor->title = "Blank Image Deletion Mode"; - descriptor->desc = "Blank Image Deletion Mode"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_NONE; - descriptor->type = SANE_TYPE_BOOL; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Bool); + descriptor.name = "skip-blank-pages"; + descriptor.title = "Blank Image Deletion Mode"; + descriptor.desc = "Blank Image Deletion Mode"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_NONE; + descriptor.type = SANE_TYPE_BOOL; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Bool); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_drop() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_drop() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_drop"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "colordrop"; - descriptor->title = "colordrop"; - descriptor->desc = "colordrop"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = "colordrop"; + descriptor.title = "colordrop"; + descriptor.desc = "colordrop"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_colordrop = malloc(sizeof(char*) * 9); constraint_colordrop[0] = "None"; constraint_colordrop[1] = "Red"; @@ -177,325 +177,325 @@ SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_drop() constraint_colordrop[6] = "Predominant"; constraint_colordrop[7] = "Multiple"; constraint_colordrop[8] = NULL; - descriptor->constraint.string_list = constraint_colordrop; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_colordrop; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_drop_out_aggressiveness() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_drop_out_aggressiveness() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_drop_out_aggressiveness"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = "colordropoutaggressiveness"; - descriptor->title = "colordropoutaggressiveness"; - descriptor->desc = "colordropoutaggressiveness"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_color_drop_out_aggressiveness_range; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = "colordropoutaggressiveness"; + descriptor.title = "colordropoutaggressiveness"; + descriptor.desc = "colordropoutaggressiveness"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_color_drop_out_aggressiveness_range; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_auto_brightness_mode() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_auto_brightness_mode() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_auto_brightness_mode"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "colorautobrightnessmode"; - descriptor->title = "colorautobrightnessmode"; - descriptor->desc = "colorautobrightnessmode"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = "colorautobrightnessmode"; + descriptor.title = "colorautobrightnessmode"; + descriptor.desc = "colorautobrightnessmode"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_color_auto_brightnessmode = malloc(sizeof(char*) * 3); constraint_color_auto_brightnessmode[0] = "None"; constraint_color_auto_brightnessmode[1] = "Automatic"; constraint_color_auto_brightnessmode[2] = NULL; - descriptor->constraint.string_list = constraint_color_auto_brightnessmode; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_color_auto_brightnessmode; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_mode() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_mode() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_mode"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "colorbalancemode"; - descriptor->title = "colorbalancemode"; - descriptor->desc = "colorbalancemode"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = "colorbalancemode"; + descriptor.title = "colorbalancemode"; + descriptor.desc = "colorbalancemode"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_color_balance_mode = malloc(sizeof(char*) * 5); constraint_color_balance_mode[0] = "None"; constraint_color_balance_mode[1] = "Manual"; constraint_color_balance_mode[2] = "Automatic"; constraint_color_balance_mode[3] = "AutomaticAdvanced"; constraint_color_balance_mode[4] = NULL; - descriptor->constraint.string_list = constraint_color_balance_mode; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_color_balance_mode; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balancea_agressiveness() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balancea_agressiveness() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_balancea_agressiveness"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = "colorbalanceaggressiveness"; - descriptor->title = "colorbalanceaggressiveness"; - descriptor->desc = "colorbalanceaggressiveness"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_color_balance_aggressiveness; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = "colorbalanceaggressiveness"; + descriptor.title = "colorbalanceaggressiveness"; + descriptor.desc = "colorbalanceaggressiveness"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_color_balance_aggressiveness; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_red() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_red() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_red"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = "colorbalancered"; - descriptor->title = "colorbalancered"; - descriptor->desc = "colorbalancered"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_color_balance_red; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = "colorbalancered"; + descriptor.title = "colorbalancered"; + descriptor.desc = "colorbalancered"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_color_balance_red; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_green() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_green() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_green"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = "colorbalancegreen"; - descriptor->title = "colorbalancegreen"; - descriptor->desc = "colorbalancegreen"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_color_balance_green; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = "colorbalancegreen"; + descriptor.title = "colorbalancegreen"; + descriptor.desc = "colorbalancegreen"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_color_balance_green; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_blue() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_blue() { debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_blue"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = "color-balance-blue"; - descriptor->title = "colorbalanceblue"; - descriptor->desc = "colorbalanceblue"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_color_balance_blue; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = "color-balance-blue"; + descriptor.title = "colorbalanceblue"; + descriptor.desc = "colorbalanceblue"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_color_balance_blue; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_foreground_boldness_mode() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_foreground_boldness_mode() { debug_printf(ALL, "kds_s2000w_option_descriptor_foreground_boldness_mode"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "foreground-boldness-mode"; - descriptor->title = "Foreground Boldness Mode"; - descriptor->desc = "Foreground Boldness Mode"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = "foreground-boldness-mode"; + descriptor.title = "Foreground Boldness Mode"; + descriptor.desc = "Foreground Boldness Mode"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_foreground_boldness_mode = malloc(sizeof(char*) * 4); constraint_foreground_boldness_mode[0] = "None"; constraint_foreground_boldness_mode[1] = "AutomaticAdvanced"; constraint_foreground_boldness_mode[2] = "Automatic"; constraint_foreground_boldness_mode[3] = NULL; - descriptor->constraint.string_list = constraint_foreground_boldness_mode; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_foreground_boldness_mode; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness() { debug_printf(ALL, "kds_s2000w_option_descriptor_foreground_boldness_aggressiveness"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = "foreground-boldness-aggressiveness"; - descriptor->title = "Foreground Boldness Mode"; - descriptor->desc = "Foreground Boldness Mode"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_foreground_boldness_aggressiveness; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = "foreground-boldness-aggressiveness"; + descriptor.title = "Foreground Boldness Mode"; + descriptor.desc = "Foreground Boldness Mode"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_foreground_boldness_aggressiveness; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_background_smoothing_mode() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_background_smoothing_mode() { debug_printf(ALL, "kds_s2000w_option_descriptor_background_smoothing_mode"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "background-smoothing-mode"; - descriptor->title = "Background Smoothing Mode"; - descriptor->desc = "Background Smoothing Mode"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = "background-smoothing-mode"; + descriptor.title = "Background Smoothing Mode"; + descriptor.desc = "Background Smoothing Mode"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_background_smoothing_mode = malloc(sizeof(char*) * 4); constraint_background_smoothing_mode[0] = "None"; constraint_background_smoothing_mode[1] = "AutomaticAdvanced"; constraint_background_smoothing_mode[2] = "Automatic"; constraint_background_smoothing_mode[3] = NULL; - descriptor->constraint.string_list = constraint_background_smoothing_mode; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_background_smoothing_mode; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_background_smoothing_aggressiveness() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_background_smoothing_aggressiveness() { debug_printf(ALL, "kds_s2000w_option_descriptor_background_smoothing_aggressiveness"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = "background-smoothing-aggressiveness"; - descriptor->title = "Background Smoothing Aggressivenes"; - descriptor->desc = "Background Smoothing Aggressivenes"; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_background_smoothing_aggressivness; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = "background-smoothing-aggressiveness"; + descriptor.title = "Background Smoothing Aggressivenes"; + descriptor.desc = "Background Smoothing Aggressivenes"; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_background_smoothing_aggressivness; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_binarization_contrast() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_binarization_contrast() { debug_printf(ALL, "kds_s2000w_option_descriptor_binarization_contrast"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = SANE_NAME_CONTRAST; - descriptor->title = SANE_TITLE_CONTRAST; - descriptor->desc = SANE_DESC_CONTRAST; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_RANGE; - descriptor->constraint.range = &constraint_binarization_contrast; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = SANE_NAME_CONTRAST; + descriptor.title = SANE_TITLE_CONTRAST; + descriptor.desc = SANE_DESC_CONTRAST; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_RANGE; + descriptor.constraint.range = &constraint_binarization_contrast; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_max_document_length() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_max_document_length() { debug_printf(ALL, "kds_s2000w_option_descriptor_max_document_length"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "maxdocumentlength"; - descriptor->title = "maxdocumentlength"; - descriptor->desc = "maxdocumentlength"; - descriptor->cap = SANE_CAP_SOFT_DETECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = "maxdocumentlength"; + descriptor.title = "maxdocumentlength"; + descriptor.desc = "maxdocumentlength"; + descriptor.cap = SANE_CAP_SOFT_DETECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_max_document_length = malloc(sizeof(char*) * 2); constraint_max_document_length[0] = "#NoPrimaryControl#"; constraint_max_document_length[1] = NULL; - descriptor->constraint.string_list = constraint_max_document_length; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + descriptor.constraint.string_list = constraint_max_document_length; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_scan_source() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_scan_source() { debug_printf(ALL, "kds_s2000w_option_descriptor_scan_source"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = SANE_NAME_SCAN_SOURCE; - descriptor->title = SANE_TITLE_SCAN_SOURCE; - descriptor->desc = SANE_DESC_SCAN_SOURCE; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + descriptor.name = SANE_NAME_SCAN_SOURCE; + descriptor.title = SANE_TITLE_SCAN_SOURCE; + descriptor.desc = SANE_DESC_SCAN_SOURCE; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST; constraint_scan_source = malloc(sizeof(char*) * 4); constraint_scan_source[0] = "DocumentFeeder"; constraint_scan_source[1] = "Automatic"; constraint_scan_source[2] = "Flatbed"; constraint_scan_source[3] = NULL; - descriptor->constraint.string_list = constraint_scan_source; - descriptor->type = SANE_TYPE_STRING; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_String) * 50; + descriptor.constraint.string_list = constraint_scan_source; + descriptor.type = SANE_TYPE_STRING; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_String) * 50; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_config_reset() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_config_reset() { debug_printf(ALL, "kds_s2000w_option_descriptor_config_reset"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + SANE_Option_Descriptor descriptor; - descriptor->name = "config-reset"; - descriptor->title = "Konfiguration zuruecksetzen"; - descriptor->desc = "Laedt die default Konfiguration des Scanners"; - descriptor->cap = SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_NONE; - descriptor->type = SANE_TYPE_BUTTON; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = 0; + descriptor.name = "config-reset"; + descriptor.title = "Konfiguration zuruecksetzen"; + descriptor.desc = "Laedt die default Konfiguration des Scanners"; + descriptor.cap = SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_NONE; + descriptor.type = SANE_TYPE_BUTTON; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = 0; return descriptor; } -SANE_Option_Descriptor* _kds_s2000w_option_descriptor_depth() +SANE_Option_Descriptor _kds_s2000w_option_descriptor_depth() { debug_printf(ALL, "kds_s2000w_option_descriptor_depth"); - SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - - descriptor->name = SANE_NAME_BIT_DEPTH; - descriptor->title = SANE_TITLE_BIT_DEPTH; - descriptor->desc = SANE_DESC_BIT_DEPTH; - descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; - descriptor->constraint_type = SANE_CONSTRAINT_WORD_LIST; - descriptor->constraint.word_list = constraint_depth; - descriptor->type = SANE_TYPE_INT; - descriptor->unit = SANE_UNIT_NONE; - descriptor->size = sizeof(SANE_Int); + SANE_Option_Descriptor descriptor; + + descriptor.name = SANE_NAME_BIT_DEPTH; + descriptor.title = SANE_TITLE_BIT_DEPTH; + descriptor.desc = SANE_DESC_BIT_DEPTH; + descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; + descriptor.constraint_type = SANE_CONSTRAINT_WORD_LIST; + descriptor.constraint.word_list = constraint_depth; + descriptor.type = SANE_TYPE_INT; + descriptor.unit = SANE_UNIT_NONE; + descriptor.size = sizeof(SANE_Int); return descriptor; } @@ -503,7 +503,6 @@ SANE_Option_Descriptor* _kds_s2000w_option_descriptor_depth() void kds_s2000w_option_descriptor_init_option_descriptors() { debug_printf(ALL, "kds_s2000w_option_descriptor_init_option_descriptors"); - descriptor_array = malloc(sizeof(SANE_Option_Descriptor*) * MAX_OPTION_COUNT); descriptor_array[0] = _kds_s2000w_option_descriptor_num_options(); descriptor_array[1] = _kds_s2000w_option_descriptor_standard_group(); @@ -554,18 +553,10 @@ void kds_s2000w_option_descriptor_free_option_descriptors() constraint_max_document_length = NULL; free(constraint_scan_source); constraint_scan_source = NULL; - - for (int i = 0; i < MAX_OPTION_COUNT; i++) { - free(descriptor_array[i]); - descriptor_array[i] = NULL; - } - - free(descriptor_array); - descriptor_array = NULL; } SANE_Option_Descriptor* kds_s2000w_option_get_descriptor(int option) { debug_printf(ALL, "kds_s2000w_option_get_descriptor"); - return descriptor_array[option]; + return &descriptor_array[option]; } \ No newline at end of file -- 2.39.5