socsvn commit: r269632 - in soc2014/pedrosouza/lua_loader/head/sys/boot: common lua
pedrosouza at FreeBSD.org
pedrosouza at FreeBSD.org
Mon Jun 16 18:01:26 UTC 2014
Author: pedrosouza
Date: Mon Jun 16 18:01:24 2014
New Revision: 269632
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269632
Log:
Added lua_include function
Modified:
soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c
soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c
soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.h
Modified: soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c
==============================================================================
--- soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c Mon Jun 16 17:58:03 2014 (r269631)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c Mon Jun 16 18:01:24 2014 (r269632)
@@ -85,7 +85,7 @@
softc = data;
luap = softc->luap;
- if (do_string(luap, line, strlen(line)) != 0)
+ if (ldo_string(luap, line, strlen(line)) != 0)
printf("[LUA]Failed to execure \'%s\'\n", line);
return (0);
@@ -95,53 +95,10 @@
interp_lua_incl(void *ctx, const char *filename)
{
struct interp_lua_softc *softc;
- struct stat st;
- int fd, r;
- char *buf;
- const char *errstr;
softc = ctx;
- fd = open(filename, O_RDONLY);
- if (fd < 0) {
- printf("Failed to open file %s\n", filename);
- return 1;
- }
-
- r = fstat(fd, &st);
-
- if (r != 0) {
- printf("Failed to retrieve file stat!\n");
- close(fd);
- return 1;
- }
-
- buf = malloc(st.st_size);
- if (buf == NULL) {
- printf("Failed to alloc buf!\n");
- close(fd);
- return 1;
- }
-
- r = read(fd, buf, st.st_size);
- if (r != st.st_size) {
- printf("Failed to read file (%d/%d)!\n", r, (unsigned int)st.st_size);
- free(buf);
- close(fd);
- return 1;
- }
-
- if (do_string(softc->luap, buf, st.st_size) != 0) {
- errstr = lua_tostring(softc->luap, -1);
- errstr = errstr == NULL ? "unknown" : errstr;
- printf("Failed to run %s file with error: %s.\n", filename, errstr);
- lua_pop(softc->luap, 1);
- }
-
- free(buf);
- close(fd);
-
- return 0;
+ return ldo_file(softc->luap, filename);
}
Modified: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c
==============================================================================
--- soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c Mon Jun 16 17:58:03 2014 (r269631)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.c Mon Jun 16 18:01:24 2014 (r269632)
@@ -154,18 +154,79 @@
int
-do_string(lua_State *L, const char * str, size_t size)
+ldo_string(lua_State *L, const char * str, size_t size)
{
int res;
data_chunk ds;
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;
}
+int
+ldo_file(lua_State *L, const char *filename)
+{
+ struct stat st;
+ int fd, r;
+ char *buf;
+ const char *errstr;
+
+ fd = open(filename, O_RDONLY);
+ if (fd < 0) {
+ printf("Failed to open file %s\n", filename);
+ return 1;
+ }
+ r = fstat(fd, &st);
+
+ if (r != 0) {
+ printf("Failed to retrieve file stat!\n");
+ close(fd);
+ return 1;
+ }
+
+ buf = malloc(st.st_size);
+ if (buf == NULL) {
+ printf("Failed to alloc buf!\n");
+ close(fd);
+ return 1;
+ }
+
+ r = read(fd, buf, st.st_size);
+ if (r != st.st_size) {
+ printf("Failed to read file (%d/%d)!\n", r, (unsigned int)st.st_size);
+ free(buf);
+ close(fd);
+ return 1;
+ }
+
+ if (ldo_string(L, buf, st.st_size) != 0) {
+ errstr = lua_tostring(L, -1);
+ errstr = errstr == NULL ? "unknown" : errstr;
+ printf("Failed to run %s file with error: %s.\n", filename, errstr);
+ lua_pop(L, 1);
+ }
+
+ free(buf);
+ close(fd);
+
+ return 0;
+}
+
+int lua_include(lua_State * L)
+{
+ const char * str;
+ if (lua_gettop(L) != 1)
+ {
+ lua_pushboolean(L, 0);
+ return 1;
+ }
+ str = lua_tostring(L, 1);
+ lua_pushboolean(L, (ldo_file(L, str) == 0));
+ return 1;
+}
void
lregister(lua_State * L, const char * tableName, const char * funcName, int (*funcPointer)(lua_State *))
@@ -195,6 +256,7 @@
utils_func reg_funcs[] = { {lua_print, NULL, "print"},
{lua_perform, "loader", "perform"},
{lua_delay, "loader", "delay"},
+ {lua_include, "loader", "include"},
{lua_strchar, "string", "byte"},
{lua_charstr, "string", "char"},
{lua_getchar, "io", "getchar"},
@@ -218,4 +280,4 @@
}
++f;
}
-}
\ No newline at end of file
+}
Modified: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.h
==============================================================================
--- soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.h Mon Jun 16 17:58:03 2014 (r269631)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/lutils.h Mon Jun 16 18:01:24 2014 (r269632)
@@ -36,7 +36,9 @@
void * lua_realloc(void *ud, void *ptr, size_t osize, size_t nsize);
-int do_string(lua_State *L, const char * str, size_t size);
+int ldo_string(lua_State *L, const char * str, size_t size);
+
+int ldo_file(lua_State *L, const char * filename);
void lregister(const char * tname, const char * fname, int (*fptr)(lua_State *));
More information about the svn-soc-all
mailing list