Skip to content

Commit 6da2d9e

Browse files
Fix Issue 22614 - [Windows] tmpnam() in runPreprocessor generates roo… (dlang#22615)
Fix Issue 22614 - [Windows] tmpnam() in runPreprocessor generates root-drive paths, fails with permission denied for non-admin users
1 parent 40555fc commit 6da2d9e

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

compiler/src/dmd/link.d

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -958,9 +958,13 @@ public int runPreprocessor(Loc loc, const(char)[] cpp, const(char)[] filename, c
958958
version (Windows)
959959
{
960960
// generate unique temporary file name for preprocessed output
961-
const(char)* tmpname = tmpnam(null);
962-
assert(tmpname);
963-
const(char)[] ifilename = tmpname[0 .. strlen(tmpname) + 1];
961+
char[MAX_PATH] tempDir = void;
962+
char[MAX_PATH] tempFile = void;
963+
if (GetTempPathA(MAX_PATH, tempDir.ptr) == 0)
964+
return STATUS_FAILED;
965+
if (GetTempFileNameA(tempDir.ptr, "dmd", 0, tempFile.ptr) == 0)
966+
return STATUS_FAILED;
967+
const(char)[] ifilename = tempFile[0 .. strlen(tempFile.ptr) + 1];
964968
ifilename = xarraydup(ifilename);
965969
const(char)[] output = ifilename;
966970

0 commit comments

Comments
 (0)