chiark / gitweb /
vconsole-setup: fix vconsole.conf vs. cmdline overriding logic
[elogind.git] / src / vconsole / vconsole-setup.c
index c1f662baa6e6c546526e437c8934049e568ec19d..efeae909d9dede83fda56ef48349fbd21accbfdc 100644 (file)
@@ -57,7 +57,7 @@ static int disable_utf8(int fd) {
         if (loop_write(fd, "\033%@", 3, false) < 0)
                 r = -errno;
 
-        k = write_one_line_file("/sys/module/vt/parameters/default_utf8", "0");
+        k = write_string_file("/sys/module/vt/parameters/default_utf8", "0");
         if (k < 0)
                 r = k;
 
@@ -89,7 +89,7 @@ static int enable_utf8(int fd) {
         if (loop_write(fd, "\033%G", 3, false) < 0)
                 r = -errno;
 
-        k = write_one_line_file("/sys/module/vt/parameters/default_utf8", "1");
+        k = write_string_file("/sys/module/vt/parameters/default_utf8", "1");
         if (k < 0)
                 r = k;
 
@@ -191,8 +191,8 @@ static void font_copy_to_all_vcs(int fd) {
 
         for (i = 1; i <= 15; i++) {
                 char vcname[16];
-                int vcfd;
                 struct console_font_op cfo;
+                int _cleanup_close_ vcfd = -1;
 
                 if (i == vcs.v_active)
                         continue;
@@ -212,8 +212,6 @@ static void font_copy_to_all_vcs(int fd) {
                 cfo.op = KD_FONT_OP_COPY;
                 cfo.height = vcs.v_active-1; /* tty1 == index 0 */
                 ioctl(vcfd, KDFONTOP, &cfo);
-
-                close_nointr_nofail(vcfd);
         }
 }
 
@@ -256,8 +254,18 @@ int main(int argc, char **argv) {
 
         utf8 = is_locale_utf8();
 
-        r = 0;
+        r = parse_env_file("/etc/vconsole.conf", NEWLINE,
+                           "KEYMAP", &vc_keymap,
+                           "KEYMAP_TOGGLE", &vc_keymap_toggle,
+                           "FONT", &vc_font,
+                           "FONT_MAP", &vc_font_map,
+                           "FONT_UNIMAP", &vc_font_unimap,
+                           NULL);
+
+        if (r < 0 && r != -ENOENT)
+                log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r));
 
+        /* Let the kernel command line override /etc/vconsole.conf */
         if (detect_container(NULL) <= 0) {
                 r = parse_env_file("/proc/cmdline", WHITESPACE,
                                    "vconsole.keymap", &vc_keymap,
@@ -271,21 +279,6 @@ int main(int argc, char **argv) {
                         log_warning("Failed to read /proc/cmdline: %s", strerror(-r));
         }
 
-        /* Hmm, nothing set on the kernel cmd line? Then let's
-         * try /etc/vconsole.conf */
-        if (r <= 0) {
-                r = parse_env_file("/etc/vconsole.conf", NEWLINE,
-                                   "KEYMAP", &vc_keymap,
-                                   "KEYMAP_TOGGLE", &vc_keymap_toggle,
-                                   "FONT", &vc_font,
-                                   "FONT_MAP", &vc_font_map,
-                                   "FONT_UNIMAP", &vc_font_unimap,
-                                   NULL);
-
-                if (r < 0 && r != -ENOENT)
-                        log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r));
-        }
-
         if (utf8)
                 enable_utf8(fd);
         else