973c76f
From c2e072d4eeeaa15bfe4b963617688a1f25230ab7 Mon Sep 17 00:00:00 2001
15e2ab3
From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= <krh@bitplanet.net>
15e2ab3
Date: Tue, 9 Apr 2013 17:11:03 -0400
973c76f
Subject: [PATCH 03/39] xkb: Split out code to start and finish xkbcomp
15e2ab3
15e2ab3
Using the context struct from previous commit, we can now split out
15e2ab3
code to start xkbcomp and to finish and clean up after it.
15e2ab3
15e2ab3
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
15e2ab3
---
15e2ab3
 xkb/ddxLoad.c | 39 ++++++++++++++++++++++++++++-----------
15e2ab3
 1 file changed, 28 insertions(+), 11 deletions(-)
15e2ab3
15e2ab3
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
15e2ab3
index 5da3a35..001ff46 100644
15e2ab3
--- a/xkb/ddxLoad.c
15e2ab3
+++ b/xkb/ddxLoad.c
15e2ab3
@@ -99,10 +99,7 @@ typedef struct XkbCompContext {
15e2ab3
 } XkbCompContextRec, *XkbCompContextPtr;
15e2ab3
 
15e2ab3
 static Bool
15e2ab3
-XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
15e2ab3
-                           XkbComponentNamesPtr names,
15e2ab3
-                           unsigned want,
15e2ab3
-                           unsigned need, XkbCompContextPtr ctx)
15e2ab3
+StartXkbComp(XkbCompContextPtr ctx)
15e2ab3
 {
15e2ab3
     char xkm_output_dir[PATH_MAX];
15e2ab3
 
15e2ab3
@@ -168,14 +165,15 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
15e2ab3
     ctx->out = fopen(ctx->tmpname, "w");
15e2ab3
 #endif
15e2ab3
 
15e2ab3
+    return ctx->out != NULL;
15e2ab3
+}
15e2ab3
+
15e2ab3
+static Bool
15e2ab3
+FinishXkbComp(XkbCompContextPtr ctx)
15e2ab3
+{
15e2ab3
+    if (!ctx->buf)
15e2ab3
+	return FALSE;
15e2ab3
     if (ctx->out != NULL) {
15e2ab3
-#ifdef DEBUG
15e2ab3
-        if (xkbDebugFlags) {
15e2ab3
-            ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n");
15e2ab3
-            XkbWriteXKBKeymapForNames(stderr, names, xkb, want, need);
15e2ab3
-        }
15e2ab3
-#endif
15e2ab3
-        XkbWriteXKBKeymapForNames(ctx->out, names, xkb, want, need);
15e2ab3
 #ifndef WIN32
15e2ab3
         if (Pclose(ctx->out) == 0)
15e2ab3
 #else
15e2ab3
@@ -209,6 +207,25 @@ XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
15e2ab3
     return FALSE;
15e2ab3
 }
15e2ab3
 
15e2ab3
+static Bool
15e2ab3
+XkbDDXCompileKeymapByNames(XkbDescPtr xkb,
15e2ab3
+                           XkbComponentNamesPtr names,
15e2ab3
+                           unsigned want,
15e2ab3
+                           unsigned need, XkbCompContextPtr ctx)
15e2ab3
+{
15e2ab3
+    if (StartXkbComp(ctx)) {
15e2ab3
+#ifdef DEBUG
15e2ab3
+        if (xkbDebugFlags) {
15e2ab3
+            ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n");
15e2ab3
+            XkbWriteXKBKeymapForNames(stderr, names, xkb, want, need);
15e2ab3
+        }
15e2ab3
+#endif
15e2ab3
+        XkbWriteXKBKeymapForNames(ctx->out, names, xkb, want, need);
15e2ab3
+    }
15e2ab3
+
15e2ab3
+    return FinishXkbComp(ctx);
15e2ab3
+}
15e2ab3
+
15e2ab3
 static FILE *
15e2ab3
 XkbDDXOpenConfigFile(char *mapName, char *fileNameRtrn, int fileNameRtrnLen)
15e2ab3
 {
15e2ab3
-- 
15e2ab3
1.8.3.1
15e2ab3