60 lines
2.3 KiB
Diff
60 lines
2.3 KiB
Diff
From e8acb2eb8186d0c46059c0a18d328839886ccd36 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
Date: Sun, 29 May 2016 23:36:44 -0400
|
|
Subject: [PATCH] keymap-util: also "convert" 'ru' to 'ru'
|
|
|
|
As discovered by Adam Williamson in
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1333998#c32, after the changes in
|
|
81fd105a5f9 we would only match compound layouts, i.e. a comma would be
|
|
required after 'ru' to match. This seems wrong, and we should match single
|
|
layouts like too. So 'ru', 'ru,us' now both match.
|
|
|
|
startswith_comma is changed to not require a comma, i.e. check that the prefix
|
|
matches until a comma or the end of the string. Note that startswith_comma is
|
|
called twice. At the first site, we check that strings are not equal
|
|
beforehand, so this change to startswith_comma has no effect. At the second
|
|
site, it does have an effect, as described above.
|
|
|
|
(This commit is cherry-picked from
|
|
https://github.com/systemd/systemd/pull/3384.)
|
|
---
|
|
src/locale/localed.c | 10 +++++++---
|
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/locale/localed.c b/src/locale/localed.c
|
|
index a2fc6af4c9..62f8341cb9 100644
|
|
--- a/src/locale/localed.c
|
|
+++ b/src/locale/localed.c
|
|
@@ -101,9 +101,11 @@ static const char* nonempty(const char *s) {
|
|
}
|
|
|
|
static bool startswith_comma(const char *s, const char *prefix) {
|
|
- const char *t;
|
|
+ s = startswith(s, prefix);
|
|
+ if (!s)
|
|
+ return false;
|
|
|
|
- return s && (t = startswith(s, prefix)) && (*t == ',');
|
|
+ return *s == ',' || *s == '\0';
|
|
}
|
|
|
|
static void context_free_x11(Context *c) {
|
|
@@ -681,6 +683,8 @@ static int find_legacy_keymap(Context *c, char **new_keymap) {
|
|
unsigned best_matching = 0;
|
|
int r;
|
|
|
|
+ assert(c->x11_layout);
|
|
+
|
|
f = fopen(SYSTEMD_KBD_MODEL_MAP, "re");
|
|
if (!f)
|
|
return -errno;
|
|
@@ -696,7 +700,7 @@ static int find_legacy_keymap(Context *c, char **new_keymap) {
|
|
break;
|
|
|
|
/* Determine how well matching this entry is */
|
|
- if (streq_ptr(c->x11_layout, a[1]))
|
|
+ if (streq(c->x11_layout, a[1]))
|
|
/* If we got an exact match, this is best */
|
|
matching = 10;
|
|
else {
|