From 187b1faf20e70c4c2f15b7ced0440fc3eb798ea5 Mon Sep 17 00:00:00 2001 Message-Id: <187b1faf20e70c4c2f15b7ced0440fc3eb798ea5.1715878711.git.mdw@distorted.org.uk> From: Mark Wooding Date: Mon, 4 May 2020 18:30:01 +0100 Subject: [PATCH] lib/configuration.c: Factor out common validation code. Organization: Straylight/Edgeware From: Mark Wooding I noticed in passing that `validate_non_negative' and `validate_positive' were nearly identical. Factor out the common part. --- lib/configuration.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/lib/configuration.c b/lib/configuration.c index b36033b..bad3159 100644 --- a/lib/configuration.c +++ b/lib/configuration.c @@ -723,15 +723,14 @@ static int validate_tracklength(const struct config_state *cs, return 0; } -/** @brief Validate a non-negative (@c long) integer +/** @brief Common code for validating integer values * @param cs Configuration state * @param nvec Length of (proposed) new value * @param vec Elements of new value - * @return 0 on success, non-0 on error + * @param n_out Where to put the value */ -static int validate_non_negative(const struct config_state *cs, - int nvec, char **vec) { - long n; +static int common_validate_integer(const struct config_state *cs, + int nvec, char **vec, long *n_out) { char errbuf[1024]; if(nvec < 1) { @@ -742,11 +741,24 @@ static int validate_non_negative(const struct config_state *cs, disorder_error(0, "%s:%d: too many arguments", cs->path, cs->line); return -1; } - if(xstrtol(&n, vec[0], 0, 0)) { + if(xstrtol(n_out, vec[0], 0, 0)) { disorder_error(0, "%s:%d: %s", cs->path, cs->line, format_error(ec_errno, errno, errbuf, sizeof errbuf)); return -1; } + return 0; +} + +/** @brief Validate a non-negative (@c long) integer + * @param cs Configuration state + * @param nvec Length of (proposed) new value + * @param vec Elements of new value + * @return 0 on success, non-0 on error + */ +static int validate_non_negative(const struct config_state *cs, + int nvec, char **vec) { + long n; + if(common_validate_integer(cs, nvec, vec, &n)) return -1; if(n < 0) { disorder_error(0, "%s:%d: must not be negative", cs->path, cs->line); return -1; @@ -763,21 +775,7 @@ static int validate_non_negative(const struct config_state *cs, static int validate_positive(const struct config_state *cs, int nvec, char **vec) { long n; - char errbuf[1024]; - - if(nvec < 1) { - disorder_error(0, "%s:%d: missing argument", cs->path, cs->line); - return -1; - } - if(nvec > 1) { - disorder_error(0, "%s:%d: too many arguments", cs->path, cs->line); - return -1; - } - if(xstrtol(&n, vec[0], 0, 0)) { - disorder_error(0, "%s:%d: %s", cs->path, cs->line, - format_error(ec_errno, errno, errbuf, sizeof errbuf)); - return -1; - } + if(common_validate_integer(cs, nvec, vec, &n)) return -1; if(n <= 0) { disorder_error(0, "%s:%d: must be positive", cs->path, cs->line); return -1; -- [mdw]