]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysext: Factor out adding overlayfs option
authorKrzesimir Nowak <knowak@microsoft.com>
Thu, 15 Feb 2024 14:01:20 +0000 (15:01 +0100)
committerKrzesimir Nowak <knowak@microsoft.com>
Thu, 22 Feb 2024 18:06:22 +0000 (19:06 +0100)
We will use it later when adding workdir and upperdir options for overlayfs
mount operation.

src/sysext/sysext.c

index 2db5d375cf8f0fa273dd61169d85468092d3c11e..b64209267998549d8609c3651aae5ed43a9f48b0 100644 (file)
@@ -478,6 +478,31 @@ static int verb_status(int argc, char **argv, void *userdata) {
         return ret;
 }
 
+static int append_overlayfs_path_option(
+                char **options,
+                const char *separator,
+                const char *option,
+                const char *path) {
+
+        _cleanup_free_ char *escaped = NULL;
+
+        assert(options);
+        assert(separator);
+        assert(path);
+
+        escaped = shell_escape(path, ",:");
+        if (!escaped)
+                return log_oom();
+
+        if (option) {
+                if (!strextend(options, separator, option, "=", escaped))
+                        return log_oom();
+        } else if (!strextend(options, separator, escaped))
+                return log_oom();
+
+        return 0;
+}
+
 static int mount_overlayfs(
                 ImageClass image_class,
                 int noexec,
@@ -496,14 +521,9 @@ static int mount_overlayfs(
                 return log_oom();
 
         STRV_FOREACH(l, layers) {
-                _cleanup_free_ char *escaped = NULL;
-
-                escaped = shell_escape(*l, ",:");
-                if (!escaped)
-                        return log_oom();
-
-                if (!strextend(&options, separator ? ":" : "", escaped))
-                        return log_oom();
+                r = append_overlayfs_path_option(&options, separator ? ":" : "", NULL, *l);
+                if (r < 0)
+                        return r;
 
                 separator = true;
         }