]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Move and rename parse_path_argument() function
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 14 Feb 2021 10:39:48 +0000 (11:39 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 15 Feb 2021 07:50:45 +0000 (08:50 +0100)
This fits better in shared/, and the new parse-argument.c file is a good home
for it.

18 files changed:
src/basic/path-util.c
src/basic/path-util.h
src/core/main.c
src/cryptenroll/cryptenroll.c
src/dissect/dissect.c
src/firstboot/firstboot.c
src/home/homectl.c
src/journal/journalctl.c
src/machine-id-setup/machine-id-setup-main.c
src/nspawn/nspawn.c
src/partition/repart.c
src/run/run.c
src/shared/parse-argument.c
src/shared/parse-argument.h
src/sysext/sysext.c
src/systemctl/systemctl.c
src/sysusers/sysusers.c
src/tmpfiles/tmpfiles.c

index f7498d012568538681e51cb60435232270b1d608..f3398418c4f22b991b7fd0537ade711079c97a08 100644 (file)
@@ -752,38 +752,6 @@ int fsck_exists(const char *fstype) {
         return executable_is_good(checker);
 }
 
-int parse_path_argument_and_warn(const char *path, bool suppress_root, char **arg) {
-        char *p;
-        int r;
-
-        /*
-         * This function is intended to be used in command line
-         * parsers, to handle paths that are passed in. It makes the
-         * path absolute, and reduces it to NULL if omitted or
-         * root (the latter optionally).
-         *
-         * NOTE THAT THIS WILL FREE THE PREVIOUS ARGUMENT POINTER ON
-         * SUCCESS! Hence, do not pass in uninitialized pointers.
-         */
-
-        if (isempty(path)) {
-                *arg = mfree(*arg);
-                return 0;
-        }
-
-        r = path_make_absolute_cwd(path, &p);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse path \"%s\" and make it absolute: %m", path);
-
-        path_simplify(p, false);
-        if (suppress_root && empty_or_root(p))
-                p = mfree(p);
-
-        free_and_replace(*arg, p);
-
-        return 0;
-}
-
 char* dirname_malloc(const char *path) {
         char *d, *dir, *dir2;
 
index e7a26c9a843215cc643fff17e61af6fe36a3fd8f..ba12b03dbe6d70323c401f1a3e5be4b8f6c53512 100644 (file)
@@ -144,8 +144,6 @@ int fsck_exists(const char *fstype);
                 _ret;                                                   \
         })
 
-int parse_path_argument_and_warn(const char *path, bool suppress_root, char **arg);
-
 char* dirname_malloc(const char *path);
 const char *last_path_component(const char *path);
 int path_extract_filename(const char *p, char **ret);
index 85bf558e90f56ce99add9325ac6337a55b4be489..8c7bcc2d3d98c9ece854d224b5607ae42acef4c9 100644 (file)
@@ -58,6 +58,7 @@
 #include "mount-setup.h"
 #include "os-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -358,7 +359,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                         return 0;
 
                 if (path_is_absolute(value))
-                        (void) parse_path_argument_and_warn(value, false, &arg_early_core_pattern);
+                        (void) parse_path_argument(value, false, &arg_early_core_pattern);
                 else
                         log_warning("Specified core pattern '%s' is not an absolute path, ignoring.", value);
 
@@ -498,7 +499,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                (void) parse_path_argument_and_warn(value, false, &arg_watchdog_device);
+                (void) parse_path_argument(value, false, &arg_watchdog_device);
 
         } else if (proc_cmdline_key_streq(key, "systemd.clock_usec")) {
 
index fa4dfb6ef21a1991fd705ac0130fab3bacd7e268..a137a41c9d7cfda6d75696671b48008c886e0b3c 100644 (file)
@@ -16,6 +16,7 @@
 #include "libfido2-util.h"
 #include "main-func.h"
 #include "memory-util.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pkcs11-util.h"
@@ -323,7 +324,7 @@ static int parse_argv(int argc, char *argv[]) {
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Too many arguments, refusing.");
 
-        r = parse_path_argument_and_warn(argv[optind], false, &arg_node);
+        r = parse_path_argument(argv[optind], false, &arg_node);
         if (r < 0)
                 return r;
 
index 0b83d79cc938a02023ed7ddd8a9813046768e56f..e5ca85ffc51d19555682b4d5709cf4318a5e9fdc 100644 (file)
@@ -22,6 +22,7 @@
 #include "mkdir.h"
 #include "mount-util.h"
 #include "namespace-util.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -245,7 +246,7 @@ static int parse_argv(int argc, char *argv[]) {
                 }
 
                 case ARG_VERITY_DATA:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_verity_settings.data_path);
