diff options
author | Jörg Frings-Fürst <debian@jff.email> | 2023-02-16 10:20:08 +0100 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff.email> | 2023-02-16 10:20:08 +0100 |
commit | 778ebf8ee9cb22ea5727844333bcd5a6ee6bc0de (patch) | |
tree | a754e785b286ed82b45fe4e50b980714ad80e0a7 /frontend/scanimage.c | |
parent | 7d8aac1f3634dc58785bec7acf097dd6bac8c394 (diff) | |
parent | 32cb765f681299af226ca0520993cbe47ba5ecd0 (diff) |
Merge branch 'release/debian/1.2.1-1'debian/1.2.1-1
Diffstat (limited to 'frontend/scanimage.c')
-rw-r--r-- | frontend/scanimage.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/frontend/scanimage.c b/frontend/scanimage.c index b587b9d..d79d487 100644 --- a/frontend/scanimage.c +++ b/frontend/scanimage.c @@ -40,6 +40,14 @@ #include <unistd.h> #include <stdarg.h> +#ifdef __FreeBSD__ +#include <libgen.h> +#endif + +#if defined (__APPLE__) && defined (__MACH__) +#include <libgen.h> // for basename() +#endif + #include <sys/types.h> #include <sys/stat.h> @@ -917,9 +925,10 @@ fetch_options (SANE_Device * device) scanimage_exit (1); } - /* create command line option only for settable options */ - if (!SANE_OPTION_IS_SETTABLE (opt->cap) || opt->type == SANE_TYPE_GROUP) - continue; + /* create command line option only for non-group options */ + /* Also we sometimes see options with no name in rogue backends. */ + if ((opt->type == SANE_TYPE_GROUP) || (opt->name == NULL)) + continue; option_number[option_count] = i; @@ -1072,6 +1081,12 @@ process_backend_option (SANE_Handle device, int optnum, const char *optarg) opt = sane_get_option_descriptor (device, optnum); + if (!SANE_OPTION_IS_SETTABLE (opt->cap)) + { + fprintf (stderr, "%s: attempted to set readonly option %s\n", + prog_name, opt->name); + scanimage_exit (1); + } if (!SANE_OPTION_IS_ACTIVE (opt->cap)) { fprintf (stderr, "%s: attempted to set inactive option %s\n", @@ -2013,6 +2028,10 @@ static void print_options(SANE_Device * device, SANE_Int num_dev_options, SANE_B if (!opt) opt = sane_get_option_descriptor (device, i); + /* Some options from rogue backends are empty. */ + if (opt->name == NULL) + continue; + if (ro || SANE_OPTION_IS_SETTABLE (opt->cap) || opt->type == SANE_TYPE_GROUP) print_option (device, i, opt); |