diff options
| author | Kyle Evans <kevans@FreeBSD.org> | 2023-12-13 16:52:14 +0000 |
|---|---|---|
| committer | Kyle Evans <kevans@FreeBSD.org> | 2023-12-13 16:52:14 +0000 |
| commit | d04415c520b031fb8eb93cb252e4acee66149c87 (patch) | |
| tree | d981c487be759fdbf0f277931f5e4e340fefdd3b | |
| parent | a206524709bdfbd577bcfe76676da80b8250f84c (diff) | |
| -rw-r--r-- | stand/lua/core.lua | 28 |
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 |
