Trouble with MinGW's mkstemp

Eli Zaretskii <eliz-mXXj517/[email protected]>
Newsgroups gmane.comp.gnu.mingw.user
Message-ID <[email protected]>
The simple test program below almost always fails on my system.
"Almost always" means that it succeeds to create and open a temporary
file once every 6 invocations, on the average, and fails for all the
rest.  When it fails, the value of errno is mostly EINVAL, but on a
couple of occasions I saw ENOENT.

If I step with a debugger into __mingw_mkstemp, I see that
__mingw_crypto_tmpname in most cases generates a file name that is
invalid on Windows filesystems: it includes characters whose value is
below 32, and trying to create such files fails with EINVAL.  I'm
guessing that the few cases where I saw ENOENT were because the
generated file name included characters above decimal 31, but those
which are not allowed, like a slash or a backslash.  And since
__mingw_mkstemp only retries with a different file name if the error
is EEXIST, it bails out immediately after trying such file names.

This is with the latest MinGW runtime 5.2 on a Windows XP system, with
MinGW GCC 7.3.0 and Binutils 2.31.1.

Did I miss something obvious, or is this a real bug?

Here's the test program.  Invoke it with a single argument that is the
base-name part of the template to be passed to mkstemp, like "XXXXXX"
or "fooXXXXXX".

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main (int argc, char *argv[])
{
  if (argc > 1)
    {
      char tmpl[FILENAME_MAX];
      char *tev = getenv ("TMPDIR");
      if (!tev)
	tev = getenv ("TEMP");
      if (tev)
	{
	  int fd;
	  strcpy (tmpl, tev);
	  strcat (tmpl, "/");
	  strcat (tmpl, argv[1]);
	  fd = mkstemp (tmpl);
	  printf ("%s => fd: %d\n", tmpl, fd);
	}
      else
	fprintf (stderr, "No usable TMP variable!\n");
    }
  return 0;
}

_______________________________________________
MinGW-Users mailing list
[email protected]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.osdn.me/mailman/listinfo/mingw-users
Also: mailto:[email protected]?subject=unsubscribe
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.