http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47439
Summary: Fun with scratch files on Windows MKTEMP only allows
for 26 files
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected], [email protected]
Reported by Claude Simone at
http://groups.google.com/group/comp.lang.fortran/msg/b1bf5ce50080e89e
Thread:
http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/8843f2317cb565cd
A) Not more than 26 temporary files are possible
To generate a temporay file, libgfortran/io/unix.c's tempfile calls the
system's mktemp, which according to Microsoft's API has the following property:
http://msdn.microsoft.com/en-us/library/34wc6k1f%28v=VS.80%29.aspx
"_mktemp preserves base and replaces the first trailing X with an alphabetic
character. _mktemp replaces the following trailing X's with a five-digit value;
this value is a unique number identifying the calling process, or in
multithreaded programs, the calling thread."
Hence, there are only "a" to "z" = 26 temporary files possible - at least
concurrently. Thus, for Windows systems, gfortran needs an own implementation
for mk(s)temp, which supports more. One possibility would be to change the BASE
handed to "mktemp".
B) Files are not unlinked
Newer Windows support for FILE_FLAG_DELETE_ON_CLOSE; cf. CreateFile Function at
http://msdn.microsoft.com/en-us/library/aa363858%28VS.85%29.aspx
See also http://msdn.microsoft.com/en-us/library/yeby3zcb%28v=VS.80%29.aspx for
"D" and "_O_TEMPORARY" in fopen and _wfopen.
However, in principle on exit libgfortran's
static void __attribute__((destructor))
cleanup (void)
should be called, which should delete files.