[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 20/22] tools/utils: add wrapper for readfile()/readdata() functions



These functions needs to cross the boundary between core and lower-layer.
As such split them in two.  Pass most of the values from XLU_Config as
they can be used by the lower-layer.

Signed-off-by: Elliott Mitchell <ehem+xen@xxxxxxx>
---
 tools/libs/util/libxlu_cfg.c      | 47 ++++++++++++++++++++++---------
 tools/libs/util/libxlu_internal.h |  6 ++++
 2 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/tools/libs/util/libxlu_cfg.c b/tools/libs/util/libxlu_cfg.c
index 3c0703f9df..cb99b0aab0 100644
--- a/tools/libs/util/libxlu_cfg.c
+++ b/tools/libs/util/libxlu_cfg.c
@@ -110,39 +110,58 @@ static void parse(CfgParseContext *ctx) {
     }
 }
 
-int xlu_cfg_readfile(XLU_Config *cfg, const char *real_filename) {
-    FILE *f = 0;
+int xlu_cfg_readfile(XLU_Config *cfg, const char *name)
+{
+    FILE *file;
+    int ret;
+
+    file = fopen(name, "r");
+    if (file) {
+        ret = xlu__cfg_readfile(cfg, cfg->report, cfg->config_source,
+            &cfg->settings, file, name);
+        fclose(file);
+    } else {
+        ret = errno;
+        fprintf(cfg->report,"%s: unable to open configuration file: %s\n",
+                name, strerror(ret));
+    }
+
+    return ret;
+}
+
+int xlu__cfg_readfile(XLU_Config *cfg, FILE *msgfile, const char *msgprefix,
+    XLU_ConfigSetting **psettings, FILE *f, const char *name)
+{
     int e;
 
     CfgParseContext ctx;
-    e = ctx_prep(&ctx, cfg, &cfg->settings);
+    e = ctx_prep(&ctx, cfg, psettings);
     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);
 
     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 xlu_cfg_readdata(XLU_Config *cfg, const char *data, int length)
+{
+    return xlu__cfg_readdata(cfg, cfg->report, cfg->config_source,
+        &cfg->settings, data, length);
+}
+
+int xlu__cfg_readdata(XLU_Config *cfg, FILE *msgfile, const char *msgprefix,
+    XLU_ConfigSetting **psettings, const char *data, int length)
+{
     int e;
     YY_BUFFER_STATE buf= 0;
 
     CfgParseContext ctx;
-    e = ctx_prep(&ctx, cfg, &cfg->settings);
+    e = ctx_prep(&ctx, cfg, psettings);
     if (e) { ctx.err= e; goto xe; }
 
     buf = xlu__cfg_yy_scan_bytes(data, length, ctx.scanner);
diff --git a/tools/libs/util/libxlu_internal.h 
b/tools/libs/util/libxlu_internal.h
index cc98efba27..34c6c7a443 100644
--- a/tools/libs/util/libxlu_internal.h
+++ b/tools/libs/util/libxlu_internal.h
@@ -39,6 +39,12 @@ extern int xlu_cfg_printf(const XLU_Config *cfg, const char 
*format, ...)
  * Internals for file parser *only*, NOT to be used by other parsing/lexing
  */
 extern void xlu__cfg_set_free(XLU_ConfigSetting *set);
+extern int xlu__cfg_readfile(XLU_Config *cfg, FILE *msgfile,
+    const char *msgprefix, XLU_ConfigSetting **psettings, FILE *file,
+    const char *name);
+extern int xlu__cfg_readdata(XLU_Config *cfg, FILE *msgfile,
+    const char *msgprefix, XLU_ConfigSetting **psettings, const char *data,
+    int length);
 
 #endif /*LIBXLU_INTERNAL_H*/
 
-- 
(\___(\___(\______          --=> 8-) EHM <=--          ______/)___/)___/)
 \BS (    |       ehem+sigmsg@xxxxxxx      PGP 87145445       |    )   /
  \_CS\   |  _____  -O #include <stddisclaimer.h> O-   _____  |   /  _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445






 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.