The original mail, in case it didn't get through (because I used the wrong sender address):
On Fri, Feb 27, 2015 at 3:41 PM, Fajar A. Nugraha <w...@fajar.net> wrote: > > Hi, > > Is this the right place to ask about possible enhancement to grub-lua? > > I'm looking to modify osdetect.lua with the ability to boot > ubuntu-on-zfs setup. Most of the needed capabilities are already > there. However I can't find how to get pool name from a device. Grub > is already able to detect the pool name as label, and it shows up > correctly when I use "probe -l". Would you be open to modifying > grub_lib.c so that grub.enum_device will also pass fs label to the > callback function (currently it pass device, fs, and uuid)? > > Or alternatively, in case I missed something obvious, is there a way > capture the output of "probe -l" and use it on lua? grub.run only > returns error code and error message. > And now for the patch. It's inline below (also attached, in case my mail client mess this up), created against grub-extras master (5d12c95d), tested on grub master (66b0e664). The new lua module was tested by loading both the original osdetect.lua (enum_device (device, fs, uuid)) and my modified version (function enum_device (device, fs, uuid, label)), both run fine and the fs label was correctly populated on my modified version. diff -Naru grub-extras-master.orig/lua/grub_lib.c grub-extras-master/lua/grub_lib.c --- grub-extras-master.orig/lua/grub_lib.c 2013-12-25 01:06:47.000000000 +0700 +++ grub-extras-master/lua/grub_lib.c 2015-02-27 18:15:33.002264978 +0700 @@ -183,7 +183,27 @@ } } - lua_call (state, 3, 1); + if (! fs->label) + lua_pushnil (state); + else + { + int err; + char *label; + + err = fs->label (dev, &label); + if (err) + { + grub_errno = 0; + lua_pushnil (state); + } + else + { + lua_pushstring (state, label); + grub_free (label); + } + } + + lua_call (state, 4, 1); result = lua_tointeger (state, -1); lua_pop (state, 1); }
diff -Naru grub-extras-master.orig/lua/grub_lib.c grub-extras-master/lua/grub_lib.c --- grub-extras-master.orig/lua/grub_lib.c 2013-12-25 01:06:47.000000000 +0700 +++ grub-extras-master/lua/grub_lib.c 2015-02-27 18:15:33.002264978 +0700 @@ -183,7 +183,27 @@ } } - lua_call (state, 3, 1); + if (! fs->label) + lua_pushnil (state); + else + { + int err; + char *label; + + err = fs->label (dev, &label); + if (err) + { + grub_errno = 0; + lua_pushnil (state); + } + else + { + lua_pushstring (state, label); + grub_free (label); + } + } + + lua_call (state, 4, 1); result = lua_tointeger (state, -1); lua_pop (state, 1); }
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel