Bug 7537 – `File.tmpfile` requires administrator rights on Windows

Status
REOPENED
Severity
normal
Priority
P3
Component
phobos
Product
D
Version
D2
Platform
x86_64
OS
Windows
Creation time
2012-02-18T00:42:44Z
Last change time
2024-12-01T16:14:55Z
Assigned to
No Owner
Creator
Denis Shelomovskii
Moved to GitHub: phobos#9923 →

Comments

Comment #0 by verylonglogin.reg — 2012-02-18T00:42:44Z
--- import std.stdio; void main() { File.tmpfile(); } --- dmd 2.058 compiled version running from non-administrator fails with: std.exception.ErrnoException Could not create temporary file with tmpfile() (Permission denied) at std\stdio.d(875)
Comment #1 by dlang-bugzilla — 2012-04-05T19:23:30Z
File.tmpfile is just a simple wrapper around core.stdc.stdio.tmpfile, so the issue is with the DMC's C standard library.
Comment #2 by lovelydear — 2012-04-19T09:01:44Z
This is not a bug. It works as intended. Should close.
Comment #3 by dlang-bugzilla — 2012-04-19T09:03:04Z
What?? How is this not a bug?
Comment #4 by lovelydear — 2012-04-19T09:09:13Z
(In reply to comment #3) > What?? How is this not a bug? The OS prevents to create the file, so tmpfile() throws an exception. I don't see how this can be considered a bug.
Comment #5 by dlang-bugzilla — 2012-04-19T09:10:28Z
The filename is chosen by the C runtime, not the operating system. It is a bug in the DigitalMars C runtime. It probably tries to use the hard-coded %WINDIR%\Temp directory, instead of the user profile directory or %TEMP%.
Comment #6 by lovelydear — 2012-04-19T09:19:52Z
Oh, I just saw the author of the issue. It's not "random Denis". Anyway, has a bug report been done in DMC C bugzilla ? Else this one will stay open forever, I'm affraid.
Comment #7 by bugzilla — 2012-04-19T11:23:55Z
(In reply to comment #5) > The filename is chosen by the C runtime, not the operating system. It is a bug > in the DigitalMars C runtime. It probably tries to use the hard-coded > %WINDIR%\Temp directory, instead of the user profile directory or %TEMP%. Actually, it uses stdio.h's _P_tmpdir, which on Windows is "\\". Did I say that implementation is rather old? I also noticed that Windows 7 does not allow writing to the root directory. XP allowed it.
Comment #8 by dlang-bugzilla — 2012-04-19T11:32:02Z
(In reply to comment #7) > XP allowed it. You mean, to administrator users? I don't think regular users can create files in the drive root on XP either: http://dump.thecybershadow.net/2d089ee536e35b4a8244f26f36be491c/00000814.png
Comment #9 by bugzilla — 2012-04-19T12:15:09Z
I have it fixed in snn.lib now. You can pick it up here: ftp://ftp.digitalmars.com/dmc.zip
Comment #10 by dlang-bugzilla — 2014-01-28T01:52:42Z
(In reply to comment #3) > What?? How is this not a bug? I may have been wrong here. The problem is not present on Win32, but on Win64 the MS runtime does what the DMC runtime used to do - attempt to create the file in the drive root. And it's not a bug, it's working according to the documentation: > The tmpfile function creates a temporary file and returns a pointer to that > stream. The temporary file is created in the root directory. To create a > temporary file in a directory other than the root, use tmpnam or tempnam in > conjunction with fopen. Conclusion: this function is horrible and needs to be replaced with something better. Some relevant discussion here: https://github.com/D-Programming-Language/phobos/pull/691
Comment #11 by bugzilla — 2019-12-12T16:58:52Z
Is this still not fixed?
Comment #12 by robert.schadek — 2024-12-01T16:14:55Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9923 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB