From 1fdb506564f971fc4241b39fd8ba94956d6eeaef Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 8 Feb 2023 11:27:05 -0800 Subject: [PATCH] output: Add null sentinel automatically to parse_enum() arguments. --- src/output/ascii.c | 3 +-- src/output/driver.c | 1 - src/output/options.c | 6 +++--- src/output/options.h | 3 +++ 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/output/ascii.c b/src/output/ascii.c index 692f7f4d42..d581675fe3 100644 --- a/src/output/ascii.c +++ b/src/output/ascii.c @@ -386,8 +386,7 @@ ascii_create (struct file_handle *fh, enum settings_output_devices device_type, ? "unicode" : "ascii"); enum { BOX_ASCII, BOX_UNICODE } box = parse_enum (opt (o, "box", default_box), "ascii", BOX_ASCII, - "unicode", BOX_UNICODE, - NULL_SENTINEL); + "unicode", BOX_UNICODE); static const struct render_ops ascii_render_ops = { .draw_line = ascii_draw_line, diff --git a/src/output/driver.c b/src/output/driver.c index ba2d54f9f5..6df9057a7d 100644 --- a/src/output/driver.c +++ b/src/output/driver.c @@ -563,7 +563,6 @@ output_driver_create (struct string_map *options) if (file_name == NULL) file_name = xstrdup (f->default_file_name); - /* XXX should use parse_enum(). */ enum settings_output_devices default_type = default_device_type (file_name); const char *default_type_string = (default_type == SETTINGS_DEVICE_TERMINAL ? "terminal" : "listing"); diff --git a/src/output/options.c b/src/output/options.c index c05ea746c0..227b132aa0 100644 --- a/src/output/options.c +++ b/src/output/options.c @@ -107,10 +107,10 @@ parse_boolean (struct driver_option o) O has no user-specified value, then O's default value is treated the same way. If the default value still does not match, parse_enum() returns 0. - Example: parse_enum (o, "a", 1, "b", 2, NULL_SENTINEL) returns 1 if O's - value if "a", 2 if O's value is "b". */ + Example: parse_enum (o, "a", 1, "b", 2) returns 1 if O's value if "a", 2 if + O's value is "b". */ int -parse_enum (struct driver_option o, ...) +(parse_enum) (struct driver_option o, ...) { va_list args; va_start (args, o); diff --git a/src/output/options.h b/src/output/options.h index 2c0fc5c13f..e8e675f8bc 100644 --- a/src/output/options.h +++ b/src/output/options.h @@ -49,7 +49,10 @@ struct driver_option driver_option_get (struct driver_options *, void parse_paper_size (struct driver_option, int *h, int *v); bool parse_boolean (struct driver_option); + int parse_enum (struct driver_option, ...) SENTINEL(0); +#define parse_enum(...) parse_enum(__VA_ARGS__, NULL_SENTINEL) + int parse_int (struct driver_option, int min_value, int max_value); int parse_dimension (struct driver_option); char *parse_string (struct driver_option); -- 2.30.2