vconsole: make sure we don't merge configuration settings from different sources

This commit is contained in:
Lennart Poettering 2010-09-21 03:16:28 +02:00
parent ce8a6aa1a0
commit 653ab83b18
2 changed files with 116 additions and 105 deletions

View file

@ -94,7 +94,6 @@ int locale_setup(void) {
/* Hmm, nothing set on the kernel cmd line? Then let's
* try /etc/locale */
if (r <= 0 &&
(r = parse_env_file("/etc/locale", NEWLINE,
"LANG", &variables[VARIABLE_LANG],
@ -125,6 +124,7 @@ int locale_setup(void) {
if (r != -ENOENT)
log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r));
}
#elif defined(TARGET_ARCH)
if (r <= 0 &&
(r = parse_env_file("/etc/rc.conf", NEWLINE,
@ -134,6 +134,7 @@ int locale_setup(void) {
if (r != -ENOENT)
log_warning("Failed to read /etc/rc.conf: %s", strerror(-r));
}
#elif defined(TARGET_GENTOO)
/* Gentoo's openrc expects locale variables in /etc/env.d/
* These files are later compiled by env-update into shell

View file

@ -40,7 +40,7 @@
#include "log.h"
#include "macro.h"
static bool is_console(int fd) {
static bool is_vconsole(int fd) {
unsigned char data[1];
data[0] = TIOCL_GETFGCONSOLE;
@ -163,14 +163,43 @@ int main(int argc, char **argv) {
goto finish;
}
if (!is_console(fd)) {
if (!is_vconsole(fd)) {
log_error("Device %s is not a virtual console.", vc);
goto finish;
}
if (!(utf8 = is_locale_utf8()))
disable_utf8(fd);
utf8 = is_locale_utf8();
if ((r = parse_env_file("/proc/cmdline", WHITESPACE,
#ifdef TARGET_FEDORA
"SYSFONT", &vc_font,
"KEYTABLE", &vc_keymap,
#endif
"vconsole.keymap", &vc_keymap,
"vconsole.font", &vc_font,
"vconsole.font.map", &vc_font_map,
"vconsole.font.unimap", &vc_font_unimap,
NULL)) < 0) {
if (r != -ENOENT)
log_warning("Failed to read /proc/cmdline: %s", strerror(-r));
}
/* Hmm, nothing set on the kernel cmd line? Then let's
* try /etc/vconsole */
if (r <= 0 &&
(r = parse_env_file("/etc/vconsole", NEWLINE,
"KEYMAP", &vc_keymap,
"FONT", &vc_font,
"FONT_MAP", &vc_font_map,
"FONT_UNIMAP", &vc_font_unimap,
NULL)) < 0) {
if (r != -ENOENT)
log_warning("Failed to read /etc/vconsole: %s", strerror(-r));
}
if (r <= 0) {
#ifdef TARGET_FEDORA
if ((r = parse_env_file("/etc/sysconfig/i18n", NEWLINE,
"SYSFONT", &vc_font,
@ -202,6 +231,7 @@ int main(int argc, char **argv) {
free(vc_keymap);
vc_keymap = t;
}
#elif defined(TARGET_ARCH)
if ((r = parse_env_file("/etc/rc.conf", NEWLINE,
"KEYMAP", &vc_keymap,
@ -211,6 +241,7 @@ int main(int argc, char **argv) {
if (r != -ENOENT)
log_warning("Failed to read /etc/rc.conf: %s", strerror(-r));
}
#elif defined(TARGET_GENTOO)
if ((r = parse_env_file("/etc/rc.conf", NEWLINE,
@ -219,9 +250,11 @@ int main(int argc, char **argv) {
if (r != -ENOENT)
log_warning("Failed to read /etc/rc.conf: %s", strerror(-r));
}
if (vc_unicode) {
int rc_unicode = parse_boolean(vc_unicode);
if (rc_unicode < 0)
int rc_unicode;
if ((rc_unicode = parse_boolean(vc_unicode)) < 0)
log_error("Unknown value for /etc/rc.conf unicode=%s", vc_unicode);
else {
if (rc_unicode && !utf8)
@ -233,9 +266,10 @@ int main(int argc, char **argv) {
}
}
/* /etc/conf.d/consolefont comments and gentoo documentation
* mention uppercase, but the actual contents are lowercase.
* the existing /etc/init.d/consolefont tries both
/* /etc/conf.d/consolefont comments and gentoo
* documentation mention uppercase, but the actual
* contents are lowercase. the existing
* /etc/init.d/consolefont tries both
*/
if ((r = parse_env_file("/etc/conf.d/consolefont", NEWLINE,
"CONSOLEFONT", &vc_font,
@ -257,33 +291,6 @@ int main(int argc, char **argv) {
log_warning("Failed to read /etc/conf.d/keymaps: %s", strerror(-r));
}
#endif
/* Override distribution-specific options with the
* distribution-independent configuration */
if ((r = parse_env_file("/etc/vconsole", NEWLINE,
"KEYMAP", &vc_keymap,
"FONT", &vc_font,
"FONT_MAP", &vc_font_map,
"FONT_UNIMAP", &vc_font_unimap,
NULL)) < 0) {
if (r != -ENOENT)
log_warning("Failed to read /etc/vconsole: %s", strerror(-r));
}
if ((r = parse_env_file("/proc/cmdline", WHITESPACE,
#ifdef TARGET_FEDORA
"SYSFONT", &vc_font,
"KEYTABLE", &vc_keymap,
#endif
"vconsole.keymap", &vc_keymap,
"vconsole.font", &vc_font,
"vconsole.font.map", &vc_font_map,
"vconsole.font.unimap", &vc_font_unimap,
NULL)) < 0) {
if (r != -ENOENT)
log_warning("Failed to read /proc/cmdline: %s", strerror(-r));
}
if (!vc_keymap)
@ -296,6 +303,9 @@ int main(int argc, char **argv) {
goto finish;
}
if (!utf8)
disable_utf8(fd);
if (load_keymap(vc, vc_keymap, utf8, &keymap_pid) >= 0 &&
load_font(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
r = EXIT_SUCCESS;