> From: Bruno Haible <br...@clisp.org> > Cc: la...@gnus.org, 57...@debbugs.gnu.org, jporterb...@gmail.com > Date: Tue, 16 Aug 2022 15:35:17 +0200 > > Eli Zaretskii wrote: > > The problem is that callers of > > make-temp-file reasonably expect it to return a new name every call. > > And evidently, it does that on GNU/Linux (not sure how, given that the > > tempname.c code is supposed to be in glibc?). So if there's no > > intention to change gen_tempname on non-glibc platforms so that it > > doesn't repeat the same "random characters" upon each call, I think > > Emacs should call a different function to generate "random" names of > > temporary files, for consistency across platforms if not for other > > reasons. > > You are making incorrect assumptions or hypotheses.
They are neither assumptions nor hypotheses. They are what I actually saw by stepping with a debugger into the code. > I am adding the unit test below. It proves that (at least) on Linux, > FreeBSD 11, NetBSD 7, OpenBSD 6.0, macOS, AIX 7.1, Solaris 10, > Cygwin, and native Windows, gen_tempname *does* return a new file > name on each call, with a very high probability. > > So, gen_tempname does *not* repeat the same "random characters" upon each > call. Well, it does here, when called from Emacs in the particular scenario of the unit test I was looking into. Looking at your test program, I see that you generate the seconds file name without deleting the first one. When a file by the first generated name already exists, gen_tempname will indeed generate a different name. But in the scenario I described, Emacs creates one temporary file, uses it, then deletes it, and only after that creates another file. In terms of your test program, you need to move the first unlink call to before the second call to gen_tempname. Then your test program will faithfully reproduce what Emacs does in the case in point.