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 #7378)
diff --git a/src/fileio.c b/src/fileio.c
index 27e9aae..6606168 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5167,17 +5167,24 @@
# 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)
diff --git a/src/version.c b/src/version.c
index 7b7bea9..8c4c3fa 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2055,
+/**/
2054,
/**/
2053,