Zbigniew Jędrzejewski-Szmek 62fe94
From 81fd105a5f9762fa2f2e42bc949876e32b3a126f Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Wed, 3 Sep 2014 22:55:52 -0400
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] localed: introduce helper function to simplify matching
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/locale/localed.c | 22 ++++++++++------------
Zbigniew Jędrzejewski-Szmek 62fe94
 1 file changed, 10 insertions(+), 12 deletions(-)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/locale/localed.c b/src/locale/localed.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 777da623f6..f3e1589a45 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/locale/localed.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/locale/localed.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -101,6 +101,12 @@ static void free_and_replace(char **s, char *v) {
Zbigniew Jędrzejewski-Szmek 62fe94
         *s = v;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+static bool startswith_comma(const char *s, const char *prefix) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        const char *t;
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        return s && (t = startswith(s, prefix)) && (*t == ',');
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
 static void context_free_x11(Context *c) {
Zbigniew Jędrzejewski-Szmek 62fe94
         free_and_replace(&c->x11_layout, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
         free_and_replace(&c->x11_model, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -679,26 +685,18 @@ static int find_legacy_keymap(Context *c, char **new_keymap) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         /* If we got an exact match, this is best */
Zbigniew Jędrzejewski-Szmek 62fe94
                         matching = 10;
Zbigniew Jędrzejewski-Szmek 62fe94
                 else {
Zbigniew Jędrzejewski-Szmek 62fe94
-                        size_t x;
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-                        x = strcspn(c->x11_layout, ",");
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
                         /* We have multiple X layouts, look for an
Zbigniew Jędrzejewski-Szmek 62fe94
                          * entry that matches our key with everything
Zbigniew Jędrzejewski-Szmek 62fe94
                          * but the first layout stripped off. */
Zbigniew Jędrzejewski-Szmek 62fe94
-                        if (x > 0 &&
Zbigniew Jędrzejewski-Szmek 62fe94
-                            strlen(a[1]) == x &&
Zbigniew Jędrzejewski-Szmek 62fe94
-                            strneq(c->x11_layout, a[1], x))
Zbigniew Jędrzejewski-Szmek 62fe94
+                        if (startswith_comma(c->x11_layout, a[1]))
Zbigniew Jędrzejewski-Szmek 62fe94
                                 matching = 5;
Zbigniew Jędrzejewski-Szmek 62fe94
                         else  {
Zbigniew Jędrzejewski-Szmek 62fe94
-                                size_t w;
Zbigniew Jędrzejewski-Szmek 62fe94
+                                char *x;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                                 /* If that didn't work, strip off the
Zbigniew Jędrzejewski-Szmek 62fe94
                                  * other layouts from the entry, too */
Zbigniew Jędrzejewski-Szmek 62fe94
-                                w = strcspn(a[1], ",");
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-                                if (x > 0 && x == w &&
Zbigniew Jędrzejewski-Szmek 62fe94
-                                    memcmp(c->x11_layout, a[1], x) == 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                                x = strndupa(a[1], strcspn(a[1], ","));
Zbigniew Jędrzejewski-Szmek 62fe94
+                                if (startswith_comma(c->x11_layout, x))
Zbigniew Jędrzejewski-Szmek 62fe94
                                         matching = 1;
Zbigniew Jędrzejewski-Szmek 62fe94
                         }
Zbigniew Jędrzejewski-Szmek 62fe94
                 }