diff options
-rw-r--r-- | com32/lua/src/syslinux.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/com32/lua/src/syslinux.c b/com32/lua/src/syslinux.c index a23eb2f0..09373a02 100644 --- a/com32/lua/src/syslinux.c +++ b/com32/lua/src/syslinux.c @@ -318,6 +318,21 @@ static int sl_initramfs_size (lua_State *L) return 1; } +static int sl_initramfs_purge (lua_State *L) +{ + struct initramfs *ir = luaL_checkudata(L, 1, SYSLINUX_INITRAMFS); + + ir = ir->next; + while (ir->len) { + free ((void *)ir->data); + ir = ir->next; + free (ir->prev); + } + /* the __gc method may also be (repeatedly) called before garbage collection, so: */ + ir->next = ir->prev = ir; + return 0; +} + static int sl_boot_it(lua_State * L) { const syslinux_file *kernel = luaL_checkudata(L, 1, SYSLINUX_FILE); @@ -442,6 +457,7 @@ static const luaL_Reg file_methods[] = { }; static const luaL_Reg initramfs_methods[] = { + {"__gc", sl_initramfs_purge}, {"load", sl_initramfs_load_archive}, {"add_file", sl_initramfs_add_file}, {"size", sl_initramfs_size}, |