X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fvconsole-setup.c;h=1952dfb0f154b0bd11fc6b363c972b8db31f6f73;hp=9e5d65da657ecfbb4d7664673a24b6fc86145be5;hb=81ab0d3c65206140fffafefa6d14e8494edc44cb;hpb=fd5bf055acae23a5ff0fcce8425675703f7bf5e0 diff --git a/src/vconsole-setup.c b/src/vconsole-setup.c index 9e5d65da6..1952dfb0f 100644 --- a/src/vconsole-setup.c +++ b/src/vconsole-setup.c @@ -78,8 +78,8 @@ static int disable_utf8(int fd) { return r; } -static int load_keymap(const char *vc, const char *map, bool utf8, pid_t *_pid) { - const char *args[7]; +static int load_keymap(const char *vc, const char *map, const char *map_toggle, bool utf8, pid_t *_pid) { + const char *args[8]; int i = 0; pid_t pid; @@ -90,6 +90,8 @@ static int load_keymap(const char *vc, const char *map, bool utf8, pid_t *_pid) if (utf8) args[i++] = "-u"; args[i++] = map; + if (map_toggle) + args[i++] = map_toggle; args[i++] = NULL; if ((pid = fork()) < 0) { @@ -113,11 +115,11 @@ static int load_font(const char *vc, const char *font, const char *map, const ch args[i++] = "-C"; args[i++] = vc; args[i++] = font; - if (map && map[0] != '\0') { + if (map) { args[i++] = "-m"; args[i++] = map; } - if (unimap && unimap[0] != '\0') { + if (unimap) { args[i++] = "-u"; args[i++] = unimap; } @@ -138,6 +140,7 @@ static int load_font(const char *vc, const char *font, const char *map, const ch 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; @@ -176,6 +179,7 @@ int main(int argc, char **argv) { "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, @@ -190,6 +194,7 @@ int main(int argc, char **argv) { 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, @@ -262,6 +267,37 @@ int main(int argc, char **argv) { log_warning("Failed to read /etc/rc.conf: %s", strerror(-r)); } +#elif defined(TARGET_FRUGALWARE) + if ((r = parse_env_file("/etc/sysconfig/keymap", NEWLINE, + "keymap", &vc_keymap, + NULL)) < 0) { + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/keymap: %s", strerror(-r)); + } + if ((r = parse_env_file("/etc/sysconfig/font", NEWLINE, + "font", &vc_font, + NULL)) < 0) { + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/font: %s", strerror(-r)); + } + +#elif defined(TARGET_ALTLINUX) + if ((r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE, + "KEYTABLE", &vc_keymap, + NULL)) < 0) { + + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/keyboard: %s", strerror(-r)); + } + + if ((r = parse_env_file("/etc/sysconfig/consolefont", NEWLINE, + "SYSFONT", &vc_font, + NULL)) < 0) { + + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/console: %s", strerror(-r)); + } + #elif defined(TARGET_GENTOO) if ((r = parse_env_file("/etc/rc.conf", NEWLINE, "unicode", &vc_unicode, @@ -325,7 +361,7 @@ int main(int argc, char **argv) { if (!utf8) disable_utf8(fd); - if (load_keymap(vc, vc_keymap, utf8, &keymap_pid) >= 0 && + if (load_keymap(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 && load_font(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0) r = EXIT_SUCCESS;