1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-24 21:34:08 +03:00

vconsole-setup: run setfont before loadkeys

https://bugs.freedesktop.org/show_bug.cgi?id=80685
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2014-07-01 22:20:11 -04:00
parent bce415edca
commit abee28c56d

View File

@ -238,12 +238,10 @@ static void font_copy_to_all_vcs(int fd) {
int main(int argc, char **argv) { int main(int argc, char **argv) {
const char *vc; const char *vc;
char *vc_keymap = NULL; _cleanup_free_ char
char *vc_keymap_toggle = NULL; *vc_keymap = NULL, *vc_keymap_toggle = NULL,
char *vc_font = NULL; *vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL;
char *vc_font_map = NULL; _cleanup_close_ int fd = -1;
char *vc_font_unimap = NULL;
int fd = -1;
bool utf8; bool utf8;
pid_t font_pid = 0, keymap_pid = 0; pid_t font_pid = 0, keymap_pid = 0;
bool font_copy = false; bool font_copy = false;
@ -265,12 +263,12 @@ int main(int argc, char **argv) {
fd = open_terminal(vc, O_RDWR|O_CLOEXEC); fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
if (fd < 0) { if (fd < 0) {
log_error("Failed to open %s: %m", vc); log_error("Failed to open %s: %m", vc);
goto finish; return EXIT_FAILURE;
} }
if (!is_vconsole(fd)) { if (!is_vconsole(fd)) {
log_error("Device %s is not a virtual console.", vc); log_error("Device %s is not a virtual console.", vc);
goto finish; return EXIT_FAILURE;
} }
utf8 = is_locale_utf8(); utf8 = is_locale_utf8();
@ -305,27 +303,27 @@ int main(int argc, char **argv) {
else else
disable_utf8(fd); disable_utf8(fd);
r = EXIT_FAILURE; r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid);
if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 && if (r < 0) {
font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0) log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r));
r = EXIT_SUCCESS; return EXIT_FAILURE;
}
if (font_pid > 0)
wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid);
if (r < 0) {
log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r));
return EXIT_FAILURE;
}
finish:
if (keymap_pid > 0) if (keymap_pid > 0)
wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
if (font_pid > 0) { /* Only copy the font when we started setfont successfully */
wait_for_terminate_and_warn(KBD_SETFONT, font_pid); if (font_copy && font_pid > 0)
if (font_copy)
font_copy_to_all_vcs(fd); font_copy_to_all_vcs(fd);
}
return EXIT_SUCCESS;
free(vc_keymap);
free(vc_font);
free(vc_font_map);
free(vc_font_unimap);
safe_close(fd);
return r;
} }