#include "config.h" #include "lauxlib.h" #include "lualib.h" int pow_open_config(pow_config *cfg, char *path) { int err; cfg->L = luaL_newstate(); if (!cfg->L) { return 1; } lua_State *L = cfg->L; // just easier to access luaL_openlibs(L); err = luaL_loadfile(L, path); if (err) { return 1; } err = lua_pcall(L, 0, 1, 0); if (err) { printf("%s\n", lua_tostring(L, -1)); return 1; } if (!lua_istable(L, -1)) { printf("bad config. you must return a table.\n"); return 1; } lua_getfield(L, -1, "repos"); // this will push the entire config table to -2 // and push repos to -1 if (lua_istable(L, -1)) { size_t repo_count = lua_rawlen(L, -1); for (size_t i = 1; i <= repo_count; i++) { lua_rawgeti(L, -1, i); if (lua_istable(L, -1)) { lua_getfield(L, -1, "path"); if (lua_isstring(L, -1)) { const char *path = lua_tostring(L, -1); printf("%s\n", path); } lua_pop(L, 1); } lua_pop(L, 1); } } return 0; }