summaryrefslogtreecommitdiff
path: root/src/locale/keymap-util.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-15 14:52:39 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-16 16:10:14 +0100
commitf08231fe07fe15933c3a2de399ac5deb22cf7901 (patch)
treef48ffe849579a95df26f4b4c5af02504cf89f25e /src/locale/keymap-util.c
parent6f8f8688e15e9e35bfc1f3a8b99974b6eaa99eb3 (diff)
downloadsystemd-f08231fe07fe15933c3a2de399ac5deb22cf7901.tar.gz
basic/env-util: add strv_env_assign() helper
Diffstat (limited to 'src/locale/keymap-util.c')
-rw-r--r--src/locale/keymap-util.c64
1 files changed, 12 insertions, 52 deletions
diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c
index d0d2d30a34..e8de1b789a 100644
--- a/src/locale/keymap-util.c
+++ b/src/locale/keymap-util.c
@@ -292,26 +292,12 @@ int locale_write_data(Context *c, char ***settings) {
/* Set values will be returned as strv in *settings on success. */
- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
- _cleanup_free_ char *t = NULL;
- char **u;
- const char *name;
-
- name = locale_variable_to_string(p);
- assert(name);
-
- if (isempty(c->locale[p]))
- continue;
-
- if (asprintf(&t, "%s=%s", name, c->locale[p]) < 0)
- return -ENOMEM;
-
- u = strv_env_set(l, t);
- if (!u)
- return -ENOMEM;
-
- strv_free_and_replace(l, u);
- }
+ for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+ if (!isempty(c->locale[p])) {
+ r = strv_env_assign(&l, locale_variable_to_string(p), c->locale[p]);
+ if (r < 0)
+ return r;
+ }
if (strv_isempty(l)) {
if (unlink("/etc/locale.conf") < 0)
@@ -342,39 +328,13 @@ int vconsole_write_data(Context *c) {
if (r < 0 && r != -ENOENT)
return r;
- if (isempty(c->vc_keymap))
- l = strv_env_unset(l, "KEYMAP");
- else {
- _cleanup_free_ char *s = NULL;
- char **u;
-
- s = strjoin("KEYMAP=", c->vc_keymap);
- if (!s)
- return -ENOMEM;
-
- u = strv_env_set(l, s);
- if (!u)
- return -ENOMEM;
-
- strv_free_and_replace(l, u);
- }
-
- if (isempty(c->vc_keymap_toggle))
- l = strv_env_unset(l, "KEYMAP_TOGGLE");
- else {
- _cleanup_free_ char *s = NULL;
- char **u;
-
- s = strjoin("KEYMAP_TOGGLE=", c->vc_keymap_toggle);
- if (!s)
- return -ENOMEM;
-
- u = strv_env_set(l, s);
- if (!u)
- return -ENOMEM;
+ r = strv_env_assign(&l, "KEYMAP", empty_to_null(c->vc_keymap));
+ if (r < 0)
+ return r;
- strv_free_and_replace(l, u);
- }
+ r = strv_env_assign(&l, "KEYMAP_TOGGLE", empty_to_null(c->vc_keymap_toggle));
+ if (r < 0)
+ return r;
if (strv_isempty(l)) {
if (unlink("/etc/vconsole.conf") < 0)