X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Fvconsole%2Fvconsole-setup.c;h=e2ba8a0138607d1d4a17db5b7e0c2b505fff1643;hb=0a1beeb64207eaa88ab9236787b1cbc2f704ae14;hp=e0c40506112d7aba92bfd8a913c28177aedd0057;hpb=ff452e76e2c0f89a32542b7179bb2fd538335933;p=elogind.git diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c index e0c405061..e2ba8a013 100644 --- a/src/vconsole/vconsole-setup.c +++ b/src/vconsole/vconsole-setup.c @@ -62,7 +62,7 @@ static int disable_utf8(int fd) { r = k; if (r < 0) - log_warning("Failed to disable UTF-8: %s", strerror(-r)); + log_warning_errno(-r, "Failed to disable UTF-8: %m"); return r; } @@ -94,7 +94,7 @@ static int enable_utf8(int fd) { r = k; if (r < 0) - log_warning("Failed to enable UTF-8: %s", strerror(-r)); + log_warning_errno(-r, "Failed to enable UTF-8: %m"); return r; } @@ -212,15 +212,15 @@ static void font_copy_to_all_vcs(int fd) { /* copy font from active VT, where the font was uploaded to */ cfo.op = KD_FONT_OP_COPY; cfo.height = vcs.v_active-1; /* tty1 == index 0 */ - ioctl(vcfd, KDFONTOP, &cfo); + (void) ioctl(vcfd, KDFONTOP, &cfo); /* copy map of 8bit chars */ if (ioctl(fd, GIO_SCRNMAP, map8) >= 0) - ioctl(vcfd, PIO_SCRNMAP, map8); + (void) ioctl(vcfd, PIO_SCRNMAP, map8); /* copy map of 8bit chars -> 16bit Unicode values */ if (ioctl(fd, GIO_UNISCRNMAP, map16) >= 0) - ioctl(vcfd, PIO_UNISCRNMAP, map16); + (void) ioctl(vcfd, PIO_UNISCRNMAP, map16); /* copy unicode translation table */ /* unimapd is a ushort count and a pointer to an @@ -230,20 +230,18 @@ static void font_copy_to_all_vcs(int fd) { if (ioctl(fd, GIO_UNIMAP, &unimapd) >= 0) { struct unimapinit adv = { 0, 0, 0 }; - ioctl(vcfd, PIO_UNIMAPCLR, &adv); - ioctl(vcfd, PIO_UNIMAP, &unimapd); + (void) ioctl(vcfd, PIO_UNIMAPCLR, &adv); + (void) ioctl(vcfd, PIO_UNIMAP, &unimapd); } } } int main(int argc, char **argv) { const char *vc; - char *vc_keymap = NULL; - char *vc_keymap_toggle = NULL; - char *vc_font = NULL; - char *vc_font_map = NULL; - char *vc_font_unimap = NULL; - int fd = -1; + _cleanup_free_ char + *vc_keymap = NULL, *vc_keymap_toggle = NULL, + *vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL; + _cleanup_close_ int fd = -1; bool utf8; pid_t font_pid = 0, keymap_pid = 0; bool font_copy = false; @@ -265,12 +263,12 @@ int main(int argc, char **argv) { fd = open_terminal(vc, O_RDWR|O_CLOEXEC); if (fd < 0) { log_error("Failed to open %s: %m", vc); - goto finish; + return EXIT_FAILURE; } if (!is_vconsole(fd)) { log_error("Device %s is not a virtual console.", vc); - goto finish; + return EXIT_FAILURE; } utf8 = is_locale_utf8(); @@ -284,7 +282,7 @@ int main(int argc, char **argv) { NULL); if (r < 0 && r != -ENOENT) - log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r)); + log_warning_errno(-r, "Failed to read /etc/vconsole.conf: %m"); /* Let the kernel command line override /etc/vconsole.conf */ if (detect_container(NULL) <= 0) { @@ -297,7 +295,7 @@ int main(int argc, char **argv) { NULL); if (r < 0 && r != -ENOENT) - log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); + log_warning_errno(-r, "Failed to read /proc/cmdline: %m"); } if (utf8) @@ -305,27 +303,27 @@ int main(int argc, char **argv) { else disable_utf8(fd); - r = EXIT_FAILURE; - if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 && - font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0) - r = EXIT_SUCCESS; - -finish: - if (keymap_pid > 0) - wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); + r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid); + if (r < 0) { + log_error_errno(-r, "Failed to start " KBD_SETFONT ": %m"); + return EXIT_FAILURE; + } - if (font_pid > 0) { + if (font_pid > 0) wait_for_terminate_and_warn(KBD_SETFONT, font_pid); - if (font_copy) - font_copy_to_all_vcs(fd); + + r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid); + if (r < 0) { + log_error_errno(-r, "Failed to start " KBD_LOADKEYS ": %m"); + return EXIT_FAILURE; } - free(vc_keymap); - free(vc_font); - free(vc_font_map); - free(vc_font_unimap); + if (keymap_pid > 0) + wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); - safe_close(fd); + /* Only copy the font when we started setfont successfully */ + if (font_copy && font_pid > 0) + font_copy_to_all_vcs(fd); - return r; + return EXIT_SUCCESS; }