From 60688e63d0fe03e12bcf1536500049d4248c104b Mon Sep 17 00:00:00 2001 From: Marcel Ritter Date: Fri, 9 Oct 2009 23:16:19 +0200 Subject: [PATCH] Added sleep() Added some comments Fixed cmdline parsing --- com32/lua/src/Makefile | 4 ++ com32/lua/src/syslinux.c | 127 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 92 insertions(+), 39 deletions(-) diff --git a/com32/lua/src/Makefile b/com32/lua/src/Makefile index 967c157..3ff05e3 100644 --- a/com32/lua/src/Makefile +++ b/com32/lua/src/Makefile @@ -55,6 +55,10 @@ LIBLUA_OBJS += liolib.o LIBLUA_OBJS += dmi.o ../../modules/dmi.o LIBLUA_OBJS += pci.o LIBLUA_OBJS += vesa.o +# add function __parse_argv +LIBLUA_OBJS += ../../../com32/lib/sys/argv.o +# add function sleep() +LIBLUA_OBJS += ../../../menu/libmenu/com32io.o CFLAGS += -DLUA_ANSI diff --git a/com32/lua/src/syslinux.c b/com32/lua/src/syslinux.c index 9abdabb..bc6d353 100644 --- a/com32/lua/src/syslinux.c +++ b/com32/lua/src/syslinux.c @@ -36,7 +36,9 @@ #include "syslinux/boot.h" #include "syslinux/loadfile.h" #include "syslinux/linux.h" +#include "../../../menu/libmenu/com32io.h" +int __parse_argv(char ***argv, const char *str); /* * Most code taken from: @@ -139,12 +141,14 @@ static int sl_run_command(lua_State *L) return 0; } +/* do default boot */ static int sl_run_default(lua_State *L) { syslinux_run_default(); return 0; } +/* do local boot */ static int sl_local_boot(lua_State *L) { uint16_t flags = luaL_checkint(L, 1); @@ -159,68 +163,102 @@ static int sl_final_cleanup(lua_State *L) return 0; } +/* boot linux kernel and initrd */ static int sl_boot_linux(lua_State *L) { const char *kernel = luaL_checkstring(L, 1); - const char *initrd = luaL_checkstring(L, 2); - const char *cmdline = luaL_optstring(L, 3, ""); - void *kernel_data; - size_t kernel_len; + const char *cmdline = luaL_optstring(L, 2, ""); + char *initrd; + void *kernel_data, *file_data; + size_t kernel_len, file_len; struct initramfs *initramfs; char *newcmdline; - uint32_t mem_limit = luaL_optint(L, 4, 0); - uint16_t video_mode = luaL_optint(L, 5, 0); - int ret; + uint32_t mem_limit = luaL_optint(L, 3, 0); + uint16_t video_mode = luaL_optint(L, 4, 0); + int ret, i; + char **argv, **argp, *arg, *p; - newcmdline = malloc(strlen(kernel)+12+1+7+1+strlen(initrd)+1+strlen(cmdline)); + ret = __parse_argv(&argv, cmdline); + + newcmdline = malloc(strlen(kernel)+12); if (!newcmdline) printf("Mem alloc failed: cmdline\n"); strcpy(newcmdline, "BOOT_IMAGE="); strcpy(newcmdline+strlen(newcmdline), kernel); - strcpy(newcmdline+strlen(newcmdline), " initrd="); - strcpy(newcmdline+strlen(newcmdline), initrd); - strcpy(newcmdline+strlen(newcmdline), " "); - strcpy(newcmdline+strlen(newcmdline), cmdline); + argv[0] = newcmdline; + argp = argv; + + /* DEBUG */ + for (i=0; i