WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] libxl: config parser: make CfgParseContex

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] libxl: config parser: make CfgParseContext initialisation common
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 17 Jan 2011 08:00:04 -0800
Delivery-date: Mon, 17 Jan 2011 08:16:58 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
# Date 1294774145 0
# Node ID 0b04aea876674814331052328f7d1a90529c671d
# Parent  b80c530dac8ce3d1256ded2e2d9effb879c41d45
libxl: config parser: make CfgParseContext initialisation common

xlu_cfg_readfile and xlu_cfg_readdata had some somewhat-boilerplate
code for initialisation, parsing, and cleanup.  Make that common.

No functional change.

Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
 tools/libxl/libxlu_cfg.c |   90 +++++++++++++++++++++++++----------------------
 1 files changed, 49 insertions(+), 41 deletions(-)

diff -r b80c530dac8c -r 0b04aea87667 tools/libxl/libxlu_cfg.c
--- a/tools/libxl/libxlu_cfg.c  Tue Jan 11 19:28:22 2011 +0000
+++ b/tools/libxl/libxlu_cfg.c  Tue Jan 11 19:29:05 2011 +0000
@@ -18,59 +18,68 @@ XLU_Config *xlu_cfg_init(FILE *report, c
     return cfg;
 }
 
-int xlu_cfg_readfile(XLU_Config *cfg, const char *real_filename) {
-    CfgParseContext ctx;
-    FILE *f;
-    int e, r;
-
-    ctx.cfg= cfg;
-    ctx.err= 0;
-    ctx.lexerrlineno= -1;
+static int ctx_prep(CfgParseContext *ctx, XLU_Config *cfg) {
+    int e;
+
+    ctx->cfg= cfg;
+    ctx->err= 0;
+    ctx->lexerrlineno= -1;
+    ctx->scanner= 0;
     
-    f= fopen(real_filename, "r");
-    if (!f) {
-        e= errno;
-        fprintf(cfg->report,"%s: unable to open configuration file: %s\n",
-                real_filename, strerror(e));
-        return e;
-    }
-
-    e= xlu__cfg_yylex_init_extra(&ctx, &ctx.scanner);
+    e= xlu__cfg_yylex_init_extra(ctx, &ctx->scanner);
     if (e) {
         fprintf(cfg->report,"%s: unable to create scanner: %s\n",
                 cfg->filename, strerror(e));
         return e;
     }
+    return 0;
+}
+
+static void ctx_dispose(CfgParseContext *ctx) {
+    if (ctx->scanner) xlu__cfg_yylex_destroy(ctx->scanner);
+}
+
+static void parse(CfgParseContext *ctx) {
+    /* On return, ctx.err will be updated with the error status. */
+    int r;
+    r= xlu__cfg_yyparse(ctx);
+    if (r) assert(ctx->err);
+}
+
+int xlu_cfg_readfile(XLU_Config *cfg, const char *real_filename) {
+    FILE *f = 0;
+    int e;
+
+    CfgParseContext ctx;
+    e = ctx_prep(&ctx, cfg);
+    if (e) { ctx.err= e; goto xe; }
+
+    f= fopen(real_filename, "r");
+    if (!f) {
+        ctx.err = errno;
+        fprintf(cfg->report,"%s: unable to open configuration file: %s\n",
+                real_filename, strerror(e));
+        goto xe;
+    }
 
     xlu__cfg_yyrestart(f, ctx.scanner);
 
-    r= xlu__cfg_yyparse(&ctx);
-    if (r) assert(ctx.err);
-
-    xlu__cfg_yylex_destroy(ctx.scanner);
-    fclose(f);
+    parse(&ctx);
+
+ xe:
+    ctx_dispose(&ctx);
+    if (f) fclose(f);
 
     return ctx.err;
 }
 
 int xlu_cfg_readdata(XLU_Config *cfg, const char *data, int length) {
+    int e;
+    YY_BUFFER_STATE buf= 0;
+
     CfgParseContext ctx;
-    int e, r;
-    YY_BUFFER_STATE buf= 0;
-
-    ctx.scanner= 0;
-    ctx.cfg= cfg;
-    ctx.err= 0;
-    ctx.lexerrlineno= -1;
-
-    e= xlu__cfg_yylex_init_extra(&ctx, &ctx.scanner);
-    if (e) {
-        fprintf(cfg->report,"%s: unable to create scanner: %s\n",
-                cfg->filename, strerror(e));
-        ctx.err= e;
-        ctx.scanner= 0;
-        goto xe;
-    }
+    e= ctx_prep(&ctx, cfg);
+    if (e) { ctx.err= e; goto xe; }
 
     buf = xlu__cfg_yy_scan_bytes(data, length, ctx.scanner);
     if (!buf) {
@@ -80,12 +89,11 @@ int xlu_cfg_readdata(XLU_Config *cfg, co
         goto xe;
     }
 
-    r= xlu__cfg_yyparse(&ctx);
-    if (r) assert(ctx.err);
+    parse(&ctx);
 
  xe:
     if (buf) xlu__cfg_yy_delete_buffer(buf, ctx.scanner);
-    if (ctx.scanner) xlu__cfg_yylex_destroy(ctx.scanner);
+    ctx_dispose(&ctx);
 
     return ctx.err;
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] libxl: config parser: make CfgParseContext initialisation common, Xen patchbot-unstable <=