Commit a7d753e45a1871cb4ff4198adcd378c8ba2b1593

Ran Benita 2014-02-09T17:17:13

compat: steal interps and leds when merging if possible Signed-off-by: Ran Benita <ran234@gmail.com>

diff --git a/src/xkbcomp/compat.c b/src/xkbcomp/compat.c
index 64e3537..bd44f36 100644
--- a/src/xkbcomp/compat.c
+++ b/src/xkbcomp/compat.c
@@ -382,16 +382,28 @@ MergeIncludedCompatMaps(CompatInfo *into, CompatInfo *from,
         from->name = NULL;
     }
 
-    darray_foreach(si, from->interps) {
-        si->merge = (merge == MERGE_DEFAULT ? si->merge : merge);
-        if (!AddInterp(into, si, false))
-            into->errorCount++;
+    if (darray_empty(into->interps)) {
+        into->interps = from->interps;
+        darray_init(from->interps);
+    }
+    else {
+        darray_foreach(si, from->interps) {
+            si->merge = (merge == MERGE_DEFAULT ? si->merge : merge);
+            if (!AddInterp(into, si, false))
+                into->errorCount++;
+        }
     }
 
-    darray_foreach(ledi, from->leds) {
-        ledi->merge = (merge == MERGE_DEFAULT ? ledi->merge : merge);
-        if (!AddLedMap(into, ledi, false))
-            into->errorCount++;
+    if (darray_empty(into->leds)) {
+        into->leds = from->leds;
+        darray_init(from->leds);
+    }
+    else {
+        darray_foreach(ledi, from->leds) {
+            ledi->merge = (merge == MERGE_DEFAULT ? ledi->merge : merge);
+            if (!AddLedMap(into, ledi, false))
+                into->errorCount++;
+        }
     }
 }