return isempty(s) || streq(s, "-") ? NULL : s;
}
+static const char* systemd_kbd_model_map(void) {
+ const char* s;
+
+ s = getenv("SYSTEMD_KBD_MODEL_MAP");
+ if (s)
+ return s;
+
+ return SYSTEMD_KBD_MODEL_MAP;
+}
+
+static const char* systemd_language_fallback_map(void) {
+ const char* s;
+
+ s = getenv("SYSTEMD_LANGUAGE_FALLBACK_MAP");
+ if (s)
+ return s;
+
+ return SYSTEMD_LANGUAGE_FALLBACK_MAP;
+}
+
static void context_free_x11(Context *c) {
c->x11_layout = mfree(c->x11_layout);
c->x11_options = mfree(c->x11_options);
}
int vconsole_convert_to_x11(Context *c) {
+ const char *map;
int modified = -1;
+ map = systemd_kbd_model_map();
+
if (isempty(c->vc_keymap)) {
modified =
!isempty(c->x11_layout) ||
_cleanup_fclose_ FILE *f = NULL;
unsigned n = 0;
- f = fopen(SYSTEMD_KBD_MODEL_MAP, "re");
+ f = fopen(map, "re");
if (!f)
return -errno;
_cleanup_strv_free_ char **a = NULL;
int r;
- r = read_next_mapping(SYSTEMD_KBD_MODEL_MAP, 5, UINT_MAX, f, &n, &a);
+ r = read_next_mapping(map, 5, UINT_MAX, f, &n, &a);
if (r < 0)
return r;
if (r == 0)
}
int find_legacy_keymap(Context *c, char **new_keymap) {
- _cleanup_fclose_ FILE *f;
+ const char *map;
+ _cleanup_fclose_ FILE *f = NULL;
unsigned n = 0;
unsigned best_matching = 0;
int r;
assert(!isempty(c->x11_layout));
- f = fopen(SYSTEMD_KBD_MODEL_MAP, "re");
+ map = systemd_kbd_model_map();
+
+ f = fopen(map, "re");
if (!f)
return -errno;
_cleanup_strv_free_ char **a = NULL;
unsigned matching = 0;
- r = read_next_mapping(SYSTEMD_KBD_MODEL_MAP, 5, UINT_MAX, f, &n, &a);
+ r = read_next_mapping(map, 5, UINT_MAX, f, &n, &a);
if (r < 0)
return r;
if (r == 0)
}
int find_language_fallback(const char *lang, char **language) {
+ const char *map;
_cleanup_fclose_ FILE *f = NULL;
unsigned n = 0;
assert(lang);
assert(language);
- f = fopen(SYSTEMD_LANGUAGE_FALLBACK_MAP, "re");
+ map = systemd_language_fallback_map();
+
+ f = fopen(map, "re");
if (!f)
return -errno;
_cleanup_strv_free_ char **a = NULL;
int r;
- r = read_next_mapping(SYSTEMD_LANGUAGE_FALLBACK_MAP, 2, 2, f, &n, &a);
+ r = read_next_mapping(map, 2, 2, f, &n, &a);
if (r <= 0)
return r;
static void test_find_language_fallback(void) {
_cleanup_free_ char *ans = NULL, *ans2 = NULL;
- int r;
- log_info("/* %s */", __func__);
+ log_info("/*** %s ***/", __func__);
- r = find_language_fallback("foobar", &ans);
- if (r == -ENOENT) {
- log_info_errno(r, "Skipping language fallback tests: %m");
- return;
- }
- assert_se(r == 0);
+ assert_se(find_language_fallback("foobar", &ans) == 0);
assert_se(ans == NULL);
assert_se(find_language_fallback("csb", &ans) == 0);
_cleanup_free_ char *ans = NULL, *ans2 = NULL;
int r;
- log_info("/* %s */", __func__);
+ log_info("/*** %s ***/", __func__);
assert_se(find_converted_keymap("pl", "foobar", &ans) == 0);
assert_se(ans == NULL);
r = find_converted_keymap("pl", NULL, &ans);
if (r == 0) {
- log_info_errno(r, "Skipping find_converted_keymap tests: %m");
+ log_info("Skipping rest of %s: keymaps are not installed", __func__);
return;
}
+
assert_se(r == 1);
assert_se(streq(ans, "pl"));
static void test_find_legacy_keymap(void) {
Context c = {};
_cleanup_free_ char *ans = NULL, *ans2 = NULL;
- int r;
- log_info("/* %s */", __func__);
+ log_info("/*** %s ***/", __func__);
c.x11_layout = (char*) "foobar";
- r = find_legacy_keymap(&c, &ans);
- if (r == -ENOENT) {
- log_info_errno(r, "Skipping test_legacy_keymap tests: %m");
- return;
- }
- assert_se(r == 0);
+ assert_se(find_legacy_keymap(&c, &ans) == 0);
assert_se(ans == NULL);
c.x11_layout = (char*) "pl";
static void test_vconsole_convert_to_x11(void) {
_cleanup_(context_free) Context c = {};
- log_info("/* %s */", __func__);
+ log_info("/*** %s ***/", __func__);
log_info("/* test emptying first (:) */");
assert_se(free_and_strdup(&c.x11_layout, "foo") >= 0);
static void test_x11_convert_to_vconsole(void) {
_cleanup_(context_free) Context c = {};
+ int r;
- log_info("/* %s */", __func__);
+ log_info("/*** %s ***/", __func__);
log_info("/* test emptying first (:) */");
assert_se(free_and_strdup(&c.vc_keymap, "foobar") >= 0);
log_info("/* test with known variant, new mapping (es:dvorak) */");
assert_se(free_and_strdup(&c.x11_variant, "dvorak") >= 0);
- assert_se(x11_convert_to_vconsole(&c) == 1);
+ r = x11_convert_to_vconsole(&c);
+ if (r == 0) {
+ log_info("Skipping rest of %s: keymaps are not installed", __func__);
+ return;
+ }
+
+ assert_se(r == 1);
assert_se(streq(c.vc_keymap, "es-dvorak"));
log_info("/* test with old mapping (fr:latin9) */");