Date: Mon, 7 Jul 2014 17:04:51 GMT From: pedrosouza@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r270552 - soc2014/pedrosouza/lua_loader/head/sys/boot/lua Message-ID: <201407071704.s67H4pPL024594@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pedrosouza Date: Mon Jul 7 17:04:51 2014 New Revision: 270552 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=270552 Log: Added file io & .conf file parse Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/config.lua Modified: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/config.lua ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/config.lua Mon Jul 7 17:04:51 2014 (r270552) @@ -0,0 +1,63 @@ +config = {}; + +pattern_table = { + [1] = {str = "(%w+)_load%s*=%s*\"([%w%s%p]*)%s*(.*)\"", process = function(k, v) print("Processed(load) -> "..k..":"..v); end }, --module_load="value" + [2] = {str = "(%w+)_name%s*=%s*\"([%w%s%p]*)\"%s*(.*)", process = function(k, v) print("Processed(name) -> "..k..":"..v); end }, --module_name="value" + [3] = {str = "(%w+)_type%s*=%s*\"([%w%s%p]*)\"%s*(.*)", process = function(k, v) print("Processed(type) -> "..k..":"..v); end }, --module_type="value" + [4] = {str = "(%w+)_flags%s*=%s*\"([%w%s%p]*)\"%s*(.*)", process = function(k, v) print("Processed(flags) -> "..k..":"..v); end }, --module_flags="value" + [5] = {str = "(%w+)_before%s*=%s*\"([%w%s%p]*)\"%s*(.*)", process = function(k, v) print("Processed(before) -> "..k..":"..v); end } --module_before="value" + [6] = {str = "(%w+)_after%s*=%s*\"([%w%s%p]*)\"%s*(.*)", process = function(k, v) print("Processed(after) -> "..k..":"..v); end }, --module_after="value" + [7] = {str = "(%w+)_error%s*=%s*\"([%w%s%p]*)\"%s*(.*)", process = function(k, v) print("Processed(error) -> "..k..":"..v); end } --module_error="value" + [8] = {str = "(%w+)%s*=%s*\"([%w%s%p]*)\"%s*(.*)", process = function(k, v) print("Processed(environment) -> "..k..":"..v); end } --env_var="value" +}; + +function config.isValidComment(c) + local s = string.match(c, "%s*#.*"); + if s == nil then return false; end + return true; +end + +function config.load(name) + local f = io.open(name); + if f == nil then + print("Failed to open config : " .. name); + return false; + end + + local text; + local r; + + text, r = io.read(f); + + if text == nil then + print("Failed to read confif : " .. name); + return false; + end + + local n = 1; + + for line in string.gmatch(text, "([^\n]+)") do + + local found = false; + + for i, v in ipairs(pattern_table) do + local k, v, c = string.match(line, v.str); + if k ~= nil then + found = true; + + if config.isValidComment(c) then + v.process(k, v); + else + print("Malformed line ("..n.."):"..line); + end + + break; + end + end + + if found == false then + print("Malformed line ("..n.."):"..line); + end + + end +end \ No newline at end of file Modified: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c ============================================================================== --- soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c Mon Jul 7 16:55:07 2014 (r270551) +++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c Mon Jul 7 17:04:51 2014 (r270552) @@ -66,45 +66,6 @@ } int -lua_strchar(lua_State *L) -{ - const char *str; - int i, j; - int n = lua_gettop(L); - - if (n != 2) return 0; - str = lua_tostring(L, 1); - if (str == NULL) return 0; - i = strlen(str); - j = (int)lua_tonumber(L, 2); - if ( j >= 0 && j < i) - { - lua_pushnumber(L, str[j]); - return 1; - } - return 0; -} - -int -lua_charstr(lua_State *L) -{ - int n = lua_gettop(L); - char buf[129]; - - if (n < 1) return 0; - n = n > 128 ? 128 : n; - - buf[n] = 0; - while (n-- > 0) - { - buf[n] = ((int)lua_tonumber(L, n+1)) & 0xFF; - } - - lua_pushstring(L, buf); - return 1; -} - -int lua_delay(lua_State *L) { int n = lua_gettop(L); @@ -116,7 +77,8 @@ return 0; } -int lua_getenv(lua_State *L) +int +lua_getenv(lua_State *L) { char *ev; int n = lua_gettop(L); @@ -171,7 +133,7 @@ ds.data = (void*)str; ds.size = size; - res = lua_load(L, read_chunk, &ds, "do_string_", 0); + res = lua_load(L, read_chunk, &ds, "do_string", 0); res = lua_pcall(L, 0, LUA_MULTRET, 0); return res; } @@ -226,7 +188,8 @@ return 0; } -int lua_include(lua_State *L) +int +lua_include(lua_State *L) { const char *str; @@ -240,6 +203,91 @@ return 1; } +int +lua_openfile(lua_State *L) +{ + const char *str; + int fd; + int r; + struct stat st; + + if (lua_gettop(L) != 1) + { + lua_pushnil(L); + return 1; + } + str = lua_tostring(L, 1); + + FILE * f = fopen(str, "r"); + if (f != NULL) + { + FILE ** ptr = (FILE**)lua_newuserdata(L, sizeof(FILE**)); + *ptr = f; + } else + lua_pushnil(L); + return 1; +} + +int +lua_closefile(lua_State *L) +{ + FILE ** f; + if (lua_gettop(L) != 1) + { + lua_pushboolean(L, 0); + return 1; + } + + f = (FILE**)lua_touserdata(L, 1); + if (f != NULL && *f != NULL) + { + lua_pushboolean(L, fclose(*f) == 0 ? 1 : 0); + *f = NULL; + } else + lua_pushboolean(L, 0); + + return 1; +} + +int +lua_readfile(lua_State *L) +{ + FILE **f; + size_t size, r; + char * buf; + + if (lua_gettop(L) < 1 || lua_gettop(L) > 2) + { + lua_pushnil(L); + lua_pushnumber(L, 0); + return 2; + } + + f = (FILE**)lua_touserdata(L, 1); + + if (f == NULL || *f == NULL) + { + lua_pushnil(L); + lua_pushnumber(L, 0); + return 2; + } + + if (lua_gettop(L) == 2) + { + size = (size_t)lua_tonumber(L, 2); + } else + size = (*f)->size; + + + buf = (char*)malloc(size); + r = fread(buf, 1, size, *f); + lua_pushlstring(L, buf, r); + free(buf); + lua_pushnumber(L, r); + + return 2; +} + void lregister(lua_State *L, const char *tableName, const char *funcName, int (*funcPointer)(lua_State *)) { @@ -270,10 +318,11 @@ {lua_delay, "loader", "delay"}, {lua_include, "loader", "include"}, {lua_getenv, "loader", "getenv"}, - {lua_strchar, "string", "byte"}, - {lua_charstr, "string", "char"}, {lua_getchar, "io", "getchar"}, {lua_gets, "io", "gets"}, + {lua_openfile, "io", "open"}, + {lua_closefile, "io", "close"}, + {lua_readfile, "io", "read"}, {NULL, NULL, NULL}, }; @@ -294,4 +343,4 @@ } ++f; } -} \ No newline at end of file +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407071704.s67H4pPL024594>