AIX does not have mkdtemp() so emulate its behavior using mktemp() and mkdir()
authorMisha Brukman <brukman+llvm@gmail.com>
Mon, 18 Oct 2004 17:39:45 +0000 (17:39 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Mon, 18 Oct 2004 17:39:45 +0000 (17:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17131 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/AIX/Path.cpp

index aef8e033ecd373864bc28703331ee1ef23b40a27..0d6c7fbd152cb4a429849b26f0d19d009d5e856b 100644 (file)
@@ -7,12 +7,13 @@
 // 
 //===----------------------------------------------------------------------===//
 //
-// This file provides the AIX specific implementation of the Path class.
+// This file provides the AIX-specific implementation of the Path class.
 //
 //===----------------------------------------------------------------------===//
 
 // Include the generic unix implementation
 #include "../Unix/Path.cpp"
+#include <sys/stat.h>
 
 namespace llvm {
 using namespace sys;
@@ -34,11 +35,15 @@ Path::is_valid() const {
 Path
 Path::GetTemporaryDirectory() {
   char pathname[MAXPATHLEN];
-  strcpy(pathname,"/tmp/llvm_XXXXXX");
-  if (0 == mkdtemp(pathname))
-    ThrowErrno(std::string(pathname) + ": Can't create temporary directory");
+  strcpy(pathname, "/tmp/llvm_XXXXXX");
+  // AIX does not have a mkdtemp(), so we emulate it as follows:
+  // mktemp() returns a valid name for a _file_, not a directory, but does not
+  // create it.  We assume that it is a valid name for a directory.
+  char *TmpName = mktemp(pathname);
+  if (!mkdir(TmpName, S_IRWXU))
+    ThrowErrno(std::string(TmpName) + ": Can't create temporary directory");
   Path result;
-  result.set_directory(pathname);
+  result.set_directory(TmpName);
   assert(result.is_valid() && "mkdtemp didn't create a valid pathname!");
   return result;
 }