From: Zbigniew Jędrzejewski-Szmek Date: Mon, 15 Feb 2021 18:41:39 +0000 (+0100) Subject: tree-wide: use parse_boolean_argument() for variables with non-boolean type X-Git-Tag: v248-rc1~68^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c3470872c6c12d64c895643bd3b02022beb0589e;p=thirdparty%2Fsystemd.git tree-wide: use parse_boolean_argument() for variables with non-boolean type This still works nicely, but we need to assign the return value ourselves. As before, one nice effect is that error messages are uniform. --- diff --git a/src/delta/delta.c b/src/delta/delta.c index 21be1b8f549..bb38db54a4e 100644 --- a/src/delta/delta.c +++ b/src/delta/delta.c @@ -15,6 +15,7 @@ #include "main-func.h" #include "nulstr-util.h" #include "pager.h" +#include "parse-argument.h" #include "parse-util.h" #include "path-util.h" #include "pretty-print.h" @@ -586,7 +587,7 @@ static int parse_argv(int argc, char *argv[]) { {} }; - int c; + int c, r; assert(argc >= 1); assert(argv); @@ -616,18 +617,10 @@ static int parse_argv(int argc, char *argv[]) { } case ARG_DIFF: - if (!optarg) - arg_diff = 1; - else { - int b; - - b = parse_boolean(optarg); - if (b < 0) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "Failed to parse diff boolean."); - - arg_diff = b; - } + r = parse_boolean_argument("--diff", optarg, NULL); + if (r < 0) + return r; + arg_diff = r; break; case '?': diff --git a/src/mount/mount-tool.c b/src/mount/mount-tool.c index 5a8e8b1143c..f30061dac74 100644 --- a/src/mount/mount-tool.c +++ b/src/mount/mount-tool.c @@ -288,9 +288,9 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_AUTOMOUNT: - r = parse_boolean(optarg); + r = parse_boolean_argument("--automount=", optarg, NULL); if (r < 0) - return log_error_errno(r, "--automount= expects a valid boolean parameter: %s", optarg); + return r; arg_action = r ? ACTION_AUTOMOUNT : ACTION_MOUNT; break; diff --git a/src/partition/repart.c b/src/partition/repart.c index ac905cab531..20909a18478 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -3608,10 +3608,9 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_FACTORY_RESET: - r = parse_boolean(optarg); + r = parse_boolean_argument("--factory-reset=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --factory-reset= parameter: %s", optarg); - + return r; arg_factory_reset = r; break; @@ -3642,10 +3641,9 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_PRETTY: - r = parse_boolean(optarg); + r = parse_boolean_argument("--pretty=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --pretty= parameter: %s", optarg); - + return r; arg_pretty = r; break; diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index ec572cabf08..9b11e0a8c81 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -2831,30 +2831,30 @@ static int compat_parse_argv(int argc, char *argv[]) { break; case ARG_CNAME: - r = parse_boolean(optarg); + r = parse_boolean_argument("--cname=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --cname= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_CNAME, r == 0); break; case ARG_SERVICE_ADDRESS: - r = parse_boolean(optarg); + r = parse_boolean_argument("--service-address=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --service-address= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_ADDRESS, r == 0); break; case ARG_SERVICE_TXT: - r = parse_boolean(optarg); + r = parse_boolean_argument("--service-txt=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --service-txt= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_TXT, r == 0); break; case ARG_SEARCH: - r = parse_boolean(optarg); + r = parse_boolean_argument("--search=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --search argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_SEARCH, r == 0); break; @@ -3109,72 +3109,72 @@ static int native_parse_argv(int argc, char *argv[]) { break; case ARG_CNAME: - r = parse_boolean(optarg); + r = parse_boolean_argument("--cname=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --cname= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_CNAME, r == 0); break; case ARG_VALIDATE: - r = parse_boolean(optarg); + r = parse_boolean_argument("--validate=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --validate= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_VALIDATE, r == 0); break; case ARG_SYNTHESIZE: - r = parse_boolean(optarg); + r = parse_boolean_argument("--synthesize=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --synthesize= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_SYNTHESIZE, r == 0); break; case ARG_CACHE: - r = parse_boolean(optarg); + r = parse_boolean_argument("--cache=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --cache= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_CACHE, r == 0); break; case ARG_ZONE: - r = parse_boolean(optarg); + r = parse_boolean_argument("--zone=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --zone= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_ZONE, r == 0); break; case ARG_TRUST_ANCHOR: - r = parse_boolean(optarg); + r = parse_boolean_argument("--trust-anchor=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --trust-anchor= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_TRUST_ANCHOR, r == 0); break; case ARG_NETWORK: - r = parse_boolean(optarg); + r = parse_boolean_argument("--network=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --network= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_NETWORK, r == 0); break; case ARG_SERVICE_ADDRESS: - r = parse_boolean(optarg); + r = parse_boolean_argument("--service-address=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --service-address= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_ADDRESS, r == 0); break; case ARG_SERVICE_TXT: - r = parse_boolean(optarg); + r = parse_boolean_argument("--service-txt=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --service-txt= argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_TXT, r == 0); break; case ARG_SEARCH: - r = parse_boolean(optarg); + r = parse_boolean_argument("--search=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --search argument."); + return r; SET_FLAG(arg_flags, SD_RESOLVED_NO_SEARCH, r == 0); break; diff --git a/src/shared/parse-argument.c b/src/shared/parse-argument.c index 89951c4b3d9..db182e4bcb2 100644 --- a/src/shared/parse-argument.c +++ b/src/shared/parse-argument.c @@ -20,11 +20,13 @@ int parse_boolean_argument(const char *optname, const char *s, bool *ret) { if (r < 0) return log_error_errno(r, "Failed to parse boolean argument to %s: %s.", optname, s); - *ret = r; + if (ret) + *ret = r; return r; } else { /* s may be NULL. This is controlled by getopt_long() parameters. */ - *ret = true; + if (ret) + *ret = true; return true; } } diff --git a/src/userdb/userdbctl.c b/src/userdb/userdbctl.c index f4204759dbf..102721dd504 100644 --- a/src/userdb/userdbctl.c +++ b/src/userdb/userdbctl.c @@ -10,6 +10,7 @@ #include "format-util.h" #include "main-func.h" #include "pager.h" +#include "parse-argument.h" #include "parse-util.h" #include "pretty-print.h" #include "socket-util.h" @@ -720,17 +721,17 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_WITH_NSS: - r = parse_boolean(optarg); + r = parse_boolean_argument("--with-nss=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --with-nss= parameter: %s", optarg); + return r; SET_FLAG(arg_userdb_flags, USERDB_AVOID_NSS, !r); break; case ARG_SYNTHESIZE: - r = parse_boolean(optarg); + r = parse_boolean_argument("--synthesize=", optarg, NULL); if (r < 0) - return log_error_errno(r, "Failed to parse --synthesize= parameter: %s", optarg); + return r; SET_FLAG(arg_userdb_flags, USERDB_DONT_SYNTHESIZE, !r); break;