dcavalca / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
Zbigniew Jędrzejewski-Szmek 1cc3df
From baacdfcb2903450fe98842ffea96c0916753bfdb Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 1cc3df
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 1cc3df
Date: Tue, 1 Jul 2014 22:20:11 -0400
Zbigniew Jędrzejewski-Szmek 1cc3df
Subject: [PATCH] vconsole-setup: run setfont before loadkeys
Zbigniew Jędrzejewski-Szmek 1cc3df
Zbigniew Jędrzejewski-Szmek 1cc3df
https://bugs.freedesktop.org/show_bug.cgi?id=80685
Zbigniew Jędrzejewski-Szmek 1cc3df
(cherry picked from commit abee28c56d523e55751b0c007d0bf812cc285c00)
Zbigniew Jędrzejewski-Szmek 1cc3df
(cherry picked from commit 20a575e8935cf5d2d078bbe3acf21fff56f2345c)
Zbigniew Jędrzejewski-Szmek 1cc3df
---
Zbigniew Jędrzejewski-Szmek 1cc3df
 src/vconsole/vconsole-setup.c | 48 +++++++++++++++++++++----------------------
Zbigniew Jędrzejewski-Szmek 1cc3df
 1 file changed, 23 insertions(+), 25 deletions(-)
Zbigniew Jędrzejewski-Szmek 1cc3df
Zbigniew Jędrzejewski-Szmek 1cc3df
diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
Zbigniew Jędrzejewski-Szmek 1cc3df
index e0c4050611..25d15afd5c 100644
Zbigniew Jędrzejewski-Szmek 1cc3df
--- a/src/vconsole/vconsole-setup.c
Zbigniew Jędrzejewski-Szmek 1cc3df
+++ b/src/vconsole/vconsole-setup.c
Zbigniew Jędrzejewski-Szmek 1cc3df
@@ -238,12 +238,10 @@ static void font_copy_to_all_vcs(int fd) {
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
 int main(int argc, char **argv) {
Zbigniew Jędrzejewski-Szmek 1cc3df
         const char *vc;
Zbigniew Jędrzejewski-Szmek 1cc3df
-        char *vc_keymap = NULL;
Zbigniew Jędrzejewski-Szmek 1cc3df
-        char *vc_keymap_toggle = NULL;
Zbigniew Jędrzejewski-Szmek 1cc3df
-        char *vc_font = NULL;
Zbigniew Jędrzejewski-Szmek 1cc3df
-        char *vc_font_map = NULL;
Zbigniew Jędrzejewski-Szmek 1cc3df
-        char *vc_font_unimap = NULL;
Zbigniew Jędrzejewski-Szmek 1cc3df
-        int fd = -1;
Zbigniew Jędrzejewski-Szmek 1cc3df
+        _cleanup_free_ char
Zbigniew Jędrzejewski-Szmek 1cc3df
+                *vc_keymap = NULL, *vc_keymap_toggle = NULL,
Zbigniew Jędrzejewski-Szmek 1cc3df
+                *vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL;
Zbigniew Jędrzejewski-Szmek 1cc3df
+        _cleanup_close_ int fd = -1;
Zbigniew Jędrzejewski-Szmek 1cc3df
         bool utf8;
Zbigniew Jędrzejewski-Szmek 1cc3df
         pid_t font_pid = 0, keymap_pid = 0;
Zbigniew Jędrzejewski-Szmek 1cc3df
         bool font_copy = false;
Zbigniew Jędrzejewski-Szmek 1cc3df
@@ -265,12 +263,12 @@ int main(int argc, char **argv) {
Zbigniew Jędrzejewski-Szmek 1cc3df
         fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
Zbigniew Jędrzejewski-Szmek 1cc3df
         if (fd < 0) {
Zbigniew Jędrzejewski-Szmek 1cc3df
                 log_error("Failed to open %s: %m", vc);
Zbigniew Jędrzejewski-Szmek 1cc3df
-                goto finish;
Zbigniew Jędrzejewski-Szmek 1cc3df
+                return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek 1cc3df
         }
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
         if (!is_vconsole(fd)) {
Zbigniew Jędrzejewski-Szmek 1cc3df
                 log_error("Device %s is not a virtual console.", vc);
Zbigniew Jędrzejewski-Szmek 1cc3df
-                goto finish;
Zbigniew Jędrzejewski-Szmek 1cc3df
+                return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek 1cc3df
         }
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
         utf8 = is_locale_utf8();
Zbigniew Jędrzejewski-Szmek 1cc3df
@@ -305,27 +303,27 @@ int main(int argc, char **argv) {
Zbigniew Jędrzejewski-Szmek 1cc3df
         else
Zbigniew Jędrzejewski-Szmek 1cc3df
                 disable_utf8(fd);
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
-        r = EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek 1cc3df
-        if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 &&
Zbigniew Jędrzejewski-Szmek 1cc3df
-            font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
Zbigniew Jędrzejewski-Szmek 1cc3df
-                r = EXIT_SUCCESS;
Zbigniew Jędrzejewski-Szmek 1cc3df
-
Zbigniew Jędrzejewski-Szmek 1cc3df
-finish:
Zbigniew Jędrzejewski-Szmek 1cc3df
-        if (keymap_pid > 0)
Zbigniew Jędrzejewski-Szmek 1cc3df
-                wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
Zbigniew Jędrzejewski-Szmek 1cc3df
+        r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid);
Zbigniew Jędrzejewski-Szmek 1cc3df
+        if (r < 0) {
Zbigniew Jędrzejewski-Szmek 1cc3df
+                log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r));
Zbigniew Jędrzejewski-Szmek 1cc3df
+                return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek 1cc3df
+        }
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
-        if (font_pid > 0) {
Zbigniew Jędrzejewski-Szmek 1cc3df
+        if (font_pid > 0)
Zbigniew Jędrzejewski-Szmek 1cc3df
                 wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
Zbigniew Jędrzejewski-Szmek 1cc3df
-                if (font_copy)
Zbigniew Jędrzejewski-Szmek 1cc3df
-                        font_copy_to_all_vcs(fd);
Zbigniew Jędrzejewski-Szmek 1cc3df
+
Zbigniew Jędrzejewski-Szmek 1cc3df
+        r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid);
Zbigniew Jędrzejewski-Szmek 1cc3df
+        if (r < 0) {
Zbigniew Jędrzejewski-Szmek 1cc3df
+                log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r));
Zbigniew Jędrzejewski-Szmek 1cc3df
+                return EXIT_FAILURE;
Zbigniew Jędrzejewski-Szmek 1cc3df
         }
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
-        free(vc_keymap);
Zbigniew Jędrzejewski-Szmek 1cc3df
-        free(vc_font);
Zbigniew Jędrzejewski-Szmek 1cc3df
-        free(vc_font_map);
Zbigniew Jędrzejewski-Szmek 1cc3df
-        free(vc_font_unimap);
Zbigniew Jędrzejewski-Szmek 1cc3df
+        if (keymap_pid > 0)
Zbigniew Jędrzejewski-Szmek 1cc3df
+                wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
-        safe_close(fd);
Zbigniew Jędrzejewski-Szmek 1cc3df
+        /* Only copy the font when we started setfont successfully */
Zbigniew Jędrzejewski-Szmek 1cc3df
+        if (font_copy && font_pid > 0)
Zbigniew Jędrzejewski-Szmek 1cc3df
+                font_copy_to_all_vcs(fd);
Zbigniew Jędrzejewski-Szmek 1cc3df
 
Zbigniew Jędrzejewski-Szmek 1cc3df
-        return r;
Zbigniew Jędrzejewski-Szmek 1cc3df
+        return EXIT_SUCCESS;
Zbigniew Jędrzejewski-Szmek 1cc3df
 }