[distcc] g_mkstmp() replacement for tempfile.c

shawn shawnlandden at gmail.com
Mon Jun 4 19:38:46 MDT 2012


from tempfile.c
==

* It would be nice if we could use a standard function, but I don't
* think any of them are adequate: we need to control the extension
* and know the filename.  tmpfile() does not give back the filename.
* tmpnam() is insecure.  mkstemp() does not allow us to set the
* extension.
*
* It sucks that there is no standard function.  The implementation
* below is inspired by the __gen_tempname() code in glibc; hopefully
* it will be secure on all platforms.

===
well, such a thing DOES exist, in glib:

http://developer.gnome.org/glib/2.33/glib-File-Utilities.html#g-mkstemp

interested in switching?
==


gint                g_mkstemp                           (gchar *tmpl);

Opens a temporary file. See the mkstemp() documentation on most
UNIX-like systems.

The parameter is a string that should follow the rules for mkstemp()
templates, i.e. contain the string "XXXXXX". g_mkstemp() is slightly
more flexible than mkstemp() in that the sequence does not have to occur
at the very end of the template. The X string will be modified to form
the name of a file that didn't exist. The string should be in the GLib
file name encoding. Most importantly, on Windows it should be in UTF-8.

tmpl :
template filename. [type filename]

Returns :
A file handle (as from open()) to the file opened for reading and
writing. The file is opened in binary mode on platforms where there is a
difference. The file handle should be closed with close(). In case of
errors, -1 is returned and errno will be set.



More information about the distcc mailing list