Mercurial > vim
changeset 23017:d80faed40bec v8.2.2055
patch 8.2.2055: MS-Windows: two Vim instances may use the same temp file
Commit: https://github.com/vim/vim/commit/2472a74be4dedfeaff22314f31cf9787618163d1
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Nov 26 19:47:28 2020 +0100
patch 8.2.2055: MS-Windows: two Vim instances may use the same temp file
Problem: MS-Windows: two Vim instances may use the same temp file.
Solution: Use the process ID for the temp name. (Ken Takata, closes https://github.com/vim/vim/issues/7378)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 26 Nov 2020 20:00:06 +0100 |
parents | 7f40dcbf9222 |
children | 4007526cb1ed |
files | src/fileio.c src/version.c |
diffstat | 2 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.c +++ b/src/fileio.c @@ -5167,17 +5167,24 @@ vim_tempname( # ifdef MSWIN WCHAR wszTempFile[_MAX_PATH + 1]; WCHAR buf4[4]; + WCHAR *chartab = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char_u *retval; char_u *p; + long i; wcscpy(itmp, L""); if (GetTempPathW(_MAX_PATH, wszTempFile) == 0) { wszTempFile[0] = L'.'; // GetTempPathW() failed, use current dir - wszTempFile[1] = NUL; + wszTempFile[1] = L'\\'; + wszTempFile[2] = NUL; } wcscpy(buf4, L"VIM"); - buf4[2] = extra_char; // make it "VIa", "VIb", etc. + + // randomize the name to avoid collisions + i = mch_get_pid() + extra_char; + buf4[1] = chartab[i % 36]; + buf4[2] = chartab[101 * i % 36]; if (GetTempFileNameW(wszTempFile, buf4, 0, itmp) == 0) return NULL; if (!keep)