win: avoid duplicate separators in $PATH #12869

Seems like redundant env var separators (";" on Windows) in $PATH can
cause weird behavior. From #7377:

> After some time, system(['win32yank', '-o']) and system('win32yank -o')
> start returning different results: specifically first returns an
> empty string.
>
> 1. $PATH weirdly contains double semicolon followed by path to the
>    “installation directory” (unpacked directory from archive).
> 2. If I run `let $PATH=substitute($PATH, ';;', ';', 'g')` the problem is fixed.

close #7377
ref 224f99b85d
This commit is contained in:
Justin M. Keyes
2020-09-08 20:47:22 -07:00
committed by GitHub
parent df6b49b4ee
commit 59712f6dbe
2 changed files with 13 additions and 4 deletions

View File

@@ -1176,7 +1176,9 @@ bool os_setenv_append_path(const char *fname)
temp[0] = NUL;
} else {
xstrlcpy(temp, path, newlen);
xstrlcat(temp, ENV_SEPSTR, newlen);
if (ENV_SEPCHAR != path[pathlen - 1]) {
xstrlcat(temp, ENV_SEPSTR, newlen);
}
}
xstrlcat(temp, os_buf, newlen);
os_setenv("PATH", temp, 1);