From c22be8c74f0627f9df8a5a6ee538be981075c181 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 29 Jul 2017 15:46:33 +0100 Subject: [PATCH] [Feature] Improve symbol type parsing in Lua API --- src/lua/lua_config.c | 76 +++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 29 deletions(-) diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index 7423bdaeb..b01b0c5a0 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -1375,35 +1375,6 @@ lua_config_get_key (lua_State *L) return 1; } -static gint -lua_parse_symbol_type (const gchar *str) -{ - gint ret = SYMBOL_TYPE_NORMAL; - - if (str) { - if (strcmp (str, "virtual") == 0) { - ret = SYMBOL_TYPE_VIRTUAL; - } - else if (strcmp (str, "callback") == 0) { - ret = SYMBOL_TYPE_CALLBACK; - } - else if (strcmp (str, "normal") == 0) { - ret = SYMBOL_TYPE_NORMAL; - } - else if (strcmp (str, "prefilter") == 0) { - ret = SYMBOL_TYPE_PREFILTER|SYMBOL_TYPE_GHOST; - } - else if (strcmp (str, "postfilter") == 0) { - ret = SYMBOL_TYPE_POSTFILTER|SYMBOL_TYPE_GHOST; - } - else { - msg_warn ("bad type: %s", str); - } - } - - return ret; -} - static gint lua_parse_symbol_flags (const gchar *str) { @@ -1430,6 +1401,53 @@ lua_parse_symbol_flags (const gchar *str) return ret; } +static gint +lua_parse_symbol_type (const gchar *str) +{ + gint ret = SYMBOL_TYPE_NORMAL; + gchar **vec; + guint i, l; + + if (str) { + vec = g_strsplit_set (str, ",;", -1); + + if (vec) { + l = g_strv_length (vec); + + for (i = 0; i < l; i ++) { + str = vec[i]; + + if (g_ascii_strcasecmp (str, "virtual") == 0) { + ret = SYMBOL_TYPE_VIRTUAL; + } else if (g_ascii_strcasecmp (str, "callback") == 0) { + ret = SYMBOL_TYPE_CALLBACK; + } else if (g_ascii_strcasecmp (str, "normal") == 0) { + ret = SYMBOL_TYPE_NORMAL; + } else if (g_ascii_strcasecmp (str, "prefilter") == 0) { + ret = SYMBOL_TYPE_PREFILTER | SYMBOL_TYPE_GHOST; + } else if (g_ascii_strcasecmp (str, "postfilter") == 0) { + ret = SYMBOL_TYPE_POSTFILTER | SYMBOL_TYPE_GHOST; + } else { + gint fl = 0; + + fl = lua_parse_symbol_flags (str); + + if (fl == 0) { + msg_warn ("bad type: %s", str); + } + else { + ret |= fl; + } + } + } + + g_strfreev (vec); + } + } + + return ret; +} + static gint lua_config_register_symbol (lua_State * L) { -- 2.39.5