]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: use parse_boolean_argument() for variables with non-boolean type
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 15 Feb 2021 18:41:39 +0000 (19:41 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 17 Feb 2021 20:08:47 +0000 (21:08 +0100)
This still works nicely, but we need to assign the return value ourselves.
As before, one nice effect is that error messages are uniform.

src/delta/delta.c
src/mount/mount-tool.c
src/partition/repart.c
src/resolve/resolvectl.c
src/shared/parse-argument.c
src/userdb/userdbctl.c

index 21be1b8f549fdf070e7930a7f7ee0a6793c8fefc..bb38db54a4ec25bf09f1cc5f7108a53b3a2b6ab7 100644 (file)
@@ -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 '?':
index 5a8e8b1143c5a5a7f3a2659bcf33ab3f2c929146..f30061dac74e2012f6d26179b7b1115835060444 100644 (file)
@@ -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;
index ac905cab5315fbc2b87619b5e291fbfb41505580..20909a18478e1481aa184ec73a42b36597447caa 100644 (file)
@@ -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;
 
index ec572cabf08f05cffc37877ee5c8450c1237c011..9b11e0a8c81167eec890486485ffbe14dbd52e51 100644 (file)
@@ -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;
 
index 89951c4b3d9e45a0b2e5585e753bc0fac1d17bf4..db182e4bcb2a6e905a0dd48fee04241c25b3c824 100644 (file)
@@ -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;
         }
 }
index f4204759dbf94be6dc09cab69e8130179b243057..102721dd504a54953e7ea68f18dd069cda7ac07d 100644 (file)
@@ -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;