From e73c944fc079f7f08a32270eb83854e3270b05e4 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Tue, 20 Feb 2018 22:47:49 +0000 Subject: [PATCH] lualoader: When restoring environment, only restore unchanged vars Track the latest value we've set an environment variable to, and only restore those that are unchanged from that. This gives us some leeway to make sure we're not clobbering variables overwritten by menu changes. --- stand/lua/config.lua | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/stand/lua/config.lua b/stand/lua/config.lua index 4d307ade4dd2..cf9118f50f83 100644 --- a/stand/lua/config.lua +++ b/stand/lua/config.lua @@ -142,13 +142,26 @@ function config.setCarouselIndex(id, idx) end function config.restoreEnv() + -- Examine changed environment variables for k, v in pairs(config.env_changed) do local restore_value = config.env_restore[k]; + if (restore_value == nil) then + -- This one doesn't need restored for some reason + goto continue; + end + local current_value = loader.getenv(k); + if (current_value ~= v) then + -- This was overwritten by some action taken on the menu + -- most likely; we'll leave it be. + goto continue; + end + restore_value = restore_value.value; if (restore_value ~= nil) then loader.setenv(k, restore_value); else loader.unsetenv(k); end + ::continue:: end config.env_changed = {}; @@ -156,12 +169,13 @@ function config.restoreEnv() end function config.setenv(k, v) - -- Do we need to track this change? - if (config.env_changed[k] == nil) then - config.env_changed[k] = true; - config.env_restore[k] = loader.getenv(k); + -- Track the original value for this if we haven't already + if (config.env_restore[k] == nil) then + config.env_restore[k] = {value = loader.getenv(k)}; end + config.env_changed[k] = v; + return loader.setenv(k, v); end