From: Misha Brukman Date: Mon, 18 Oct 2004 17:39:45 +0000 (+0000) Subject: AIX does not have mkdtemp() so emulate its behavior using mktemp() and mkdir() X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9c02f5c566a4c2d26ce811e5bc80c3e4ee5fdbeb;p=oota-llvm.git AIX does not have mkdtemp() so emulate its behavior using mktemp() and mkdir() git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17131 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/System/AIX/Path.cpp b/lib/System/AIX/Path.cpp index aef8e033ecd..0d6c7fbd152 100644 --- a/lib/System/AIX/Path.cpp +++ b/lib/System/AIX/Path.cpp @@ -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 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; }