From: Bastian Dehn Date: Sat, 27 Jan 2024 14:14:41 +0000 (+0100) Subject: allocate all option descriptor space X-Git-Tag: v1.0.0^2~435 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=1ebbbca22fa3c969956f785bd9317f9a85a4ca3e;p=sane-kds-s2000w-net.git allocate all option descriptor space --- diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index cc17776..0be1f5e 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -4,8 +4,10 @@ #include #include "kds_s2000w_handler.h" +#define MAX_OPTION_COUNT 23 + typedef struct { - SANE_Option_Descriptor** option_descriptors; + SANE_Option_Descriptor* option_descriptors; int length; } option_descriptors; @@ -15,17 +17,12 @@ option_descriptors option_descriptor_array; void _init_option_descriptor_array() { - option_descriptor_array.option_descriptors = malloc(sizeof(SANE_Option_Descriptor**)); - option_descriptor_array.option_descriptors[0] = NULL; - option_descriptor_array.length = 0; + option_descriptor_array.option_descriptors = malloc(sizeof(SANE_Option_Descriptor) * MAX_OPTION_COUNT); + option_descriptor_array.length = MAX_OPTION_COUNT; } void _free_option_descriptor_array() { - for (int i = 0; i < option_descriptor_array.length; i++) { - free(option_descriptor_array.option_descriptors[i]); - option_descriptor_array.option_descriptors[i] = NULL; - } free(option_descriptor_array.option_descriptors); option_descriptor_array.option_descriptors = NULL; } @@ -93,266 +90,192 @@ void _sane_kds_s2000w_net_close(SANE_Handle handle) const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( SANE_Handle handle, SANE_Int option) { - if (option_descriptor_array.length < (option + 1)) { - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.length++; - } - switch (option) { case 0: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = ""; - option_descriptor_array.option_descriptors[option]->title = "option number count"; - option_descriptor_array.option_descriptors[option]->desc = "available number of options"; - option_descriptor_array.option_descriptors[option]->unit = SANE_UNIT_NONE; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = ""; + option_descriptor_array.option_descriptors[option].title = "option number count"; + option_descriptor_array.option_descriptors[option].desc = "available number of options"; + option_descriptor_array.option_descriptors[option].unit = SANE_UNIT_NONE; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 1: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "resolution"; - option_descriptor_array.option_descriptors[option]->title = "resolution"; - option_descriptor_array.option_descriptors[option]->desc = "resolution"; - option_descriptor_array.option_descriptors[option]->unit = SANE_UNIT_DPI; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "resolution"; + option_descriptor_array.option_descriptors[option].title = "resolution"; + option_descriptor_array.option_descriptors[option].desc = "resolution"; + option_descriptor_array.option_descriptors[option].unit = SANE_UNIT_DPI; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 2: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "scanside"; - option_descriptor_array.option_descriptors[option]->title = "scanside"; - option_descriptor_array.option_descriptors[option]->desc = "scanside"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "scanside"; + option_descriptor_array.option_descriptors[option].title = "scanside"; + option_descriptor_array.option_descriptors[option].desc = "scanside"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 3: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colormode"; - option_descriptor_array.option_descriptors[option]->title = "colormode"; - option_descriptor_array.option_descriptors[option]->desc = "colormode"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colormode"; + option_descriptor_array.option_descriptors[option].title = "colormode"; + option_descriptor_array.option_descriptors[option].desc = "colormode"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 4: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "skipblankpages"; - option_descriptor_array.option_descriptors[option]->title = "skipblankpages"; - option_descriptor_array.option_descriptors[option]->desc = "skipblankpages"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "skipblankpages"; + option_descriptor_array.option_descriptors[option].title = "skipblankpages"; + option_descriptor_array.option_descriptors[option].desc = "skipblankpages"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 5: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "autostart"; - option_descriptor_array.option_descriptors[option]->title = "autostart"; - option_descriptor_array.option_descriptors[option]->desc = "autostart"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "autostart"; + option_descriptor_array.option_descriptors[option].title = "autostart"; + option_descriptor_array.option_descriptors[option].desc = "autostart"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 6: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colordrop"; - option_descriptor_array.option_descriptors[option]->title = "colordrop"; - option_descriptor_array.option_descriptors[option]->desc = "colordrop"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colordrop"; + option_descriptor_array.option_descriptors[option].title = "colordrop"; + option_descriptor_array.option_descriptors[option].desc = "colordrop"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 7: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colordropoutaggressiveness"; - option_descriptor_array.option_descriptors[option]->title = "colordropoutaggressiveness"; - option_descriptor_array.option_descriptors[option]->desc = "colordropoutaggressiveness"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colordropoutaggressiveness"; + option_descriptor_array.option_descriptors[option].title = "colordropoutaggressiveness"; + option_descriptor_array.option_descriptors[option].desc = "colordropoutaggressiveness"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 8: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "outputtype"; - option_descriptor_array.option_descriptors[option]->title = "outputtype"; - option_descriptor_array.option_descriptors[option]->desc = "outputtype"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "outputtype"; + option_descriptor_array.option_descriptors[option].title = "outputtype"; + option_descriptor_array.option_descriptors[option].desc = "outputtype"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 9: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colorautobrightnessmode"; - option_descriptor_array.option_descriptors[option]->title = "colorautobrightnessmode"; - option_descriptor_array.option_descriptors[option]->desc = "colorautobrightnessmode"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colorautobrightnessmode"; + option_descriptor_array.option_descriptors[option].title = "colorautobrightnessmode"; + option_descriptor_array.option_descriptors[option].desc = "colorautobrightnessmode"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 10: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colorbalancemode"; - option_descriptor_array.option_descriptors[option]->title = "colorbalancemode"; - option_descriptor_array.option_descriptors[option]->desc = "colorbalancemode"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colorbalancemode"; + option_descriptor_array.option_descriptors[option].title = "colorbalancemode"; + option_descriptor_array.option_descriptors[option].desc = "colorbalancemode"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 11: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colorbalanceaggressiveness"; - option_descriptor_array.option_descriptors[option]->title = "colorbalanceaggressiveness"; - option_descriptor_array.option_descriptors[option]->desc = "colorbalanceaggressiveness"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colorbalanceaggressiveness"; + option_descriptor_array.option_descriptors[option].title = "colorbalanceaggressiveness"; + option_descriptor_array.option_descriptors[option].desc = "colorbalanceaggressiveness"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 12: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colorbalancered"; - option_descriptor_array.option_descriptors[option]->title = "colorbalancered"; - option_descriptor_array.option_descriptors[option]->desc = "colorbalancered"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colorbalancered"; + option_descriptor_array.option_descriptors[option].title = "colorbalancered"; + option_descriptor_array.option_descriptors[option].desc = "colorbalancered"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 13: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colorbalancegreen"; - option_descriptor_array.option_descriptors[option]->title = "colorbalancegreen"; - option_descriptor_array.option_descriptors[option]->desc = "colorbalancegreen"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colorbalancegreen"; + option_descriptor_array.option_descriptors[option].title = "colorbalancegreen"; + option_descriptor_array.option_descriptors[option].desc = "colorbalancegreen"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 14: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "colorbalanceblue"; - option_descriptor_array.option_descriptors[option]->title = "colorbalanceblue"; - option_descriptor_array.option_descriptors[option]->desc = "colorbalanceblue"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "colorbalanceblue"; + option_descriptor_array.option_descriptors[option].title = "colorbalanceblue"; + option_descriptor_array.option_descriptors[option].desc = "colorbalanceblue"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 15: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "foregroundboldnessmode"; - option_descriptor_array.option_descriptors[option]->title = "foregroundboldnessmode"; - option_descriptor_array.option_descriptors[option]->desc = "foregroundboldnessmode"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "foregroundboldnessmode"; + option_descriptor_array.option_descriptors[option].title = "foregroundboldnessmode"; + option_descriptor_array.option_descriptors[option].desc = "foregroundboldnessmode"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 16: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "foregroundboldnessaggressiveness"; - option_descriptor_array.option_descriptors[option]->title = "foregroundboldnessaggressiveness"; - option_descriptor_array.option_descriptors[option]->desc = "foregroundboldnessaggressiveness"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "foregroundboldnessaggressiveness"; + option_descriptor_array.option_descriptors[option].title = "foregroundboldnessaggressiveness"; + option_descriptor_array.option_descriptors[option].desc = "foregroundboldnessaggressiveness"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 17: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "backgroundsmoothingmode"; - option_descriptor_array.option_descriptors[option]->title = "backgroundsmoothingmode"; - option_descriptor_array.option_descriptors[option]->desc = "backgroundsmoothingmode"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "backgroundsmoothingmode"; + option_descriptor_array.option_descriptors[option].title = "backgroundsmoothingmode"; + option_descriptor_array.option_descriptors[option].desc = "backgroundsmoothingmode"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 18: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "backgroundsmoothingaggressiveness"; - option_descriptor_array.option_descriptors[option]->title = "backgroundsmoothingaggressiveness"; - option_descriptor_array.option_descriptors[option]->desc = "backgroundsmoothingaggressiveness"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "backgroundsmoothingaggressiveness"; + option_descriptor_array.option_descriptors[option].title = "backgroundsmoothingaggressiveness"; + option_descriptor_array.option_descriptors[option].desc = "backgroundsmoothingaggressiveness"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 19: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "binarizationmode"; - option_descriptor_array.option_descriptors[option]->title = "binarizationmode"; - option_descriptor_array.option_descriptors[option]->desc = "binarizationmode"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "binarizationmode"; + option_descriptor_array.option_descriptors[option].title = "binarizationmode"; + option_descriptor_array.option_descriptors[option].desc = "binarizationmode"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 20: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "binarizationcontrast"; - option_descriptor_array.option_descriptors[option]->title = "binarizationcontrast"; - option_descriptor_array.option_descriptors[option]->desc = "binarizationcontrast"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "binarizationcontrast"; + option_descriptor_array.option_descriptors[option].title = "binarizationcontrast"; + option_descriptor_array.option_descriptors[option].desc = "binarizationcontrast"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 21: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "maxdocumentlength"; - option_descriptor_array.option_descriptors[option]->title = "maxdocumentlength"; - option_descriptor_array.option_descriptors[option]->desc = "maxdocumentlength"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "maxdocumentlength"; + option_descriptor_array.option_descriptors[option].title = "maxdocumentlength"; + option_descriptor_array.option_descriptors[option].desc = "maxdocumentlength"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; case 22: - free(option_descriptor_array.option_descriptors[option]); - option_descriptor_array.option_descriptors[option] = NULL; - option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); - option_descriptor_array.option_descriptors[option]->name = "scansource"; - option_descriptor_array.option_descriptors[option]->title = "scansource"; - option_descriptor_array.option_descriptors[option]->desc = "ScanSoscansourceurce"; - option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; - option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; - option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + option_descriptor_array.option_descriptors[option].name = "scansource"; + option_descriptor_array.option_descriptors[option].title = "scansource"; + option_descriptor_array.option_descriptors[option].desc = "ScanSoscansourceurce"; + option_descriptor_array.option_descriptors[option].cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option].constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option].constraint.string_list = NULL; break; default: return NULL; @@ -374,8 +297,8 @@ const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( case 18: case 20: case 21: - option_descriptor_array.option_descriptors[option]->type = SANE_TYPE_INT; - option_descriptor_array.option_descriptors[option]->size = sizeof(SANE_Int); + option_descriptor_array.option_descriptors[option].type = SANE_TYPE_INT; + option_descriptor_array.option_descriptors[option].size = sizeof(SANE_Int); break; case 2: case 3: @@ -387,16 +310,16 @@ const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( case 17: case 19: case 22: - option_descriptor_array.option_descriptors[option]->type = SANE_TYPE_STRING; - option_descriptor_array.option_descriptors[option]->unit = SANE_UNIT_NONE; - option_descriptor_array.option_descriptors[option]->size = sizeof(SANE_String) * 50; + option_descriptor_array.option_descriptors[option].type = SANE_TYPE_STRING; + option_descriptor_array.option_descriptors[option].unit = SANE_UNIT_NONE; + option_descriptor_array.option_descriptors[option].size = sizeof(SANE_String) * 50; break; default: return NULL; break; } - return option_descriptor_array.option_descriptors[option]; + return &option_descriptor_array.option_descriptors[option]; } SANE_Status _sane_kds_s2000w_net_control_option(SANE_Handle handle,