+                        r = parse_path_argument(optarg, false, &arg_verity_settings.data_path);
                         if (r < 0)
                                 return r;
                         break;
index 522d0ff1f085945276b3a3135004022e71a6e72e..40f0de28c290eeab0873382b53d9f133012029e4 100644 (file)
@@ -24,6 +24,7 @@
 #include "mkdir.h"
 #include "mount-util.h"
 #include "os-util.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -1046,13 +1047,13 @@ static int parse_argv(int argc, char *argv[]) {
                         return version();
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, true, &arg_root);
+                        r = parse_path_argument(optarg, true, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
 
                 case ARG_IMAGE:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_image);
+                        r = parse_path_argument(optarg, false, &arg_image);
                         if (r < 0)
                                 return r;
                         break;
index bf35fa03f0d40c3a27c544530ab3a585caf779a9..c667419a51961a97ac49b734096c02ac73dfa1e5 100644 (file)
@@ -23,6 +23,7 @@
 #include "main-func.h"
 #include "memory-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pkcs11-util.h"
@@ -2260,7 +2261,7 @@ static int parse_argv(int argc, char *argv[]) {
                                 break;
                         }
 
-                        r = parse_path_argument_and_warn(optarg, false, &hd);
+                        r = parse_path_argument(optarg, false, &hd);
                         if (r < 0)
                                 return r;
 
@@ -2481,7 +2482,7 @@ static int parse_argv(int argc, char *argv[]) {
                                 break;
                         }
 
-                        r = parse_path_argument_and_warn(optarg, false, &v);
+                        r = parse_path_argument(optarg, false, &v);
                         if (r < 0)
                                 return r;
 
index 20b75846435ffe074d23f1aa21f6b9fb79d4875f..a1b7bee2a3b218bbc4f29d692e654fef1ede8708 100644 (file)
@@ -55,6 +55,7 @@
 #include "mountpoint-util.h"
 #include "nulstr-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pcre2-dlopen.h"
@@ -719,13 +720,13 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ true, &arg_root);
+                        r = parse_path_argument(optarg, /* suppress_root= */ true, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
 
                 case ARG_IMAGE:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_image);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
                         if (r < 0)
                                 return r;
                         break;
index 6074b1b42eec4d2c874fb0b0262b7dc54a413d5d..69fb71cdc2d7f837e96f4ddaa1e3c738a8231ab0 100644 (file)
@@ -10,6 +10,7 @@
 #include "log.h"
 #include "machine-id-setup.h"
 #include "main-func.h"
+#include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "util.h"
@@ -76,7 +77,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return version();
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, true, &arg_root);
+                        r = parse_path_argument(optarg, true, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
index e1c55d0542749a2f578e0fb499df10e6e5bc309e..19734f1c4544517fa37648e94d3ccb295a8e33ef 100644 (file)
@@ -78,6 +78,7 @@
 #include "nulstr-util.h"
 #include "os-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -791,7 +792,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return version();
 
                 case 'D':
-                        r = parse_path_argument_and_warn(optarg, false, &arg_directory);
+                        r = parse_path_argument(optarg, false, &arg_directory);
                         if (r < 0)
                                 return r;
 
@@ -799,7 +800,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_TEMPLATE:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_template);
+                        r = parse_path_argument(optarg, false, &arg_template);
                         if (r < 0)
                                 return r;
 
@@ -807,7 +808,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case 'i':
-                        r = parse_path_argument_and_warn(optarg, false, &arg_image);
+                        r = parse_path_argument(optarg, false, &arg_image);
                         if (r < 0)
                                 return r;
 
@@ -815,7 +816,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_OCI_BUNDLE:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_oci_bundle);
+                        r = parse_path_argument(optarg, false, &arg_oci_bundle);
                         if (r < 0)
                                 return r;
 
@@ -934,7 +935,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_NETWORK_NAMESPACE_PATH:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_network_namespace_path);
+                        r = parse_path_argument(optarg, false, &arg_network_namespace_path);
                         if (r < 0)
                                 return r;
 
@@ -1386,7 +1387,7 @@ static int parse_argv(int argc, char *argv[]) {
                 }
 
                 case ARG_VERITY_DATA:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_verity_settings.data_path);
+                        r = parse_path_argument(optarg, false, &arg_verity_settings.data_path);
                         if (r < 0)
                                 return r;
                         break;
