--- 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)
File.tmpfile is just a simple wrapper around core.stdc.stdio.tmpfile, so the issue is with the DMC's C standard library.
This is not a bug. It works as intended. Should close.
What?? How is this not a bug?
(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.
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%.
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.
(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.
(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
I have it fixed in snn.lib now. You can pick it up here: ftp://ftp.digitalmars.com/dmc.zip
(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
Is this still not fixed?
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
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル