raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=eacee53c2e795a1c5e187558ccced2d66390d761

commit eacee53c2e795a1c5e187558ccced2d66390d761
Author: Vincent Torri <[email protected]>
Date:   Thu Oct 8 11:58:11 2020 +0100

    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
---
 src/examples/eet/eet-data-cipher_decipher.c   |  29 +++--
 src/lib/ecore_con/efl_net_dialer_http.eo      |   2 +-
 src/lib/ecore_con/efl_net_dialer_websocket.eo |   2 +-
 src/lib/eina/eina_file_common.c               |  94 +-------------
 src/lib/eina/eina_file_posix.c                |  76 +++++++++++
 src/lib/eina/eina_file_win32.c                | 176 ++++++++++++++++++++++++++
 src/lib/eina/eina_main.c                      |  12 ++
 src/lib/eina/eina_private.h                   |   7 +-
 src/lib/eina/meson.build                      |   5 +
 src/lib/evil/evil_stdlib.c                    | 109 ----------------
 src/lib/evil/evil_stdlib.h                    |  18 ---
 src/modules/elementary/access_output/mod.c    |  13 +-
 src/tests/eet/eet_test_cipher.c               |  14 +-
 src/tests/eet/eet_test_file.c                 |  58 ++++-----
 src/tests/eet/eet_test_identity.c             |  17 ++-
 src/tests/eet/eet_test_image.c                |  26 ++--
 src/tests/elua/elua_lib.c                     |  16 +--
 src/tests/evil/evil_test_stdlib.c             |  88 -------------
 18 files changed, 361 insertions(+), 401 deletions(-)

diff --git a/src/examples/eet/eet-data-cipher_decipher.c 
b/src/examples/eet/eet-data-cipher_decipher.c
index 4ff94d5782..fb6574064b 100644
--- a/src/examples/eet/eet-data-cipher_decipher.c
+++ b/src/examples/eet/eet-data-cipher_decipher.c
@@ -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();
diff --git a/src/lib/ecore_con/efl_net_dialer_http.eo 
b/src/lib/ecore_con/efl_net_dialer_http.eo
index 00bff4131b..f194d7bdc6 100644
--- a/src/lib/ecore_con/efl_net_dialer_http.eo
+++ b/src/lib/ecore_con/efl_net_dialer_http.eo
@@ -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
diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.eo 
b/src/lib/ecore_con/efl_net_dialer_websocket.eo
index 612f504d46..1d4d98fb44 100644
--- a/src/lib/ecore_con/efl_net_dialer_websocket.eo
+++ b/src/lib/ecore_con/efl_net_dialer_websocket.eo
@@ -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
diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c
index 0380ea7a85..70ac5384fb 100644
--- a/src/lib/eina/eina_file_common.c
+++ b/src/lib/eina/eina_file_common.c
@@ -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                                     *
  
*============================================================================*/
diff --git a/src/lib/eina/eina_file_posix.c b/src/lib/eina/eina_file_posix.c
index 14460b2f01..72f0e510fe 100644
--- a/src/lib/eina/eina_file_posix.c
+++ b/src/lib/eina/eina_file_posix.c
@@ -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;
+}
diff --git a/src/lib/eina/eina_file_win32.c b/src/lib/eina/eina_file_win32.c
index 9fa8e96a4d..b5c0c418c0 100644
--- a/src/lib/eina/eina_file_win32.c
+++ b/src/lib/eina/eina_file_win32.c
@@ -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;
+}
diff --git a/src/lib/eina/eina_main.c b/src/lib/eina/eina_main.c
index 9549ab96c3..e30a850f95 100644
--- a/src/lib/eina/eina_main.c
+++ b/src/lib/eina/eina_main.c
@@ -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;
diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h
index 9e2954e001..9d4da033ce 100644
--- a/src/lib/eina/eina_private.h
+++ b/src/lib/eina/eina_private.h
@@ -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_ */
-
diff --git a/src/lib/eina/meson.build b/src/lib/eina/meson.build
index 222d81b3a0..3bd869eed9 100644
--- a/src/lib/eina/meson.build
+++ b/src/lib/eina/meson.build
@@ -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,
diff --git a/src/lib/evil/evil_stdlib.c b/src/lib/evil/evil_stdlib.c
index d6de5a4fcd..ea8f3356b7 100644
--- a/src/lib/evil/evil_stdlib.c
+++ b/src/lib/evil/evil_stdlib.c
@@ -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)
diff --git a/src/lib/evil/evil_stdlib.h b/src/lib/evil/evil_stdlib.h
index eae2fb8809..cb35a570b0 100644
--- a/src/lib/evil/evil_stdlib.h
+++ b/src/lib/evil/evil_stdlib.h
@@ -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.
  *
diff --git a/src/modules/elementary/access_output/mod.c 
b/src/modules/elementary/access_output/mod.c
index f51b512a47..cabf0a6a55 100644
--- a/src/modules/elementary/access_output/mod.c
+++ b/src/modules/elementary/access_output/mod.c
@@ -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;
diff --git a/src/tests/eet/eet_test_cipher.c b/src/tests/eet/eet_test_cipher.c
index c06c505b4c..09c09f2d64 100644
--- a/src/tests/eet/eet_test_cipher.c
+++ b/src/tests/eet/eet_test_cipher.c
@@ -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
 
diff --git a/src/tests/eet/eet_test_file.c b/src/tests/eet/eet_test_file.c
index 9423dc8aed..23233d7757 100644
--- a/src/tests/eet/eet_test_file.c
+++ b/src/tests/eet/eet_test_file.c
@@ -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
 
diff --git a/src/tests/eet/eet_test_identity.c 
b/src/tests/eet/eet_test_identity.c
index b22d537021..4c54b7bcd4 100644
--- a/src/tests/eet/eet_test_identity.c
+++ b/src/tests/eet/eet_test_identity.c
@@ -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
 
diff --git a/src/tests/eet/eet_test_image.c b/src/tests/eet/eet_test_image.c
index 5e35e67e54..585f39d86b 100644
--- a/src/tests/eet/eet_test_image.c
+++ b/src/tests/eet/eet_test_image.c
@@ -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
 
diff --git a/src/tests/elua/elua_lib.c b/src/tests/elua/elua_lib.c
index f3d11d5023..b515d74c67 100644
--- a/src/tests/elua/elua_lib.c
+++ b/src/tests/elua/elua_lib.c
@@ -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
 
diff --git a/src/tests/evil/evil_test_stdlib.c 
b/src/tests/evil/evil_test_stdlib.c
index c9f09813ef..57afb94fbd 100644
--- a/src/tests/evil/evil_test_stdlib.c
+++ b/src/tests/evil/evil_test_stdlib.c
@@ -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);

-- 


Reply via email to