temporary files - what is the resolution?

Marco Leise Marco.Leise at gmx.de
Wed Jul 25 18:49:27 PDT 2012


From the DMD versioning talk I came to the changelog for 2.060 and found #7537 fixed (http://d.puremagic.com/issues/show_bug.cgi?id=7537), which I had to work around before.
Seeing as this is a basic C library function, I was wondering if D could have a modern version. Looking at the MSDN it seems, like Microsoft added quite a few functions to the Visual Studio C Runtime over the years:

           directory         generates  security enhanced¹

tmpnam_s   current working²  filename   yes
tmpnam     current working²  filename   no
_tempnam   TMP/user defined  filename   no
tmpfile_s  system root       FILE ptr³  yes
tmpfile    system root       FILE ptr³  no

¹ = http://msdn.microsoft.com/en-us/library/8ef0s5kh(v=vs.80).aspx
² = functions that use the current working directory require that you set it to the desired location first, which makes them difficult to use in a library, especially since the cwd is attached to the process and other user threads may not be prepared for sudden changes
³ = these files are automagically deleted when the process exists

It looks like "GetTempFileName" (http://msdn.microsoft.com/en-us/library/windows/desktop/aa364991(v=vs.85).aspx) is the actual operating system function that is used by the C Runtime. I'd like to see a cross-platform solution that uses GetTempFileName on Windows. The result should be usable as a D File. It is currently impossible to create a std.stream wrapped around a File.tmpfile, because it returns a C FILE pointer (and until 2.060, because of the administrator rights issue on Windows).
On Unix mkstemp (http://pubs.opengroup.org/onlinepubs/009695399/functions/mkstemp.html) looks like a pretty similar function as well. Unlike the Windows equivalent it returns an open file descriptor/handle in addition to the file name. In both cases the user has to delete the files after use. To me it looks they are flexible enough to write up set of cross-platform (Windows/MacOS X/Linux/FreeBSD) functions for temporary files.

The question is: Is the problem solved with the fixed bug, or is there interest in D functions for temporary files?

-- 
Marco



More information about the Digitalmars-d mailing list