forked from enlightenment/efl
Evil : move mkstemp(s) and mkdtemp in eina_file directly
Summary: Also replace all mkstemp(s) and mkdtemp with the eina_file functions in the source Test Plan: run eina_file test Reviewers: raster Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D12170
This commit is contained in:
parent
509e3fcc7a
commit
eacee53c2e
|
@ -17,46 +17,46 @@ main(void)
|
|||
const char *key = "This is a crypto key";
|
||||
const char *key_bad = "This is another crypto key";
|
||||
|
||||
char *file = strdup("/tmp/eet_cipher_example_XXXXXX");
|
||||
Eet_File *ef;
|
||||
char *test;
|
||||
int size;
|
||||
int tmpfd;
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
eet_init();
|
||||
|
||||
if (-1 == (tmpfd = mkstemp(file)) || !!close(tmpfd))
|
||||
if (-1 == (tmpfd = eina_file_mkstemp("eet_cipher_example_XXXXXX", &tmpf)) || !!close(tmpfd))
|
||||
{
|
||||
fprintf(
|
||||
stderr, "ERROR: could not create temporary file (%s) : %s\n",
|
||||
file, strerror(errno));
|
||||
tmpf, strerror(errno));
|
||||
goto panic;
|
||||
}
|
||||
|
||||
/* Crypt an eet file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
|
||||
if (!ef)
|
||||
{
|
||||
fprintf(
|
||||
stderr, "ERROR: could not access file (%s).\n", file);
|
||||
stderr, "ERROR: could not access file (%s).\n", tmpf);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0, key))
|
||||
{
|
||||
fprintf(
|
||||
stderr, "ERROR: could not access file (%s).\n", file);
|
||||
stderr, "ERROR: could not access file (%s).\n", tmpf);
|
||||
goto error;
|
||||
}
|
||||
|
||||
eet_close(ef);
|
||||
|
||||
/* Decrypt an eet file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
if (!ef)
|
||||
{
|
||||
fprintf(
|
||||
stderr, "ERROR: could not access file (%s).\n", file);
|
||||
stderr, "ERROR: could not access file (%s).\n", tmpf);
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,7 @@ main(void)
|
|||
{
|
||||
fprintf(
|
||||
stderr, "ERROR: could decript contents on file %s, with key %s.\n",
|
||||
file, key);
|
||||
tmpf, key);
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -86,11 +86,11 @@ main(void)
|
|||
eet_close(ef);
|
||||
|
||||
/* Decrypt an eet file, now using our BAD key!! */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
if (!ef)
|
||||
{
|
||||
fprintf(
|
||||
stderr, "ERROR: could not access file (%s).\n", file);
|
||||
stderr, "ERROR: could not access file (%s).\n", tmpf);
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -102,18 +102,19 @@ main(void)
|
|||
fprintf(
|
||||
stderr, "ERROR: something is wrong with the contents of %s, as"
|
||||
" we accessed it with a different key and it decripted our"
|
||||
" information right.\n", file);
|
||||
" information right.\n", tmpf);
|
||||
goto error;
|
||||
}
|
||||
|
||||
eet_close(ef);
|
||||
|
||||
error:
|
||||
if (unlink(file) != 0)
|
||||
if (unlink(tmpf) != 0)
|
||||
{
|
||||
fprintf(
|
||||
stderr, "ERROR: could not unlink file (%s).\n", file);
|
||||
stderr, "ERROR: could not unlink file (%s)%d.\n", tmpf, errno);
|
||||
}
|
||||
eina_tmpstr_del(tmpf);
|
||||
|
||||
panic:
|
||||
eet_shutdown();
|
||||
|
|
|
@ -310,7 +310,7 @@ class @beta Efl.Net.Dialer_Http extends Efl.Loop_Consumer implements Efl.Net.Dia
|
|||
|
||||
If a new, empty session is to be used, start with an
|
||||
empty or non-existent file such as created with
|
||||
mkstemp() or tmpfile(). Alternatively use an
|
||||
eina_file_mkstemp() or tmpfile(). Alternatively use an
|
||||
empty string ("") to store it in memory.
|
||||
|
||||
If you want to start from a pre-existing cookie jar
|
||||
|
|
|
@ -273,7 +273,7 @@ class @beta Efl.Net.Dialer_Websocket extends Efl.Loop_Consumer implements Efl.Ne
|
|||
|
||||
If a new, empty session is to be used, start with an
|
||||
empty or non-existent file such as one created with
|
||||
mkstemp() or tmpfile(). Alternatively use an
|
||||
eina_file_mkstemp() or tmpfile(). Alternatively use an
|
||||
empty string ("") to keep it in memory.
|
||||
|
||||
If you want to start from a pre-existent cookie jar
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include <errno.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <evil_private.h> /* windows.h fcntl mkstemps mkdtemp */
|
||||
# include <evil_private.h> /* windows.h */
|
||||
#endif
|
||||
|
||||
#define COPY_BLOCKSIZE (4 * 1024 * 1024)
|
||||
|
@ -993,98 +993,6 @@ eina_file_copy(const char *src, const char *dst, Eina_File_Copy_Flags flags, Ein
|
|||
return success;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
|
||||
{
|
||||
char buffer[PATH_MAX];
|
||||
const char *XXXXXX = NULL, *sep;
|
||||
int fd, len;
|
||||
#ifndef _WIN32
|
||||
mode_t old_umask;
|
||||
#endif
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, -1);
|
||||
|
||||
sep = strchr(templatename, '/');
|
||||
#ifdef _WIN32
|
||||
if (!sep) sep = strchr(templatename, '\\');
|
||||
#endif
|
||||
if (sep)
|
||||
{
|
||||
len = eina_strlcpy(buffer, templatename, sizeof(buffer));
|
||||
}
|
||||
else
|
||||
{
|
||||
len = eina_file_path_join(buffer, sizeof(buffer),
|
||||
eina_environment_tmp_get(), templatename);
|
||||
}
|
||||
|
||||
/*
|
||||
* Unix:
|
||||
* Make sure temp file is created with secure permissions,
|
||||
* http://man7.org/linux/man-pages/man3/mkstemp.3.html#NOTES
|
||||
*
|
||||
* Windows:
|
||||
* no secure permissions anyway and the umask use below makes
|
||||
* the file read-only.
|
||||
*/
|
||||
#ifndef _WIN32
|
||||
old_umask = umask(S_IRWXG|S_IRWXO);
|
||||
#endif
|
||||
if ((XXXXXX = strstr(buffer, "XXXXXX.")) != NULL)
|
||||
{
|
||||
int suffixlen = buffer + len - XXXXXX - 6;
|
||||
fd = mkstemps(buffer, suffixlen);
|
||||
}
|
||||
else
|
||||
fd = mkstemp(buffer);
|
||||
#ifndef _WIN32
|
||||
umask(old_umask);
|
||||
#endif
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
if (path) *path = NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (path) *path = eina_tmpstr_add(buffer);
|
||||
return fd;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path)
|
||||
{
|
||||
char buffer[PATH_MAX];
|
||||
char *tmpdirname, *sep;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, EINA_FALSE);
|
||||
|
||||
sep = strchr(templatename, '/');
|
||||
#ifdef _WIN32
|
||||
if (!sep) sep = strchr(templatename, '\\');
|
||||
#endif
|
||||
if (sep)
|
||||
{
|
||||
eina_strlcpy(buffer, templatename, sizeof(buffer));
|
||||
}
|
||||
else
|
||||
{
|
||||
eina_file_path_join(buffer, sizeof(buffer),
|
||||
eina_environment_tmp_get(), templatename);
|
||||
}
|
||||
|
||||
tmpdirname = mkdtemp(buffer);
|
||||
if (tmpdirname == NULL)
|
||||
{
|
||||
if (path) *path = NULL;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
if (path) *path = eina_tmpstr_add(tmpdirname);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
/*============================================================================*
|
||||
* Global *
|
||||
*============================================================================*/
|
||||
|
|
|
@ -1509,3 +1509,79 @@ skip3:
|
|||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
EAPI int
|
||||
eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
|
||||
{
|
||||
char buffer[PATH_MAX];
|
||||
const char *XXXXXX = NULL, *sep;
|
||||
int fd, len;
|
||||
mode_t old_umask;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, -1);
|
||||
|
||||
sep = strchr(templatename, '/');
|
||||
if (sep)
|
||||
{
|
||||
len = eina_strlcpy(buffer, templatename, sizeof(buffer));
|
||||
}
|
||||
else
|
||||
{
|
||||
len = eina_file_path_join(buffer, sizeof(buffer),
|
||||
eina_environment_tmp_get(), templatename);
|
||||
}
|
||||
|
||||
/*
|
||||
* Unix:
|
||||
* Make sure temp file is created with secure permissions,
|
||||
* http://man7.org/linux/man-pages/man3/mkstemp.3.html#NOTES
|
||||
*/
|
||||
old_umask = umask(S_IRWXG|S_IRWXO);
|
||||
if ((XXXXXX = strstr(buffer, "XXXXXX.")) != NULL)
|
||||
{
|
||||
int suffixlen = buffer + len - XXXXXX - 6;
|
||||
fd = mkstemps(buffer, suffixlen);
|
||||
}
|
||||
else
|
||||
fd = mkstemp(buffer);
|
||||
umask(old_umask);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
if (path) *path = NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (path) *path = eina_tmpstr_add(buffer);
|
||||
return fd;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path)
|
||||
{
|
||||
char buffer[PATH_MAX];
|
||||
char *tmpdirname, *sep;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, EINA_FALSE);
|
||||
|
||||
sep = strchr(templatename, '/');
|
||||
if (sep)
|
||||
{
|
||||
eina_strlcpy(buffer, templatename, sizeof(buffer));
|
||||
}
|
||||
else
|
||||
{
|
||||
eina_file_path_join(buffer, sizeof(buffer),
|
||||
eina_environment_tmp_get(), templatename);
|
||||
}
|
||||
|
||||
tmpdirname = mkdtemp(buffer);
|
||||
if (tmpdirname == NULL)
|
||||
{
|
||||
if (path) *path = NULL;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
if (path) *path = eina_tmpstr_add(tmpdirname);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <sys/stat.h>
|
||||
|
||||
#include <evil_private.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "eina_config.h"
|
||||
#include "eina_private.h"
|
||||
|
@ -397,6 +398,114 @@ _eina_file_sep_find(char *s)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static unsigned char _eina_file_random_uchar(unsigned char *c)
|
||||
{
|
||||
/*
|
||||
* Helper function for mktemp.
|
||||
*
|
||||
* Only characters from 'a' to 'z' and '0' to '9' are considered
|
||||
* because on Windows, file system is case insensitive. That means
|
||||
* 36 possible values.
|
||||
* To increase randomness, we consider the greatest multiple of 36
|
||||
* within 255 : 7*36 = 252, that is, values from 0 to 251 and choose
|
||||
* a random value in this interval.
|
||||
*/
|
||||
do {
|
||||
BCryptGenRandom(_eina_bcrypt_provider, c, sizeof(UCHAR), 0);
|
||||
} while (*c > 251);
|
||||
|
||||
*c = '0' + *c % 36;
|
||||
if (*c > '9')
|
||||
*c += 'a' - '9' - 1;
|
||||
|
||||
return *c;
|
||||
}
|
||||
|
||||
static int
|
||||
_eina_file_mkstemp_init(char *__template, size_t *length, int suffixlen)
|
||||
{
|
||||
if (!__template || (suffixlen < 0))
|
||||
{
|
||||
errno = EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*length = strlen(__template);
|
||||
if ((*length < (6 + (size_t)suffixlen))
|
||||
|| (strncmp(__template + *length - 6 - suffixlen, "XXXXXX", 6) != 0))
|
||||
{
|
||||
errno = EINVAL;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
_eina_file_tmpname(char *__template, size_t length, int suffixlen)
|
||||
{
|
||||
unsigned char *suffix;
|
||||
|
||||
suffix = (unsigned char *)(__template + length - 6 - suffixlen);
|
||||
*suffix = _eina_file_random_uchar(suffix);
|
||||
suffix++;
|
||||
*suffix = _eina_file_random_uchar(suffix);
|
||||
suffix++;
|
||||
*suffix = _eina_file_random_uchar(suffix);
|
||||
suffix++;
|
||||
*suffix = _eina_file_random_uchar(suffix);
|
||||
suffix++;
|
||||
*suffix = _eina_file_random_uchar(suffix);
|
||||
suffix++;
|
||||
*suffix = _eina_file_random_uchar(suffix);
|
||||
suffix++;
|
||||
}
|
||||
|
||||
static int
|
||||
_eina_file_mkstemps(char *__template, int suffixlen)
|
||||
{
|
||||
size_t length;
|
||||
int i;
|
||||
|
||||
if (!_eina_file_mkstemp_init(__template, &length, suffixlen))
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < 32768; i++)
|
||||
{
|
||||
int fd;
|
||||
|
||||
_eina_file_tmpname(__template, length, suffixlen);
|
||||
|
||||
fd = _open(__template,
|
||||
_O_RDWR | _O_BINARY | _O_CREAT | _O_EXCL,
|
||||
_S_IREAD | _S_IWRITE);
|
||||
if (fd >= 0)
|
||||
return fd;
|
||||
}
|
||||
|
||||
errno = EEXIST;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static char *
|
||||
_eina_file_mkdtemp(char *__template)
|
||||
{
|
||||
size_t length;
|
||||
int i;
|
||||
|
||||
if (!_eina_file_mkstemp_init(__template, &length, 0))
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < 32768; i++)
|
||||
{
|
||||
_eina_file_tmpname(__template, length, 0);
|
||||
if (CreateDirectory(__template, NULL) == TRUE)
|
||||
return __template;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @endcond
|
||||
*/
|
||||
|
@ -1093,3 +1202,70 @@ eina_file_statat(void *container EINA_UNUSED, Eina_File_Direct_Info *info, Eina_
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
eina_file_mkstemp(const char *templatename, Eina_Tmpstr **path)
|
||||
{
|
||||
char buffer[PATH_MAX];
|
||||
const char *XXXXXX = NULL, *sep;
|
||||
int fd, len;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, -1);
|
||||
|
||||
sep = strchr(templatename, '/');
|
||||
if (!sep) sep = strchr(templatename, '\\');
|
||||
if (sep)
|
||||
{
|
||||
len = eina_strlcpy(buffer, templatename, sizeof(buffer));
|
||||
}
|
||||
else
|
||||
{
|
||||
len = eina_file_path_join(buffer, sizeof(buffer),
|
||||
eina_environment_tmp_get(), templatename);
|
||||
}
|
||||
|
||||
if ((XXXXXX = strstr(buffer, "XXXXXX.")) != NULL)
|
||||
fd = _eina_file_mkstemps(buffer, buffer + len - XXXXXX - 6);
|
||||
else
|
||||
fd = _eina_file_mkstemps(buffer, 0);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
if (path) *path = NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (path) *path = eina_tmpstr_add(buffer);
|
||||
return fd;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
eina_file_mkdtemp(const char *templatename, Eina_Tmpstr **path)
|
||||
{
|
||||
char buffer[PATH_MAX];
|
||||
char *tmpdirname, *sep;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(templatename, EINA_FALSE);
|
||||
|
||||
sep = strchr(templatename, '/');
|
||||
if (!sep) sep = strchr(templatename, '\\');
|
||||
if (sep)
|
||||
{
|
||||
eina_strlcpy(buffer, templatename, sizeof(buffer));
|
||||
}
|
||||
else
|
||||
{
|
||||
eina_file_path_join(buffer, sizeof(buffer),
|
||||
eina_environment_tmp_get(), templatename);
|
||||
}
|
||||
|
||||
tmpdirname = _eina_file_mkdtemp(buffer);
|
||||
if (tmpdirname == NULL)
|
||||
{
|
||||
if (path) *path = NULL;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
if (path) *path = eina_tmpstr_add(tmpdirname);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
|
|
@ -120,6 +120,10 @@ EAPI Eina_Inlist *_eina_tracking = NULL;
|
|||
extern Eina_Lock _sysmon_lock;
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
BCRYPT_ALG_HANDLE _eina_bcrypt_provider;
|
||||
#endif
|
||||
|
||||
/* place module init/shutdown functions here to avoid other modules
|
||||
* calling them by mistake.
|
||||
*/
|
||||
|
@ -292,6 +296,10 @@ eina_init(void)
|
|||
return ++_eina_main_count;
|
||||
|
||||
#ifdef _WIN32
|
||||
if (!BCRYPT_SUCCESS(BCryptOpenAlgorithmProvider(&_eina_bcrypt_provider,
|
||||
BCRYPT_RNG_ALGORITHM,
|
||||
NULL, 0)))
|
||||
return 0;
|
||||
#else
|
||||
int fd = open("/dev/urandom", O_RDONLY);
|
||||
if (fd >= 0)
|
||||
|
@ -397,6 +405,10 @@ eina_shutdown(void)
|
|||
_mt_enabled = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
BCryptCloseAlgorithmProvider(_eina_bcrypt_provider, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
return _eina_main_count;
|
||||
|
|
|
@ -25,6 +25,11 @@
|
|||
#include <xlocale.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <windows.h>
|
||||
# include <bcrypt.h>
|
||||
#endif
|
||||
|
||||
#include "eina_magic.h"
|
||||
#include "eina_iterator.h"
|
||||
#include "eina_accessor.h"
|
||||
|
@ -152,6 +157,7 @@ Eina_Stringshare *eina_file_sanitize(const char *path);
|
|||
void eina_freeq_main_set(Eina_FreeQ *fq);
|
||||
|
||||
#ifdef _WIN32
|
||||
extern BCRYPT_ALG_HANDLE _eina_bcrypt_provider;
|
||||
typedef _locale_t locale_t;
|
||||
#endif
|
||||
locale_t _eina_c_locale_get(void);
|
||||
|
@ -159,4 +165,3 @@ locale_t _eina_c_locale_get(void);
|
|||
#include "eina_inline_private.h"
|
||||
|
||||
#endif /* EINA_PRIVATE_H_ */
|
||||
|
||||
|
|
|
@ -369,6 +369,11 @@ eina_ext_deps += [iconv]
|
|||
execinfo = cc.find_library('execinfo', required: false)
|
||||
eina_ext_deps += [execinfo]
|
||||
|
||||
if sys_windows == true
|
||||
bcrypt = cc.find_library('bcrypt', required: true)
|
||||
eina_ext_deps += [bcrypt]
|
||||
endif
|
||||
|
||||
eina_lib = library('eina', eina_src,
|
||||
c_args : package_c_args,
|
||||
include_directories : config_dir,
|
||||
|
|
|
@ -76,115 +76,6 @@ unsetenv(const char *name)
|
|||
* Files related functions
|
||||
*
|
||||
*/
|
||||
static int
|
||||
_mkstemp_init(char *__template, char **suffix, size_t *length, DWORD *val,
|
||||
size_t suffixlen)
|
||||
{
|
||||
*length = strlen(__template);
|
||||
if ((*length < (6 + suffixlen))
|
||||
|| (strncmp(__template + *length - 6 - suffixlen, "XXXXXX", 6) != 0))
|
||||
{
|
||||
errno = EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*suffix = __template + *length - 6 - suffixlen;
|
||||
|
||||
*val = GetTickCount();
|
||||
*val += GetCurrentProcessId();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_mkstemp(char *suffix, int val)
|
||||
{
|
||||
const char lookup[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||
DWORD v = val;
|
||||
|
||||
suffix[0] = lookup[v % 62];
|
||||
v /= 62;
|
||||
suffix[1] = lookup[v % 62];
|
||||
v /= 62;
|
||||
suffix[2] = lookup[v % 62];
|
||||
v /= 62;
|
||||
suffix[3] = lookup[v % 62];
|
||||
v /= 62;
|
||||
suffix[4] = lookup[v % 62];
|
||||
v /= 62;
|
||||
suffix[5] = lookup[v % 62];
|
||||
|
||||
val += 7777;
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
EAPI char *
|
||||
mkdtemp(char *__template)
|
||||
{
|
||||
char *suffix;
|
||||
DWORD val;
|
||||
size_t length;
|
||||
int i;
|
||||
|
||||
if (!__template)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!_mkstemp_init(__template, &suffix, &length, &val, 0))
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < 32768; i++)
|
||||
{
|
||||
val = _mkstemp(suffix, val);
|
||||
|
||||
if (_mkdir(__template) == 0)
|
||||
return __template;
|
||||
|
||||
if (errno == EFAULT ||
|
||||
errno == ENOSPC ||
|
||||
errno == ENOMEM ||
|
||||
errno == ENOENT ||
|
||||
errno == ENOTDIR ||
|
||||
errno == EPERM ||
|
||||
errno == EROFS)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
errno = EEXIST;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
mkstemps(char *__template, int suffixlen)
|
||||
{
|
||||
char *suffix;
|
||||
DWORD val;
|
||||
size_t length;
|
||||
int i;
|
||||
|
||||
if (!__template || (suffixlen < 0))
|
||||
return 0;
|
||||
|
||||
if (!_mkstemp_init(__template, &suffix, &length, &val, (size_t) suffixlen))
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < 32768; i++)
|
||||
{
|
||||
int fd;
|
||||
|
||||
val = _mkstemp(suffix, val);
|
||||
|
||||
fd = _open(__template, _O_RDWR | _O_BINARY | _O_CREAT | _O_EXCL, _S_IREAD | _S_IWRITE);
|
||||
if (fd >= 0)
|
||||
return fd;
|
||||
}
|
||||
|
||||
errno = EEXIST;
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *
|
||||
realpath(const char *file_name, char *resolved_name)
|
||||
|
|
|
@ -67,24 +67,6 @@ EAPI int unsetenv(const char *name);
|
|||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief create an unique temporary directory
|
||||
*
|
||||
* @since 1.8.0
|
||||
*/
|
||||
EAPI char *mkdtemp(char *__template);
|
||||
|
||||
/**
|
||||
* @brief Create a unique temporary file name with a suffix.
|
||||
*
|
||||
* @param __template Template of the file to create.
|
||||
* @param suffixlen Length of the suffix following the 'XXXXXX' placeholder.
|
||||
* @return A file descriptor on success, -1 otherwise.
|
||||
*
|
||||
* @since 1.10.0
|
||||
*/
|
||||
EAPI int mkstemps(char *__template, int suffixlen);
|
||||
|
||||
/**
|
||||
* @brief Return an absolute or full path name for a specified relative path name.
|
||||
*
|
||||
|
|
|
@ -19,7 +19,7 @@ static void (*cb_func) (void *data);
|
|||
static void *cb_data;
|
||||
static Ecore_Exe *espeak = NULL;
|
||||
static Ecore_Event_Handler *exe_exit_handler = NULL;
|
||||
static char *tmpf = NULL;
|
||||
static Eina_Tmpstr *tmpf = NULL;
|
||||
static int tmpfd = -1;
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -32,7 +32,7 @@ _exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
|||
if (tmpf)
|
||||
{
|
||||
unlink(tmpf);
|
||||
free(tmpf);
|
||||
eina_tmpstr_del(tmpf);
|
||||
tmpf = NULL;
|
||||
close(tmpfd);
|
||||
tmpfd = -1;
|
||||
|
@ -70,15 +70,12 @@ out_read(const char *txt)
|
|||
{
|
||||
if (!tmpf)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
mode_t cur_umask;
|
||||
|
||||
snprintf(buf, sizeof(buf), "/tmp/.elm-speak-XXXXXX");
|
||||
cur_umask = umask(S_IRWXO | S_IRWXG);
|
||||
tmpfd = mkstemp(buf);
|
||||
tmpfd = eina_file_mkstemp("elm-speak-XXXXXX", &tmpf);
|
||||
umask(cur_umask);
|
||||
if (tmpfd >= 0) tmpf = strdup(buf);
|
||||
else return;
|
||||
if (tmpfd < 0) return;
|
||||
}
|
||||
if (write(tmpfd, txt, strlen(txt)) < 0) perror("write to tmpfile (espeak)");
|
||||
}
|
||||
|
@ -117,7 +114,7 @@ out_cancel(void)
|
|||
if (tmpf)
|
||||
{
|
||||
unlink(tmpf);
|
||||
free(tmpf);
|
||||
eina_tmpstr_del(tmpf);
|
||||
tmpf = NULL;
|
||||
close(tmpfd);
|
||||
tmpfd = -1;
|
||||
|
|
|
@ -19,15 +19,15 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
|
|||
const char *key_bad = "This is another crypto key";
|
||||
Eet_File *ef;
|
||||
char *test;
|
||||
char *file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
int size;
|
||||
int tmpfd;
|
||||
|
||||
fail_if(-1 == (tmpfd = mkstemp(file)));
|
||||
fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(tmpfd));
|
||||
|
||||
/* Crypt an eet file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0,
|
||||
|
@ -36,7 +36,7 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
|
|||
eet_close(ef);
|
||||
|
||||
/* Decrypt an eet file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
test = eet_read_cipher(ef, "keys/tests", &size, key);
|
||||
|
@ -48,7 +48,7 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
|
|||
eet_close(ef);
|
||||
|
||||
/* Decrypt an eet file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
|
||||
|
@ -58,7 +58,9 @@ EFL_START_TEST(eet_test_cipher_decipher_simple)
|
|||
|
||||
eet_close(ef);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
|
|
@ -19,19 +19,17 @@ EFL_START_TEST(eet_test_file_simple_write)
|
|||
Eet_Entry *entry;
|
||||
Eet_File *ef;
|
||||
char *test;
|
||||
char *file;
|
||||
void *m;
|
||||
int size;
|
||||
int tmpfd;
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
|
||||
fail_if(-1 == (tmpfd = mkstemp(file)));
|
||||
fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(tmpfd));
|
||||
|
||||
fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
|
||||
|
||||
ef = eet_open(file, EET_FILE_MODE_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
|
||||
|
@ -46,7 +44,7 @@ EFL_START_TEST(eet_test_file_simple_write)
|
|||
eet_close(ef);
|
||||
|
||||
/* Test read from buffer */
|
||||
f = eina_file_open(file, EINA_FALSE);
|
||||
f = eina_file_open(tmpf, EINA_FALSE);
|
||||
fail_if(!f);
|
||||
|
||||
m = eina_file_map_all(f, EINA_FILE_WILLNEED);
|
||||
|
@ -83,7 +81,7 @@ EFL_START_TEST(eet_test_file_simple_write)
|
|||
eina_file_close(f);
|
||||
|
||||
/* Test read of simple file */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
test = eet_read(ef, "keys/tests", &size);
|
||||
|
@ -105,7 +103,7 @@ EFL_START_TEST(eet_test_file_simple_write)
|
|||
eet_close(ef);
|
||||
|
||||
/* Test eet cache system */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
test = eet_read(ef, "keys/tests", &size);
|
||||
|
@ -116,8 +114,9 @@ EFL_START_TEST(eet_test_file_simple_write)
|
|||
|
||||
eet_close(ef);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
@ -128,14 +127,12 @@ EFL_START_TEST(eet_test_file_data)
|
|||
Eet_Dictionary *ed;
|
||||
Eet_File *ef;
|
||||
char **list;
|
||||
char *file;
|
||||
Eet_Data_Descriptor_Class eddc;
|
||||
Eet_Test_Ex_Type etbt;
|
||||
int size;
|
||||
int test;
|
||||
int tmpfd;
|
||||
|
||||
file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
eet_test_ex_set(&etbt, 0);
|
||||
etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
|
||||
|
@ -165,14 +162,14 @@ EFL_START_TEST(eet_test_file_data)
|
|||
|
||||
eet_build_ex_descriptor(edd, EINA_FALSE);
|
||||
|
||||
fail_if(-1 == (tmpfd = mkstemp(file)));
|
||||
fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(tmpfd));
|
||||
|
||||
/* Insert an error in etbt. */
|
||||
etbt.i = 0;
|
||||
|
||||
/* Save the encoded data in a file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
|
||||
|
@ -193,7 +190,7 @@ EFL_START_TEST(eet_test_file_data)
|
|||
/* Attempt to replace etbt by the correct one. */
|
||||
etbt.i = EET_TEST_INT;
|
||||
|
||||
ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
|
||||
|
@ -207,7 +204,7 @@ EFL_START_TEST(eet_test_file_data)
|
|||
eet_close(ef);
|
||||
|
||||
/* Read back the data. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY2, &etbt, 0));
|
||||
|
@ -273,8 +270,9 @@ EFL_START_TEST(eet_test_file_data)
|
|||
|
||||
eet_close(ef);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
@ -286,11 +284,9 @@ EFL_START_TEST(eet_test_file_data_dump)
|
|||
Eet_Test_Ex_Type etbt;
|
||||
Eet_File *ef;
|
||||
char *string1;
|
||||
char *file;
|
||||
int test;
|
||||
int tmpfd;
|
||||
|
||||
file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
eet_test_ex_set(&etbt, 0);
|
||||
etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
|
||||
|
@ -318,11 +314,11 @@ EFL_START_TEST(eet_test_file_data_dump)
|
|||
|
||||
eet_build_ex_descriptor(edd, EINA_FALSE);
|
||||
|
||||
fail_if(-1 == (tmpfd = mkstemp(file)));
|
||||
fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(tmpfd));
|
||||
|
||||
/* Save the encoded data in a file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
|
||||
|
@ -330,7 +326,7 @@ EFL_START_TEST(eet_test_file_data_dump)
|
|||
eet_close(ef);
|
||||
|
||||
/* Use dump/undump in the middle */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
string1 = NULL;
|
||||
|
@ -341,7 +337,7 @@ EFL_START_TEST(eet_test_file_data_dump)
|
|||
eet_close(ef);
|
||||
|
||||
/* Test the correctness of the reinsertion. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
|
||||
|
@ -372,14 +368,14 @@ EFL_START_TEST(eet_test_file_data_dump)
|
|||
|
||||
fail_if(test != 0);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(eet_test_file_fp)
|
||||
{
|
||||
char *file;
|
||||
Eet_Data_Descriptor_Class eddc;
|
||||
Eet_Data_Descriptor *edd_5FP;
|
||||
Eet_Data_Descriptor *edd_5DBL;
|
||||
|
@ -388,8 +384,7 @@ EFL_START_TEST(eet_test_file_fp)
|
|||
Eet_5DBL *convert;
|
||||
Eet_5FP *build;
|
||||
int tmpfd;
|
||||
|
||||
file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
|
||||
edd_5FP = eet_data_descriptor_file_new(&eddc);
|
||||
|
@ -415,10 +410,10 @@ EFL_START_TEST(eet_test_file_fp)
|
|||
origin.f1 = eina_f32p32_int_from(1);
|
||||
origin.f0 = 0;
|
||||
|
||||
fail_if(-1 == (tmpfd = mkstemp(file)));
|
||||
fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(tmpfd));
|
||||
|
||||
ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_data_write(ef, edd_5FP, EET_TEST_FILE_KEY1, &origin, 1));
|
||||
|
@ -443,8 +438,9 @@ EFL_START_TEST(eet_test_file_fp)
|
|||
|
||||
eet_close(ef);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
|
|
@ -60,18 +60,16 @@ EFL_START_TEST(eet_test_identity_simple)
|
|||
Eet_Key *k;
|
||||
FILE *noread;
|
||||
char *test;
|
||||
char *file;
|
||||
int size;
|
||||
int fd;
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
|
||||
fail_if(-1 == (fd = mkstemp(file)));
|
||||
fail_if(-1 == (fd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(fd));
|
||||
fail_if(!(noread = fopen("/dev/null", "wb")));
|
||||
|
||||
/* Sign an eet file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
|
||||
|
@ -85,7 +83,7 @@ EFL_START_TEST(eet_test_identity_simple)
|
|||
eet_close(ef);
|
||||
|
||||
/* Open a signed file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
/* check that the certificates match */
|
||||
|
@ -109,7 +107,7 @@ EFL_START_TEST(eet_test_identity_simple)
|
|||
eet_clearcache();
|
||||
|
||||
/* Corrupting the file. */
|
||||
fd = open(file, O_WRONLY | O_BINARY);
|
||||
fd = open(tmpf, O_WRONLY | O_BINARY);
|
||||
fail_if(fd < 0);
|
||||
|
||||
fail_if(lseek(fd, 200, SEEK_SET) != 200);
|
||||
|
@ -122,11 +120,12 @@ EFL_START_TEST(eet_test_identity_simple)
|
|||
close(fd);
|
||||
|
||||
/* Attempt to open a modified file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(ef);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
|
|
@ -72,7 +72,6 @@ static const Eet_Test_Image test_alpha = {
|
|||
EFL_START_TEST(eet_test_image_normal)
|
||||
{
|
||||
Eet_File *ef;
|
||||
char *file;
|
||||
unsigned int *data;
|
||||
int compress;
|
||||
int quality;
|
||||
|
@ -82,14 +81,13 @@ EFL_START_TEST(eet_test_image_normal)
|
|||
unsigned int w;
|
||||
unsigned int h;
|
||||
int tmpfd;
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
|
||||
fail_if(-1 == (tmpfd = mkstemp(file)));
|
||||
fail_if(-1 == (tmpfd = eina_file_mkstemp("eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(tmpfd));
|
||||
|
||||
/* Save the encoded data in a file. */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
result = eet_data_image_write(ef,
|
||||
|
@ -219,7 +217,7 @@ EFL_START_TEST(eet_test_image_normal)
|
|||
eet_close(ef);
|
||||
|
||||
/* Test read of image */
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
result = eet_data_image_header_read(ef,
|
||||
|
@ -424,14 +422,14 @@ EFL_START_TEST(eet_test_image_normal)
|
|||
|
||||
eet_close(ef);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(eet_test_image_small)
|
||||
{
|
||||
char *file;
|
||||
unsigned int image[4];
|
||||
unsigned int *data;
|
||||
Eet_File *ef;
|
||||
|
@ -443,18 +441,17 @@ EFL_START_TEST(eet_test_image_small)
|
|||
Eet_Image_Encoding lossy;
|
||||
int result;
|
||||
int tmpfd;
|
||||
|
||||
file = strdup("/tmp/eet_suite_testXXXXXX");
|
||||
Eina_Tmpstr *tmpf = NULL;
|
||||
|
||||
image[0] = IM0;
|
||||
image[1] = IM1;
|
||||
image[2] = IM2;
|
||||
image[3] = IM3;
|
||||
|
||||
fail_if(-1 == (tmpfd = mkstemp(file)));
|
||||
fail_if(-1 == (tmpfd = eina_file_mkstemp("/tmp/eet_suite_testXXXXXX", &tmpf)));
|
||||
fail_if(!!close(tmpfd));
|
||||
|
||||
ef = eet_open(file, EET_FILE_MODE_WRITE);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_WRITE);
|
||||
fail_if(!ef);
|
||||
|
||||
result = eet_data_image_write(ef, "/images/test", image, 2, 2, 1, 9, 100, 0);
|
||||
|
@ -462,7 +459,7 @@ EFL_START_TEST(eet_test_image_small)
|
|||
|
||||
eet_close(ef);
|
||||
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
ef = eet_open(tmpf, EET_FILE_MODE_READ);
|
||||
fail_if(!ef);
|
||||
|
||||
data = (unsigned int *)eet_data_image_read(ef,
|
||||
|
@ -477,7 +474,7 @@ EFL_START_TEST(eet_test_image_small)
|
|||
|
||||
eet_close(ef);
|
||||
|
||||
fail_if(unlink(file) != 0);
|
||||
fail_if(unlink(tmpf) != 0);
|
||||
|
||||
fail_if(data[0] != IM0);
|
||||
fail_if(data[1] != IM1);
|
||||
|
@ -486,6 +483,7 @@ EFL_START_TEST(eet_test_image_small)
|
|||
|
||||
free(data);
|
||||
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@ EFL_START_TEST(elua_api)
|
|||
{
|
||||
Elua_State *st;
|
||||
lua_State *lst;
|
||||
char buf[] = "tmpXXXXXX";
|
||||
FILE *f;
|
||||
int fd;
|
||||
char *cargv[2];
|
||||
|
@ -84,16 +83,16 @@ EFL_START_TEST(elua_api)
|
|||
fail_if(lua_type(lst, -1) != LUA_TFUNCTION);
|
||||
lua_pop(lst, 1);
|
||||
|
||||
fd = mkstemp(buf);
|
||||
fd = eina_file_mkstemp("tmpXXXXXX", &tmpf);
|
||||
fail_if(fd < 0);
|
||||
f = fdopen(fd, "wb");
|
||||
fail_if(!f);
|
||||
fprintf(f, "return 5\n");
|
||||
fclose(f);
|
||||
fail_if(!elua_util_file_run(st, buf));
|
||||
fail_if(!elua_util_file_run(st, tmpf));
|
||||
fail_if(lua_tointeger(lst, -1) != 5);
|
||||
lua_pop(lst, 1);
|
||||
fail_if(remove(buf));
|
||||
fail_if(remove(tmpf));
|
||||
|
||||
/* halfassed testing here, but not possible otherwise */
|
||||
fail_if(elua_util_error_report(st, 0));
|
||||
|
@ -101,21 +100,21 @@ EFL_START_TEST(elua_api)
|
|||
fail_if(!elua_util_error_report(st, 5));
|
||||
fail_if(lua_gettop(lst) > 0);
|
||||
|
||||
f = fopen(buf, "wb");
|
||||
f = fopen(tmpf, "wb");
|
||||
fail_if(!f);
|
||||
fprintf(f, "return true");
|
||||
fclose(f);
|
||||
cargv[1] = buf;
|
||||
cargv[1] = tmpf;
|
||||
fail_if(!elua_util_script_run(st, 2, cargv, 1, &quit));
|
||||
fail_if(quit != 1);
|
||||
|
||||
f = fopen(buf, "wb");
|
||||
f = fopen(tmpf, "wb");
|
||||
fail_if(!f);
|
||||
fprintf(f, "return false");
|
||||
fclose(f);
|
||||
fail_if(!elua_util_script_run(st, 2, cargv, 1, &quit));
|
||||
fail_if(quit != 0);
|
||||
fail_if(remove(buf));
|
||||
fail_if(remove(tmpf));
|
||||
|
||||
/* elua API here tries accessing files by relative path,
|
||||
* prevent any unintentional file accesses in cwd
|
||||
|
@ -139,6 +138,7 @@ EFL_START_TEST(elua_api)
|
|||
lua_pop(lst, 1);
|
||||
|
||||
elua_state_free(st);
|
||||
eina_tmpstr_del(tmpf);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
|
|
@ -169,86 +169,6 @@ EFL_START_TEST(evil_stdlib_unsetenv)
|
|||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_mkdtemp)
|
||||
{
|
||||
char template[] = "file_XXXXXX";
|
||||
char *res;
|
||||
|
||||
res = mkdtemp(template);
|
||||
fail_if(res == NULL);
|
||||
|
||||
fail_if(rmdir(res) < 0);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_mkdtemp_fail)
|
||||
{
|
||||
char template[] = "file_XXX";
|
||||
char *res;
|
||||
|
||||
res = mkdtemp(template);
|
||||
fail_if(res != NULL);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_mkstemp)
|
||||
{
|
||||
char template[] = "file_XXXXXX";
|
||||
int fd;
|
||||
|
||||
fd = mkstemp(template);
|
||||
fail_if(fd < 0);
|
||||
|
||||
fail_if(close(fd) == -1);
|
||||
|
||||
fail_if(unlink(template) == -1);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_mkstemp_fail)
|
||||
{
|
||||
char template[] = "file_XXX";
|
||||
int fd;
|
||||
|
||||
fd = mkstemp(template);
|
||||
fail_if(fd >= 0);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_mkstemps)
|
||||
{
|
||||
char template[] = "file_XXXXXX.ext";
|
||||
int fd;
|
||||
|
||||
fd = mkstemps(template, 4);
|
||||
fail_if(fd < 0);
|
||||
|
||||
fail_if(close(fd) == -1);
|
||||
|
||||
fail_if(unlink(template) == -1);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_mkstemps_fail_1)
|
||||
{
|
||||
char template[] = "file_XXX.ext";
|
||||
int fd;
|
||||
|
||||
fd = mkstemps(template, 4);
|
||||
fail_if(fd >= 0);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_mkstemps_fail_2)
|
||||
{
|
||||
char template[] = "file_XXX";
|
||||
int fd;
|
||||
|
||||
fd = mkstemps(template, 4);
|
||||
fail_if(fd >= 0);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(evil_stdlib_realpath_1)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
@ -302,14 +222,6 @@ void evil_test_stdlib(TCase *tc)
|
|||
tcase_add_test(tc, evil_stdlib_getenv_two_swapped);
|
||||
tcase_add_test(tc, evil_stdlib_unsetenv);
|
||||
|
||||
tcase_add_test(tc, evil_stdlib_mkdtemp);
|
||||
tcase_add_test(tc, evil_stdlib_mkdtemp_fail);
|
||||
tcase_add_test(tc, evil_stdlib_mkstemp);
|
||||
tcase_add_test(tc, evil_stdlib_mkstemp_fail);
|
||||
tcase_add_test(tc, evil_stdlib_mkstemps);
|
||||
tcase_add_test(tc, evil_stdlib_mkstemps_fail_1);
|
||||
tcase_add_test(tc, evil_stdlib_mkstemps_fail_2);
|
||||
|
||||
tcase_add_test(tc, evil_stdlib_realpath_1);
|
||||
tcase_add_test(tc, evil_stdlib_realpath_2);
|
||||
tcase_add_test(tc, evil_stdlib_realpath_3);
|
||||
|
|
Loading…
Reference in New Issue