X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fvconsole-setup.c;h=67fb7b61002dcdcfb2352f9d51f85072ff5c445a;hp=1952dfb0f154b0bd11fc6b363c972b8db31f6f73;hb=03aea2aecd6f9d2193af5d6cf866063da8d47ad5;hpb=a338bab5d0603a179befce062bc6fc8a6521a232 diff --git a/src/vconsole-setup.c b/src/vconsole-setup.c index 1952dfb0f..67fb7b610 100644 --- a/src/vconsole-setup.c +++ b/src/vconsole-setup.c @@ -146,6 +146,9 @@ int main(int argc, char **argv) { char *vc_font_unimap = NULL; #ifdef TARGET_GENTOO char *vc_unicode = NULL; +#endif +#ifdef TARGET_MANDRIVA + char *vc_keytable = NULL; #endif int fd = -1; bool utf8; @@ -173,21 +176,22 @@ int main(int argc, char **argv) { utf8 = is_locale_utf8(); - if ((r = parse_env_file("/proc/cmdline", WHITESPACE, + if (detect_container(NULL) <= 0) + if ((r = parse_env_file("/proc/cmdline", WHITESPACE, #ifdef TARGET_FEDORA - "SYSFONT", &vc_font, - "KEYTABLE", &vc_keymap, + "SYSFONT", &vc_font, + "KEYTABLE", &vc_keymap, #endif - "vconsole.keymap", &vc_keymap, - "vconsole.keymap.toggle", &vc_keymap_toggle, - "vconsole.font", &vc_font, - "vconsole.font.map", &vc_font_map, - "vconsole.font.unimap", &vc_font_unimap, - NULL)) < 0) { + "vconsole.keymap", &vc_keymap, + "vconsole.keymap.toggle", &vc_keymap_toggle, + "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 (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.conf */ @@ -345,6 +349,64 @@ int main(int argc, char **argv) { if (r != -ENOENT) log_warning("Failed to read /etc/conf.d/keymaps: %s", strerror(-r)); } + +#elif defined(TARGET_MANDRIVA) + + if ((r = parse_env_file("/etc/sysconfig/i18n", NEWLINE, + "SYSFONT", &vc_font, + "SYSFONTACM", &vc_font_map, + "UNIMAP", &vc_font_unimap, + NULL)) < 0) { + + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r)); + } + + if ((r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE, + "KEYTABLE", &vc_keytable, + "KEYMAP", &vc_keymap, + "UNIKEYTABLE", &vc_keymap, + "GRP_TOGGLE", &vc_keymap_toggle, + NULL)) < 0) { + + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r)); + } + + if (vc_keytable) { + if (vc_keymap) + free(vc_keymap); + if (utf8) { + if (endswith(vc_keytable, ".uni") || strstr(vc_keytable, ".uni.")) + vc_keymap = strdup(vc_keytable); + else { + char *s; + if ((s = strstr(vc_keytable, ".map"))) + vc_keytable[s-vc_keytable+1] = '\0'; + vc_keymap = strappend(vc_keytable, ".uni"); + } + } else + vc_keymap = strdup(vc_keytable); + + free(vc_keytable); + + if (!vc_keymap) { + log_error("Out of memory."); + goto finish; + } + } + + if (access("/etc/sysconfig/console/default.kmap", F_OK) >= 0) { + char *t; + + if (!(t = strdup("/etc/sysconfig/console/default.kmap"))) { + log_error("Out of memory."); + goto finish; + } + + free(vc_keymap); + vc_keymap = t; + } #endif }