aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2023-12-13 16:52:14 +0000
committerKyle Evans <kevans@FreeBSD.org>2023-12-13 16:52:14 +0000
commitd04415c520b031fb8eb93cb252e4acee66149c87 (patch)
treed981c487be759fdbf0f277931f5e4e340fefdd3b
parenta206524709bdfbd577bcfe76676da80b8250f84c (diff)
-rw-r--r--stand/lua/core.lua28
1 files changed, 24 insertions, 4 deletions
diff --git a/stand/lua/core.lua b/stand/lua/core.lua
index c7581b296b8f..9226de564348 100644
--- a/stand/lua/core.lua
+++ b/stand/lua/core.lua
@@ -201,17 +201,18 @@ function core.kernelList()
return core.cached_kernels
end
- local k = loader.getenv("kernel")
+ local default_kernel = loader.getenv("kernel")
local v = loader.getenv("kernels")
local autodetect = loader.getenv("kernels_autodetect") or ""
local kernels = {}
local unique = {}
local i = 0
- if k ~= nil then
+
+ if default_kernel then
i = i + 1
- kernels[i] = k
- unique[k] = true
+ kernels[i] = default_kernel
+ unique[default_kernel] = true
end
if v ~= nil then
@@ -239,6 +240,8 @@ function core.kernelList()
return core.cached_kernels
end
+ local present = {}
+
-- Automatically detect other bootable kernel directories using a
-- heuristic. Any directory in /boot that contains an ordinary file
-- named "kernel" is considered eligible.
@@ -267,8 +270,25 @@ function core.kernelList()
unique[file] = true
end
+ present[file] = true
+
::continue::
end
+
+ -- If we found more than one kernel, prune the "kernel" specified kernel
+ -- off of the list if it wasn't found during traversal. If we didn't
+ -- actually find any kernels, we just assume that they know what they're
+ -- doing and leave it alone.
+ if default_kernel and not present[default_kernel] and #kernels > 1 then
+ for i = 1, #kernels do
+ if i == #kernels then
+ kernels[i] = nil
+ else
+ kernels[i] = kernels[i + 1]
+ end
+ end
+ end
+
core.cached_kernels = kernels
return core.cached_kernels
end