aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/env.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/env.cpp')
-rw-r--r--src/env.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/env.cpp b/src/env.cpp
index e6deec52..28ea51b0 100644
--- a/src/env.cpp
+++ b/src/env.cpp
@@ -449,12 +449,16 @@ void env_init(const struct config_paths_t *paths /* or NULL */)
is to insert valid data
*/
- /*
- Import environment variables
- */
- for (char **p = (environ ? environ : __environ); p && *p; p++)
+ /* Import environment variables. Walk backwards so that the first one out of any duplicates wins (#2784) */
+ const char * const * envp = (environ ? environ : __environ);
+ size_t i = 0;
+ while (envp && envp[i])
+ {
+ i++;
+ }
+ while (i--)
{
- const wcstring key_and_val = str2wcstring(*p); //like foo=bar
+ const wcstring key_and_val = str2wcstring(envp[i]); //like foo=bar
size_t eql = key_and_val.find(L'=');
if (eql == wcstring::npos)
{