[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 21/23] libxlu: introduce new APIs
These APIs can be used to manipulate XLU_ConfigValue and XLU_ConfigList. APIs introduced: 1. xlu_cfg_value_type 2. xlu_cfg_value_get_string 3. xlu_cfg_value_get_list 4. xlu_cfg_get_listitem2 Move some definitions from private header to public header as needed. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> --- Changes in v6: 1. Report value's line and column number on error. Changes in v5: 1. Use calling convention like old APIs. --- tools/libxl/libxlu_cfg.c | 45 +++++++++++++++++++++++++++++++++++++++++++ tools/libxl/libxlu_internal.h | 7 ------- tools/libxl/libxlutil.h | 13 +++++++++++++ 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/tools/libxl/libxlu_cfg.c b/tools/libxl/libxlu_cfg.c index b921a13..62fb798 100644 --- a/tools/libxl/libxlu_cfg.c +++ b/tools/libxl/libxlu_cfg.c @@ -199,6 +199,51 @@ static int find_atom(const XLU_Config *cfg, const char *n, return 0; } + +enum XLU_ConfigValueType xlu_cfg_value_type(const XLU_ConfigValue *value) +{ + return value->type; +} + +int xlu_cfg_value_get_string(const XLU_Config *cfg, XLU_ConfigValue *value, + char **value_r, int dont_warn) +{ + if (value->type != XLU_STRING) { + if (!dont_warn) + fprintf(cfg->report, + "%s:%d:%d: warning: value is not a string\n", + cfg->config_source, value->line, value->column); + *value_r = NULL; + return EINVAL; + } + + *value_r = value->u.string; + return 0; +} + +int xlu_cfg_value_get_list(const XLU_Config *cfg, XLU_ConfigValue *value, + XLU_ConfigList **value_r, int dont_warn) +{ + if (value->type != XLU_LIST) { + if (!dont_warn) + fprintf(cfg->report, + "%s:%d:%d: warning: value is not a list\n", + cfg->config_source, value->line, value->column); + *value_r = NULL; + return EINVAL; + } + + *value_r = &value->u.list; + return 0; +} + +XLU_ConfigValue *xlu_cfg_get_listitem2(const XLU_ConfigList *list, + int entry) +{ + if (entry < 0 || entry >= list->nvalues) return NULL; + return list->values[entry]; +} + int xlu_cfg_get_string(const XLU_Config *cfg, const char *n, const char **value_r, int dont_warn) { XLU_ConfigSetting *set; diff --git a/tools/libxl/libxlu_internal.h b/tools/libxl/libxlu_internal.h index 73fd85f..1d310b1 100644 --- a/tools/libxl/libxlu_internal.h +++ b/tools/libxl/libxlu_internal.h @@ -25,13 +25,6 @@ #include "libxlutil.h" -enum XLU_ConfigValueType { - XLU_STRING, - XLU_LIST, -}; - -typedef struct XLU_ConfigValue XLU_ConfigValue; - typedef struct XLU_ConfigList { int avalues; /* available slots */ int nvalues; /* actual occupied slots */ diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h index 0333e55..989605a 100644 --- a/tools/libxl/libxlutil.h +++ b/tools/libxl/libxlutil.h @@ -20,9 +20,15 @@ #include "libxl.h" +enum XLU_ConfigValueType { + XLU_STRING, + XLU_LIST, +}; + /* Unless otherwise stated, all functions return an errno value. */ typedef struct XLU_Config XLU_Config; typedef struct XLU_ConfigList XLU_ConfigList; +typedef struct XLU_ConfigValue XLU_ConfigValue; XLU_Config *xlu_cfg_init(FILE *report, const char *report_filename); /* 0 means we got ENOMEM. */ @@ -66,6 +72,13 @@ 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) */ +enum XLU_ConfigValueType xlu_cfg_value_type(const XLU_ConfigValue *value); +int xlu_cfg_value_get_string(const XLU_Config *cfg, XLU_ConfigValue *value, + char **value_r, int dont_warn); +int xlu_cfg_value_get_list(const XLU_Config *cfg, XLU_ConfigValue *value, + XLU_ConfigList **value_r, int dont_warn); +XLU_ConfigValue *xlu_cfg_get_listitem2(const XLU_ConfigList *list, + int entry); /* * Disk specification parsing. -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |