From 9253ed37ba124726f1ea1713bf9357553e70e988 Mon Sep 17 00:00:00 2001 From: onefang Date: Tue, 14 Sep 2021 14:23:12 +1000 Subject: Better Lua type decoding. --- src/sledjchisl/sledjchisl.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/sledjchisl/sledjchisl.c b/src/sledjchisl/sledjchisl.c index 08d0092..65d868c 100644 --- a/src/sledjchisl/sledjchisl.c +++ b/src/sledjchisl/sledjchisl.c @@ -1007,16 +1007,41 @@ int Lua2hashtbl(char *file, qhashtbl_t *hash, char *var) while(lua_next(L, -2) != 0) // -1 key, +2 next key, value (or 0 if nothing left in table) { char *n = (char *) lua_tostring(L, -2); // 0 + int type = lua_type(L, -1); // 0 + + switch(type) + { + case LUA_TBOOLEAN : + case LUA_TINTEGER : + case LUA_TNUMBER : + { + float v = lua_tonumber(L, -1); // 0 + hash->put(hash, n, &v, sizeof(float)); + break; + } + case LUA_TSTRING : + { + hash->putstr(hash, n, (char *) lua_tostring(L, -1)); // 0 + break; + } + + default : + { + char *v = (char *) lua_tostring(L, -1); // 0 + E("Unknown Lua variable type for %s = %s", n, v); + break; + } + } +/* // Numbers can convert to strings, so check for numbers before checking for strings. // On the other hand, strings that can be converted to numbers also pass lua_isnumber(). sigh -/* if (lua_isnumber(L, -1)) // 0 + if (lua_isnumber(L, -1)) // 0 { float v = lua_tonumber(L, -1); // 0 hash->put(hash, n, &v, sizeof(float)); } else -*/ if (lua_isstring(L, -1)) // 0 hash->putstr(hash, n, (char *) lua_tostring(L, -1)); // 0 else if (lua_isboolean(L, -1)) // 0 @@ -1029,6 +1054,7 @@ int Lua2hashtbl(char *file, qhashtbl_t *hash, char *var) char *v = (char *) lua_tostring(L, -1); // 0 E("Unknown Lua variable type for %s = %s", n, v); } +*/ lua_pop(L, 1); // -1 value } lua_pop(L, 1); // -1 var -- cgit v1.1