From d03c822884bb0561bce72ef34139acf927687767 Mon Sep 17 00:00:00 2001 From: kevans Date: Tue, 10 Sep 2019 21:30:38 +0000 Subject: [PATCH] lualoader: Revert to ASCII menu frame for serial console The box drawing characters we use aren't necessarily safe with a serial console; for instance, in the report by npn@, these were causing his xterm to send back a sequence that lua picked up as input and halted the boot. This is less than ideal. Fallback to ASCII frames for console with 'comconsole' in it. This is a partial revert r338108 by imp@ -- instead of removing the menu entirely and disabling color/cursor sequences, just reverting the default frame to ASCII is enough to not break in this setup. Reported by: npn Triaged and recommended by: tsoome --- stand/lua/core.lua | 10 ++++++++++ stand/lua/drawer.lua | 9 ++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/stand/lua/core.lua b/stand/lua/core.lua index 722381e0a066..61476a2ed721 100644 --- a/stand/lua/core.lua +++ b/stand/lua/core.lua @@ -325,6 +325,16 @@ function core.isZFSBoot() return false end +function core.isSerialConsole() + local c = loader.getenv("console") + if c ~= nil then + if c:find("comconsole") ~= nil then + return true + end + end + return false +end + function core.isSerialBoot() local s = loader.getenv("boot_serial") if s ~= nil then diff --git a/stand/lua/drawer.lua b/stand/lua/drawer.lua index 18030979398c..6a5b62b79817 100644 --- a/stand/lua/drawer.lua +++ b/stand/lua/drawer.lua @@ -144,13 +144,20 @@ local function drawmenu(menudef) return alias_table end +local function defaultframe() + if core.isSerialConsole() then + return "ascii" + end + return "double" +end + local function drawbox() local x = menu_position.x - 3 local y = menu_position.y - 1 local w = frame_size.w local h = frame_size.h - local framestyle = loader.getenv("loader_menu_frame") or "double" + local framestyle = loader.getenv("loader_menu_frame") or defaultframe() local framespec = drawer.frame_styles[framestyle] -- If we don't have a framespec for the current frame style, just don't -- draw a box.