index 2236c6927f50cb661fcc64a26c3a2b3ee3737038..98280850189985b6423787774a7a6ee27a4e1faf 100644 (file)
@@ -45,6 +45,7 @@
 #include "mkfs-util.h"
 #include "mount-util.h"
 #include "parse-util.h"
+#include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "proc-cmdline.h"
@@ -3623,7 +3624,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_root);
+                        r = parse_path_argument(optarg, false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
@@ -3653,7 +3654,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_DEFINITIONS:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_definitions);
+                        r = parse_path_argument(optarg, false, &arg_definitions);
                         if (r < 0)
                                 return r;
                         break;
index 29b182718b74ee403abb1f92121d4d13d9f411aa..11166d2e78bafd16789a4e10b05e0e706aad7bac 100644 (file)
@@ -21,6 +21,7 @@
 #include "fd-util.h"
 #include "format-util.h"
 #include "main-func.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -470,7 +471,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_WORKING_DIRECTORY:
-                        r = parse_path_argument_and_warn(optarg, true, &arg_working_directory);
+                        r = parse_path_argument(optarg, true, &arg_working_directory);
                         if (r < 0)
                                 return r;
 
index ca10d51793b1c32a5f878b9b9438fbe0ac0a9eec..774cb1bc82a7f35ef3de477b171008fd9b77c3d6 100644 (file)
@@ -2,11 +2,42 @@
 
 #include "format-table.h"
 #include "parse-argument.h"
+#include "path-util.h"
 #include "signal-util.h"
 #include "stdio-util.h"
 #include "string-table.h"
 #include "string-util.h"
 
+/* All functions in this file emit warnigs. */
+
+int parse_path_argument(const char *path, bool suppress_root, char **arg) {
+        char *p;
+        int r;
+
+        /*
+         * This function is intended to be used in command line parsers, to handle paths that are passed
+         * in. It makes the path absolute, and reduces it to NULL if omitted or root (the latter optionally).
+         *
+         * NOTE THAT THIS WILL FREE THE PREVIOUS ARGUMENT POINTER ON SUCCESS!
+         * Hence, do not pass in uninitialized pointers.
+         */
+
+        if (isempty(path)) {
+                *arg = mfree(*arg);
+                return 0;
+        }
+
+        r = path_make_absolute_cwd(path, &p);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse path \"%s\" and make it absolute: %m", path);
+
+        path_simplify(p, false);
+        if (suppress_root && empty_or_root(p))
+                p = mfree(p);
+
+        return free_and_replace(*arg, p);
+}
+
 int parse_signal_argument(const char *s, int *ret) {
         int r;
 
index 7a5419174d77429a7795aba10dc64c40a48a9f13..4ec334fe5ed250028cdddfb5d2dcc70b0a489a13 100644 (file)
@@ -1,4 +1,5 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+int parse_path_argument(const char *path, bool suppress_root, char **arg);
 int parse_signal_argument(const char *s, int *ret);
index 1ce9939afb03405e2ce1bd666db67d32a7d5e323..ff8d58902acc5cd65cff6b6abbf3878c903ab034 100644 (file)
@@ -22,6 +22,7 @@
 #include "mountpoint-util.h"
 #include "os-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
@@ -943,7 +944,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_root);
+                        r = parse_path_argument(optarg, false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
index 0371ff355ec4b9edd72708d799eff06ba0a55bc6..3ecd20cc74bb92f617238a7268b3f49faf725b9e 100644 (file)
@@ -638,7 +638,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_root);
+                        r = parse_path_argument(optarg, false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
index 969896c0b5d87e717f7172b523d642c0ab6933ac..4e231be856ebd63f9f37f9660588f36b2aa78715 100644 (file)
@@ -17,6 +17,7 @@
 #include "mount-util.h"
 #include "nscd-flush.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "selinux-util.h"
@@ -1813,7 +1814,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_root);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
@@ -1823,7 +1824,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                                "This systemd-sysusers version is compiled without support for --image=.");
 #else
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_image);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
                         if (r < 0)
                                 return r;
                         break;
index 97de00e3dce828ed1f7adade6a3edb44ccc69e93..846e456551ee66d7e1822f09725e5be2a7669f2a 100644 (file)
@@ -46,6 +46,7 @@
 #include "mountpoint-util.h"
 #include "offline-passwd.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-lookup.h"
 #include "path-util.h"
@@ -3114,7 +3115,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_root);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
@@ -3124,7 +3125,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                                "This systemd-tmpfiles version is compiled without support for --image=.");
 #else
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_image);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
                         if (r < 0)
                                 return r;
 #endif