socsvn commit: r269258 - soc2014/pedrosouza/lua_loader/head/sys/boot/common

pedrosouza at FreeBSD.org pedrosouza at FreeBSD.org
Sun Jun 8 17:02:44 UTC 2014


Author: pedrosouza
Date: Sun Jun  8 17:02:43 2014
New Revision: 269258
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269258

Log:
  Implemented interp_lua_incl

Modified:
  soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c

Modified: soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c
==============================================================================
--- soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c	Sun Jun  8 15:38:40 2014	(r269257)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/common/interp_lua.c	Sun Jun  8 17:02:43 2014	(r269258)
@@ -116,7 +116,7 @@
 	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;
 }
@@ -163,67 +163,54 @@
 int
 interp_lua_incl(void *ctx, const char *filename)
 {
-#if 0
-	lua_State		*luap;
 	struct interp_lua_softc *softc;
 	struct stat		st;
-	char			*filebuf, *errstr;
-	int			fd, filebufoff, i, rleft, rread;
+	int			fd, r;
+	char			*buf;
+	const char		*errstr;
 
-	printf("[Lua] Including file %s.\n", filename);
+	softc = ctx;
 
-	if ((strcmp(filename, "/boot/loader.rc") == 0) ||
-		(strcmp(filename, "/boot/boot.conf") == 0)) {
-			printf("Skipping loader.rc and boot.conf");
-			return (0);
+	fd = open(filename, O_RDONLY);
+	if (fd < 0) {
+		printf("Failed to open file %s\n", filename);
+		return 1;
 	}
 
-	softc = ctx;
-	luap = softc->luap;
+	r = fstat(fd, &st);
 
+	if (r != 0) {
+		printf("Failed to retrieve file stat!\n");
+		close(fd);
+		return 1;
+	}
 
-	fd = open(filename, O_RDONLY);
-	if (fd < 0) {
-		printf("Couldn't open file %s\n", filename);
-		return (1);
+	buf = malloc(st.st_size);
+	if (buf == NULL) {
+		printf("Failed to alloc buf!\n");
+		close(fd);
+		return 1;
 	}
-	i = stat(filename, &st);
-	assert(i == 0);
-	filebuf = malloc(st.st_size);
-	assert(filebuf != NULL);
-	memset(filebuf, 0, st.st_size);
-
-	/*
-	* XX: Investigate stat() vs logic problem. I'm getting
-	* more bytes that the file really has.
-	*/
-
-
-	rleft = st.st_size - 1;
-	filebufoff = 0;
-	for (;;) {
-		rread = read(fd, filebuf + filebufoff, rleft);
-		assert(rread >= 0);
-		rleft -= rread;
-		filebufoff += rread;
-		if (rread == 0 || rleft <= 0) {
-			break;
-		}
+
+	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;
 	}
-	close(fd);
-	i = LUA_DOSTRING(luap, filebuf);
-	free(filebuf);
-	if ((i != 0) && (lua_isnil(luap, -1) == 0)) {
-		errstr = lua_tostring(luap, -1);
-		if (errstr == NULL) {
-			errstr = "internal error; errstr must be string";
-		}
-		printf("Problem with script execution:\n\n");
-		printf("\t'%s'\n\n", errstr);
-		lua_pop(luap, 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);
 	}
-#endif
-	return (0);
+
+	free(buf);
+	close(fd);
+
+	return 0;
 }
 
 


More information about the svn-soc-all mailing list