lua loader: Auto detect eligible list of kernels to boot

Reviewed by:	imp, kevans
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D14419
This commit is contained in:
cem 2018-02-18 01:16:37 +00:00
parent 063978146b
commit 78d52a589d

View File

@ -127,18 +127,48 @@ function core.kernelList()
local v = loader.getenv("kernels") or "";
local kernels = {};
local unique = {};
local i = 0;
if (k ~= nil) then
i = i + 1;
kernels[i] = k;
unique[k] = true;
end
for n in v:gmatch("([^; ]+)[; ]?") do
if (n ~= k) then
if (unique[n] == nil) then
i = i + 1;
kernels[i] = n;
unique[n] = true;
end
end
-- Automatically detect other bootable kernel directories using a
-- heuristic. Any directory in /boot that contains an ordinary file
-- named "kernel" is considered eligible.
for file in lfs.dir("/boot") do
local fname = "/boot/" .. file;
if (file == "." or file == "..") then
goto continue;
end
if (lfs.attributes(fname, "mode") ~= "directory") then
goto continue;
end
if (lfs.attributes(fname .. "/kernel", "mode") ~= "file") then
goto continue;
end
if (unique[file] == nil) then
i = i + 1;
kernels[i] = file;
unique[file] = true;
end
::continue::
end
return kernels;
end