Skip to content
Snippets Groups Projects
Commit 631769c3 authored by Konstantin Osipov's avatar Konstantin Osipov
Browse files

Merge remote-tracking branch 'origin/cfg_array'

parents 53852b12 c019196d
No related branches found
No related tags found
No related merge requests found
......@@ -52,22 +52,27 @@ cfg_geti(const char *param)
return val;
}
const char *
cfg_gets(const char *param)
static const char *
cfg_converts(struct lua_State *L)
{
/* Support simultaneous cfg_gets("str1") and cfg_gets("str2") */
static char __thread values[MAX_STR_OPTS][MAX_OPT_VAL_LEN];
static int __thread i = 0;
struct lua_State *L = tarantool_L;
char *val;
cfg_get(param);
if (lua_isnil(L, -1))
val = NULL;
return NULL;
else {
val = values[i++ % MAX_STR_OPTS];
snprintf(val, MAX_OPT_VAL_LEN, "%s", lua_tostring(L, -1));
snprintf(values[i % MAX_STR_OPTS], MAX_OPT_VAL_LEN,
"%s", lua_tostring(L, -1));
return values[i++ % MAX_STR_OPTS];
}
lua_pop(L, 1);
}
const char *
cfg_gets(const char *param)
{
/* Support simultaneous cfg_gets("str1") and cfg_gets("str2") */
cfg_get(param);
const char *val = cfg_converts(tarantool_L);
lua_pop(tarantool_L, 1);
return val;
}
......@@ -80,3 +85,24 @@ cfg_getd(const char *param)
return val;
}
int
cfg_getarr_size(const char *name)
{
cfg_get(name);
luaL_checktype(tarantool_L, -1, LUA_TTABLE);
int result = luaL_getn(tarantool_L, -1);
lua_pop(tarantool_L, 1);
return result;
}
const char *
cfg_getarr_elem(const char *name, int i)
{
cfg_get(name);
luaL_checktype(tarantool_L, -1, LUA_TTABLE);
lua_rawgeti(tarantool_L, -1, i + 1);
const char *val = cfg_converts(tarantool_L);
lua_pop(tarantool_L, 2);
return val;
}
......@@ -36,4 +36,11 @@ cfg_gets(const char *param);
double
cfg_getd(const char *param);
int
cfg_getarr_size(const char *name);
const char *
cfg_getarr_elem(const char *name, int i);
#endif /* INCLUDES_TARANTOOL_CFG_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment