Handle XkbFiles without a name
authorDaniel Stone <daniel@fooishbar.org>
Sat, 10 Mar 2012 13:54:03 +0000 (13:54 +0000)
committerDaniel Stone <daniel@fooishbar.org>
Sat, 10 Mar 2012 13:54:03 +0000 (13:54 +0000)
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
src/xkbcomp/keymap.c

index 76e2bc8..fd973b0 100644 (file)
@@ -60,7 +60,7 @@ CompileKeymap(XkbFile *file, unsigned merge)
 
     memset(&sections, 0, sizeof(sections));
     mainType = file->type;
-    mainName = file->name;
+    mainName = file->name ? file->name : "(unnamed)";
     switch (mainType)
     {
     case XkmSemanticsFile:
@@ -86,11 +86,6 @@ CompileKeymap(XkbFile *file, unsigned merge)
     /* Check for duplicate entries in the input file */
     for (file = (XkbFile *) file->defs; file; file = (XkbFile *) file->common.next)
     {
-        if (file->topName != mainName) {
-            free(file->topName);
-            file->topName = strdup(mainName);
-        }
-
         if ((have & (1 << file->type)) != 0)
         {
             ERROR("More than one %s section in a %s file\n",
@@ -139,6 +134,11 @@ CompileKeymap(XkbFile *file, unsigned merge)
             continue;
         }
 
+        if (!file->topName || strcmp(file->topName, mainName) != 0) {
+            free(file->topName);
+            file->topName = strdup(mainName);
+        }
+
         have |= (1 << file->type);
     }