From dfb8d9d87fca9817fc4d42bd137735efc3272a36 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 20 Dec 2022 22:25:08 -0600 Subject: [PATCH 1/2] Fix PATH environment variable handling on Windows PATH needs to be matched case-insensitively on Windows or we will just clobber the pre-existing PATH --- src/process.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/process.cpp b/src/process.cpp index 2b6c1507..8783db8c 100644 --- a/src/process.cpp +++ b/src/process.cpp @@ -279,8 +279,21 @@ std::string parse_env_val(bp::native_environment &env, const std::string_view &v ss.write(pos, (dollar - pos)); auto var_begin = next + 1; auto var_end = find_match(next, std::end(val_raw)); + auto var_name = std::string { var_begin, var_end }; - ss << env[std::string { var_begin, var_end }].to_string(); +#ifdef _WIN32 + // Windows treats environment variable names in a case-insensitive manner, + // so we look for a case-insensitive match here. This is critical for + // correctly appending to PATH on Windows. + auto itr = std::find_if(env.cbegin(), env.cend(), + [&](const auto &e) { return boost::iequals(e.get_name(), var_name); }); + if(itr != env.cend()) { + // Use an existing case-insensitive match + var_name = itr->get_name(); + } +#endif + + ss << env[var_name].to_string(); pos = var_end + 1; next = var_end; From 6c5a323b4a2e8efdb60484aabb8e7d72ddc7c567 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 20 Dec 2022 22:26:35 -0600 Subject: [PATCH 2/2] Use the proper environment variable for the Program Files (x86) folder --- src_assets/windows/assets/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_assets/windows/assets/apps.json b/src_assets/windows/assets/apps.json index de4847c3..0b106ae8 100644 --- a/src_assets/windows/assets/apps.json +++ b/src_assets/windows/assets/apps.json @@ -1,6 +1,6 @@ { "env": { - "PATH": "$(PATH);C:\\Program Files (x86)\\Steam" + "PATH": "$(PATH);$(ProgramFiles(x86))\\Steam" }, "apps": [ {