forked from enlightenment/efl
Eina: Add support for file extensions in eina_mkstemp
Using mkstemps
This commit is contained in:
parent
2c4ae3fe6f
commit
0fdb02fb51
|
@ -334,15 +334,19 @@ EAPI int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Sta
|
||||||
* @brief Generate and create a uniquely named temporary file from template.
|
* @brief Generate and create a uniquely named temporary file from template.
|
||||||
* Generated file is opened with the open(2) O_EXCL flag.
|
* Generated file is opened with the open(2) O_EXCL flag.
|
||||||
*
|
*
|
||||||
* @param [in] templatename is a string. The last six characters of templatename must be XXXXXX.
|
* @param [in] templatename is a string. It must contain the six characters 'XXXXXX'
|
||||||
|
* at the end or directly followed by an extension as in 'prefixXXXXXX.ext'.
|
||||||
* @param [out] path Where to put the name of the created file. If not NULL
|
* @param [out] path Where to put the name of the created file. If not NULL
|
||||||
* should be released by eina_tmpstr_del.
|
* should be released by eina_tmpstr_del.
|
||||||
* @return On success @c file descriptor of the temporary file is returned,
|
* @return On success @c file descriptor of the temporary file is returned,
|
||||||
* On error @c -1 is returned, in which case errno is set appropriately.
|
* On error @c -1 is returned, in which case errno is set appropriately.
|
||||||
*
|
*
|
||||||
* This function calls mkstemp, generates a unique temporary filename
|
* This function calls mkstemp[s], generates a unique temporary filename
|
||||||
* from template, creates and opens the file, and returns an open file
|
* from template, creates and opens the file, and returns an open file
|
||||||
* descriptor for the file.
|
* descriptor for the file.
|
||||||
|
*
|
||||||
|
* If a filename extension was specified in @a templatename, then the new @a path
|
||||||
|
* will also contain this extension (since 1.10).
|
||||||
*
|
*
|
||||||
* @see eina_file_mkdtemp()
|
* @see eina_file_mkdtemp()
|
||||||
* @since 1.8
|
* @since 1.8
|
||||||
|
|
|
@ -898,7 +898,8 @@ eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
|
||||||
{
|
{
|
||||||
char buffer[PATH_MAX];
|
char buffer[PATH_MAX];
|
||||||
const char *tmpdir = NULL;
|
const char *tmpdir = NULL;
|
||||||
int fd;
|
const char *XXXXXX = NULL;
|
||||||
|
int fd, len;
|
||||||
mode_t old_umask;
|
mode_t old_umask;
|
||||||
|
|
||||||
#ifndef HAVE_EVIL
|
#ifndef HAVE_EVIL
|
||||||
|
@ -911,14 +912,20 @@ eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
|
||||||
tmpdir = (char *)evil_tmpdir_get();
|
tmpdir = (char *)evil_tmpdir_get();
|
||||||
#endif /* ! HAVE_EVIL */
|
#endif /* ! HAVE_EVIL */
|
||||||
|
|
||||||
snprintf(buffer, PATH_MAX, "%s/%s", tmpdir, templatename);
|
len = snprintf(buffer, PATH_MAX, "%s/%s", tmpdir, templatename);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure temp file is created with secure permissions,
|
* Make sure temp file is created with secure permissions,
|
||||||
* http://man7.org/linux/man-pages/man3/mkstemp.3.html#NOTES
|
* http://man7.org/linux/man-pages/man3/mkstemp.3.html#NOTES
|
||||||
*/
|
*/
|
||||||
old_umask = umask(S_IRWXG|S_IRWXO);
|
old_umask = umask(S_IRWXG|S_IRWXO);
|
||||||
fd = mkstemp(buffer);
|
if ((XXXXXX = strstr(templatename, "XXXXXX.")) != NULL)
|
||||||
|
{
|
||||||
|
int suffixlen = templatename + len - XXXXXX - 6;
|
||||||
|
fd = mkstemps(buffer, suffixlen);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fd = mkstemp(buffer);
|
||||||
umask(old_umask);
|
umask(old_umask);
|
||||||
|
|
||||||
if (path) *path = eina_tmpstr_add(buffer);
|
if (path) *path = eina_tmpstr_add(buffer);
|
||||||
|
|
Loading…
Reference in New Issue