Signed-off-by: Will Miles <wmi...@sgl.com>
---
 configure.ac        |  6 +++---
 lib/libalpm/trans.c | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac
index da1953e..0a1ef44 100644
--- a/configure.ac
+++ b/configure.ac
@@ -303,9 +303,9 @@ AC_FUNC_MALLOC
 AC_FUNC_MKTIME
 AC_FUNC_STRCOLL
 AC_CHECK_FUNCS([asprintf dup2 getcwd getmntinfo gettimeofday memmove memset \
-                mkdir realpath regcomp rmdir setenv setlocale strcasecmp \
-                strchr strcspn strdup strerror strndup strnlen strrchr \
-                strsep strstr strtol swprintf tcflush wcwidth uname])
+                mkdir mkdtemp realpath regcomp rmdir setenv setlocale \
+                strcasecmp strchr strcspn strdup strerror strndup strnlen \
+                strrchr strsep strstr strtol swprintf tcflush wcwidth uname])
 AC_CHECK_MEMBERS([struct stat.st_blksize],,,[[#include <sys/stat.h>]])
 
 # For the diskspace code
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 6a26e75..b3f6044 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -41,6 +41,41 @@
 #include "alpm.h"
 #include "deps.h"
 
+#ifndef HAVE_MKDTEMP
+/* supply a workaround implementation of mkdtemp as the system does not */
+static char *mkdtemp(char *templateName)
+{
+       static const char letters[] = 
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+       const int length = strlen(templateName);
+       char *XXXXXX = templateName + length - 6;
+
+       if((length < 6) || (strncmp(XXXXXX, "XXXXXX", 6) != 0))
+               return 0;
+
+       for(int i = 0; i < 256; ++i) {
+               int v = rand();
+
+               /* Fill in the random bits.  */
+               XXXXXX[0] = letters[v % 62];
+               v /= 62;
+               XXXXXX[1] = letters[v % 62];
+               v /= 62;
+               XXXXXX[2] = letters[v % 62];
+               v /= 62;
+               XXXXXX[3] = letters[v % 62];
+               v /= 62;
+               XXXXXX[4] = letters[v % 62];
+               v /= 62;
+               XXXXXX[5] = letters[v % 62];
+
+               if(mkdir(templateName, 0700) == 0)
+                       return templateName;
+       }
+
+       return 0;
+}
+#endif
+
 /** \addtogroup alpm_trans Transaction Functions
  * @brief Functions to manipulate libalpm transactions
  * @{
-- 
2.3.0

Reply via email to