Commit fe4f990902c7cd8f395b9f3be14dc6e8cad7cae9

Ran Benita 2012-07-14T00:27:19

Move CompileKeymap into xkbcomp.c It's nicer to see the code where its used. Removes keymap.c. Signed-off-by: Ran Benita <ran234@gmail.com>

diff --git a/Makefile.am b/Makefile.am
index 23b4921..d0af6e5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -51,7 +51,6 @@ libxkbcommon_la_SOURCES = \
 	src/xkbcomp/indicators.h \
 	src/xkbcomp/keycodes.c \
 	src/xkbcomp/keycodes.h \
-	src/xkbcomp/keymap.c \
 	src/xkbcomp/keytypes.c \
 	src/xkbcomp/misc.c \
 	src/xkbcomp/parser.y \
diff --git a/src/xkbcomp/keymap.c b/src/xkbcomp/keymap.c
deleted file mode 100644
index 2904310..0000000
--- a/src/xkbcomp/keymap.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/************************************************************
- Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
-
- Permission to use, copy, modify, and distribute this
- software and its documentation for any purpose and without
- fee is hereby granted, provided that the above copyright
- notice appear in all copies and that both that copyright
- notice and this permission notice appear in supporting
- documentation, and that the name of Silicon Graphics not be
- used in advertising or publicity pertaining to distribution
- of the software without specific prior written permission.
- Silicon Graphics makes no representation about the suitability
- of this software for any purpose. It is provided "as is"
- without any express or implied warranty.
-
- SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
- GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
- THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
- ********************************************************/
-
-#include "xkbcomp-priv.h"
-#include "indicators.h"
-
-/**
- * Compile the given file and store the output in xkb.
- * @param file A list of XkbFiles, each denoting one type (e.g.
- * FILE_TYPE_KEYCODES, etc.)
- */
-struct xkb_keymap *
-CompileKeymap(struct xkb_context *ctx, XkbFile *file)
-{
-    unsigned have = 0;
-    bool ok;
-    enum xkb_file_type mainType;
-    const char *mainName;
-    struct xkb_keymap *keymap = XkbcAllocKeyboard(ctx);
-    struct {
-        XkbFile *keycodes;
-        XkbFile *types;
-        XkbFile *compat;
-        XkbFile *symbols;
-    } sections = { NULL };
-
-    if (!keymap)
-        return NULL;
-
-    mainType = file->type;
-    mainName = file->name ? file->name : "(unnamed)";
-
-    /*
-     * Other aggregate file types are converted to FILE_TYPE_KEYMAP
-     * in the parser.
-     */
-    if (mainType != FILE_TYPE_KEYMAP) {
-        ERROR("Cannot compile a %s file alone into a keymap\n",
-              XkbcFileTypeText(mainType));
-        goto err;
-    }
-
-    /* Check for duplicate entries in the input file */
-    for (file = (XkbFile *) file->defs; file; file = (XkbFile *) file->common.next)
-    {
-        if (have & file->type) {
-            ERROR("More than one %s section in a %s file\n",
-                   XkbcFileTypeText(file->type), XkbcFileTypeText(mainType));
-            ACTION("All sections after the first ignored\n");
-            continue;
-        }
-        else if (!(file->type & LEGAL_FILE_TYPES)) {
-            ERROR("Cannot define %s in a %s file\n",
-                   XkbcFileTypeText(file->type), XkbcFileTypeText(mainType));
-            continue;
-        }
-
-        switch (file->type) {
-        case FILE_TYPE_KEYCODES:
-            sections.keycodes = file;
-            break;
-        case FILE_TYPE_TYPES:
-            sections.types = file;
-            break;
-        case FILE_TYPE_SYMBOLS:
-            sections.symbols = file;
-            break;
-        case FILE_TYPE_COMPAT:
-            sections.compat = file;
-            break;
-        case FILE_TYPE_GEOMETRY:
-            continue;
-        default:
-            WSGO("Unknown file type %d\n", file->type);
-            ACTION("Ignored\n");
-            continue;
-        }
-
-        if (!file->topName || strcmp(file->topName, mainName) != 0) {
-            free(file->topName);
-            file->topName = strdup(mainName);
-        }
-
-        have |= file->type;
-    }
-
-    if (REQUIRED_FILE_TYPES & (~have)) {
-        enum xkb_file_type bit;
-        enum xkb_file_type missing;
-
-        missing = REQUIRED_FILE_TYPES & (~have);
-
-        for (bit = 1; missing != 0; bit <<= 1) {
-            if (missing & bit) {
-                ERROR("Required section %s missing from keymap\n",
-                      XkbcFileTypeText(bit));
-                missing &= ~bit;
-            }
-        }
-
-        goto err;
-    }
-
-    /* compile the sections we have in the file one-by-one, or fail. */
-    if (sections.keycodes == NULL ||
-        !CompileKeycodes(sections.keycodes, keymap, MERGE_OVERRIDE))
-    {
-        ERROR("Failed to compile keycodes\n");
-        goto err;
-    }
-    if (sections.types == NULL ||
-        !CompileKeyTypes(sections.types, keymap, MERGE_OVERRIDE))
-    {
-        ERROR("Failed to compile key types\n");
-        goto err;
-    }
-    if (sections.compat == NULL ||
-        !CompileCompatMap(sections.compat, keymap, MERGE_OVERRIDE))
-    {
-        ERROR("Failed to compile compat map\n");
-        goto err;
-    }
-    if (sections.symbols == NULL ||
-        !CompileSymbols(sections.symbols, keymap, MERGE_OVERRIDE))
-    {
-        ERROR("Failed to compile symbols\n");
-        goto err;
-    }
-
-    ok = UpdateModifiersFromCompat(keymap);
-    if (!ok)
-        goto err;
-
-    return keymap;
-
-err:
-    ACTION("Failed to compile keymap\n");
-    xkb_map_unref(keymap);
-    return NULL;
-}
diff --git a/src/xkbcomp/xkbcomp.c b/src/xkbcomp/xkbcomp.c
index 49f7d4c..48e02bc 100644
--- a/src/xkbcomp/xkbcomp.c
+++ b/src/xkbcomp/xkbcomp.c
@@ -63,15 +63,137 @@ keymap_file_from_components(struct xkb_context *ctx,
                          &keycodes->common, 0);
 }
 
+/**
+ * Compile the given file and store the output in keymap.
+ * @param file A list of XkbFiles, each denoting one type (e.g.
+ * FILE_TYPE_KEYCODES, etc.)
+ */
 static struct xkb_keymap *
 compile_keymap(struct xkb_context *ctx, XkbFile *file)
 {
-    struct xkb_keymap *keymap;
+    unsigned have = 0;
+    bool ok;
+    enum xkb_file_type main_type;
+    const char *main_name;
+    struct xkb_keymap *keymap = XkbcAllocKeyboard(ctx);
+    struct {
+        XkbFile *keycodes;
+        XkbFile *types;
+        XkbFile *compat;
+        XkbFile *symbols;
+    } sections = { NULL };
+
+    if (!keymap)
+        return NULL;
+
+    main_type = file->type;
+    main_name = file->name ? file->name : "(unnamed)";
+
+    /*
+     * Other aggregate file types are converted to FILE_TYPE_KEYMAP
+     * in the parser.
+     */
+    if (main_type != FILE_TYPE_KEYMAP) {
+        ERROR("Cannot compile a %s file alone into a keymap\n",
+              XkbcFileTypeText(main_type));
+        goto err;
+    }
+
+    /* Check for duplicate entries in the input file */
+    for (file = (XkbFile *)file->defs; file;
+         file = (XkbFile *)file->common.next) {
+        if (have & file->type) {
+            ERROR("More than one %s section in a %s file\n",
+                   XkbcFileTypeText(file->type), XkbcFileTypeText(main_type));
+            ACTION("All sections after the first ignored\n");
+            continue;
+        }
+        else if (!(file->type & LEGAL_FILE_TYPES)) {
+            ERROR("Cannot define %s in a %s file\n",
+                   XkbcFileTypeText(file->type), XkbcFileTypeText(main_type));
+            continue;
+        }
+
+        switch (file->type) {
+        case FILE_TYPE_KEYCODES:
+            sections.keycodes = file;
+            break;
+        case FILE_TYPE_TYPES:
+            sections.types = file;
+            break;
+        case FILE_TYPE_SYMBOLS:
+            sections.symbols = file;
+            break;
+        case FILE_TYPE_COMPAT:
+            sections.compat = file;
+            break;
+        default:
+            continue;
+        }
+
+        if (!file->topName || strcmp(file->topName, main_name) != 0) {
+            free(file->topName);
+            file->topName = strdup(main_name);
+        }
+
+        have |= file->type;
+    }
+
+    if (REQUIRED_FILE_TYPES & (~have)) {
+        enum xkb_file_type bit;
+        enum xkb_file_type missing;
+
+        missing = REQUIRED_FILE_TYPES & (~have);
+
+        for (bit = 1; missing != 0; bit <<= 1) {
+            if (missing & bit) {
+                ERROR("Required section %s missing from keymap\n",
+                      XkbcFileTypeText(bit));
+                missing &= ~bit;
+            }
+        }
 
-    keymap = CompileKeymap(ctx, file);
+        goto err;
+    }
+
+    /* compile the sections we have in the file one-by-one, or fail. */
+    if (sections.keycodes == NULL ||
+        !CompileKeycodes(sections.keycodes, keymap, MERGE_OVERRIDE))
+    {
+        ERROR("Failed to compile keycodes\n");
+        goto err;
+    }
+    if (sections.types == NULL ||
+        !CompileKeyTypes(sections.types, keymap, MERGE_OVERRIDE))
+    {
+        ERROR("Failed to compile key types\n");
+        goto err;
+    }
+    if (sections.compat == NULL ||
+        !CompileCompatMap(sections.compat, keymap, MERGE_OVERRIDE))
+    {
+        ERROR("Failed to compile compat map\n");
+        goto err;
+    }
+    if (sections.symbols == NULL ||
+        !CompileSymbols(sections.symbols, keymap, MERGE_OVERRIDE))
+    {
+        ERROR("Failed to compile symbols\n");
+        goto err;
+    }
+
+    ok = UpdateModifiersFromCompat(keymap);
+    if (!ok)
+        goto err;
 
     FreeXKBFile(file);
     return keymap;
+
+err:
+    ACTION("Failed to compile keymap\n");
+    xkb_map_unref(keymap);
+    FreeXKBFile(file);
+    return NULL;
 }
 
 struct xkb_keymap *
diff --git a/src/xkbcomp/xkbcomp.h b/src/xkbcomp/xkbcomp.h
index 8cd3fe5..eaf2d81 100644
--- a/src/xkbcomp/xkbcomp.h
+++ b/src/xkbcomp/xkbcomp.h
@@ -246,9 +246,6 @@ typedef struct _XkbFile
     unsigned flags;
 } XkbFile;
 
-extern struct xkb_keymap *
-CompileKeymap(struct xkb_context *ctx, XkbFile *file);
-
 extern bool
 CompileKeycodes(XkbFile *file, struct xkb_keymap *keymap,
                 enum merge_mode merge);