lib/conf: allow multiple sections with same name
Add disable_sections_merge() procedure that will allow to have multiple sections with a same name. This behaviour is how FIO treats such sections and so will be used in bdevperf config file. Change-Id: If221daeb7753d91b5d2608d25ccbb16f2d43ccce Signed-off-by: Vitaliy Mysak <vitaliy.mysak@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3433 Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot
This commit is contained in:
parent
a7972f0a54
commit
800b18d028
@ -201,6 +201,13 @@ bool spdk_conf_section_get_boolval(struct spdk_conf_section *sp, const char *key
|
|||||||
*/
|
*/
|
||||||
void spdk_conf_set_as_default(struct spdk_conf *cp);
|
void spdk_conf_set_as_default(struct spdk_conf *cp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable sections merging during 'spdk_conf_read()'
|
||||||
|
*
|
||||||
|
* \param cp Configuration to be read
|
||||||
|
*/
|
||||||
|
void spdk_conf_disable_sections_merge(struct spdk_conf *cp);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,7 +35,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
|
|||||||
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
||||||
|
|
||||||
SO_VER := 2
|
SO_VER := 2
|
||||||
SO_MINOR := 0
|
SO_MINOR := 1
|
||||||
|
|
||||||
C_SRCS = conf.c
|
C_SRCS = conf.c
|
||||||
LIBNAME = conf
|
LIBNAME = conf
|
||||||
|
@ -60,6 +60,7 @@ struct spdk_conf {
|
|||||||
char *file;
|
char *file;
|
||||||
struct spdk_conf_section *current_section;
|
struct spdk_conf_section *current_section;
|
||||||
struct spdk_conf_section *section;
|
struct spdk_conf_section *section;
|
||||||
|
bool merge_sections;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CF_DELIM " \t"
|
#define CF_DELIM " \t"
|
||||||
@ -72,7 +73,13 @@ static struct spdk_conf *default_config = NULL;
|
|||||||
struct spdk_conf *
|
struct spdk_conf *
|
||||||
spdk_conf_allocate(void)
|
spdk_conf_allocate(void)
|
||||||
{
|
{
|
||||||
return calloc(1, sizeof(struct spdk_conf));
|
struct spdk_conf *ret = calloc(1, sizeof(struct spdk_conf));
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
ret->merge_sections = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -480,7 +487,12 @@ parse_line(struct spdk_conf *cp, char *lp)
|
|||||||
num = 0;
|
num = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sp = spdk_conf_find_section(cp, key);
|
if (cp->merge_sections) {
|
||||||
|
sp = spdk_conf_find_section(cp, key);
|
||||||
|
} else {
|
||||||
|
sp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
sp = allocate_cf_section();
|
sp = allocate_cf_section();
|
||||||
append_cf_section(cp, sp);
|
append_cf_section(cp, sp);
|
||||||
@ -684,3 +696,9 @@ spdk_conf_set_as_default(struct spdk_conf *cp)
|
|||||||
{
|
{
|
||||||
default_config = cp;
|
default_config = cp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
spdk_conf_disable_sections_merge(struct spdk_conf *cp)
|
||||||
|
{
|
||||||
|
cp->merge_sections = false;
|
||||||
|
}
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
spdk_conf_section_get_intval;
|
spdk_conf_section_get_intval;
|
||||||
spdk_conf_section_get_boolval;
|
spdk_conf_section_get_boolval;
|
||||||
spdk_conf_set_as_default;
|
spdk_conf_set_as_default;
|
||||||
|
spdk_conf_disable_sections_merge;
|
||||||
|
|
||||||
local: *;
|
local: *;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user