]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vconsole-util: Introduce vconsole_serialize()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 5 Feb 2025 13:30:57 +0000 (14:30 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 7 Feb 2025 00:18:36 +0000 (09:18 +0900)
Preparation for reuse in systemd-firstboot.

src/locale/localed-util.c
src/shared/vconsole-util.c
src/shared/vconsole-util.h

index 7ff8676761efe118f666d0aff2f8d948d8b5c398..d43ee48e12f2fdc0e359cc8def7ce44df430ae0c 100644 (file)
@@ -298,27 +298,7 @@ int vconsole_write_data(Context *c) {
         if (r < 0 && r != -ENOENT)
                 return r;
 
-        r = strv_env_assign(&l, "KEYMAP", empty_to_null(c->vc.keymap));
-        if (r < 0)
-                return r;
-
-        r = strv_env_assign(&l, "KEYMAP_TOGGLE", empty_to_null(c->vc.toggle));
-        if (r < 0)
-                return r;
-
-        r = strv_env_assign(&l, "XKBLAYOUT", empty_to_null(xc->layout));
-        if (r < 0)
-                return r;
-
-        r = strv_env_assign(&l, "XKBMODEL", empty_to_null(xc->model));
-        if (r < 0)
-                return r;
-
-        r = strv_env_assign(&l, "XKBVARIANT", empty_to_null(xc->variant));
-        if (r < 0)
-                return r;
-
-        r = strv_env_assign(&l, "XKBOPTIONS", empty_to_null(xc->options));
+        r = vconsole_serialize(&c->vc, xc, &l);
         if (r < 0)
                 return r;
 
index 080d2802b4fc85d55d4bb4ed40716b7c6f34a5a4..ce7d54d7e81154c58a8885b899435c41fec76192 100644 (file)
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "kbd-util.h"
@@ -570,3 +571,39 @@ int find_language_fallback(const char *lang, char **ret) {
                 }
         }
 }
+
+int vconsole_serialize(const VCContext *vc, const X11Context *xc, char ***env) {
+        int r;
+
+        /* This function modifies the passed strv in place. */
+
+        assert(vc);
+        assert(xc);
+        assert(env);
+
+        r = strv_env_assign(env, "KEYMAP", empty_to_null(vc->keymap));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(env, "KEYMAP_TOGGLE", empty_to_null(vc->toggle));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(env, "XKBLAYOUT", empty_to_null(xc->layout));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(env, "XKBMODEL", empty_to_null(xc->model));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(env, "XKBVARIANT", empty_to_null(xc->variant));
+        if (r < 0)
+                return r;
+
+        r = strv_env_assign(env, "XKBOPTIONS", empty_to_null(xc->options));
+        if (r < 0)
+                return r;
+
+        return 0;
+}
index 2212a90ed622e48318dd1e9de7d9a684bd30e2e4..c9acc97b2984eeb3af24a149af400094dc825ad5 100644 (file)
@@ -38,3 +38,5 @@ typedef int (*X11VerifyCallback)(const X11Context *xc);
 
 int vconsole_convert_to_x11(const VCContext *vc, X11VerifyCallback verify, X11Context *ret);
 int x11_convert_to_vconsole(const X11Context *xc, VCContext *ret);
+
+int vconsole_serialize(const VCContext *vc, const X11Context *xc, char ***ret);