diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-03-03 17:39:22 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-03-03 17:39:22 +0000 |
commit | b104c3762dcbe310318a14bed35f0813db48a26d (patch) | |
tree | 6ec4448b8b7c28e306348ebad1b41a4555ff83f7 /tools/libxl/libxlutil.h | |
parent | 24c2f2ccee02f7bf83bf8a9ffdb204cf8d40c653 (diff) | |
download | xen-b104c3762dcbe310318a14bed35f0813db48a26d.tar.gz xen-b104c3762dcbe310318a14bed35f0813db48a26d.tar.bz2 xen-b104c3762dcbe310318a14bed35f0813db48a26d.zip |
Replace config file parser for "xl"
This provides a replacement config file parser for "xl" based on bison
and flex.
Benefits:
* proper error reporting with line numbers
* parser can understand nearly all "xm" configuration files directly
(doesn't understand Python code but should do everything else)
* parser also understands the ;-infested "xl" style files
* removes the dependency on libconfig
* better checking for certain kinds of mistakes
* eliminates the strange "massage file and try again" code
This is intended to support all config files currently supported by
"xl" and almost all files supported by "xm". (NB that whether a
feature works depends on the implementation of that feature in
xl/libxl of course.)
This patch also introduces a new library "libxlutil" which is mainly
for the benefit of "xl". Users of libxl do not need to use libxlutil,
but they can do so if they want to parse "xl" files without being
"xl".
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxlutil.h')
-rw-r--r-- | tools/libxl/libxlutil.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h new file mode 100644 index 0000000000..97b16aa134 --- /dev/null +++ b/tools/libxl/libxlutil.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2010 Citrix Ltd. + * Author Ian Jackson <ian.jackson@eu.citrix.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; version 2.1 only. with the special + * exception on linking described in file LICENSE. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + */ + +#ifndef LIBXLUTIL_H +#define LIBXLUTIL_H + +#include <stdio.h> + +#include "libxl.h" + +/* Unless otherwise stated, all functions return an errno value. */ +typedef struct XLU_Config XLU_Config; +typedef struct XLU_ConfigList XLU_ConfigList; + +XLU_Config *xlu_cfg_init(FILE *report, const char *report_filename); + /* 0 means we got ENOMEM. */ + /* report_filename is copied; report is saved and must remain valid + * until the Config is destroyed. */ + +int xlu_cfg_readfile(XLU_Config*, const char *real_filename); + /* If this fails, then it is undefined behaviour to call xlu_cfg_get_... + * functions. You have to just xlu_cfg_destroy. */ + +void xlu_cfg_destroy(XLU_Config*); + + +/* All of the following print warnings to "report" if there is a problem. + * Return values are: + * 0 OK + * ESRCH not defined + * EINVAL value found but wrong format for request (prints warning) + * ERANGE value out of range (from strtol) + */ + +int xlu_cfg_get_string(const XLU_Config*, const char *n, const char **value_r); +int xlu_cfg_get_long(const XLU_Config*, const char *n, long *value_r); + +int xlu_cfg_get_list(const XLU_Config*, const char *n, + XLU_ConfigList **list_r /* may be 0 */, + int *entries_r /* may be 0 */); + /* there is no need to free *list_r; lifetime is that of the XLU_Config */ +const char *xlu_cfg_get_listitem(const XLU_ConfigList*, int entry); + /* xlu_cfg_get_listitem cannot fail, except that if entry is + * out of range it returns 0 (not setting errno) */ + +#endif /* LIBXLUTIL_H */ |