Provide initial implementations of Memory and Process concepts for various
[oota-llvm.git] / lib / System / Cygwin / Path.cpp
1 //===- Cygwin/Path.cpp - Cygwin Path Implementation -------------*- C++ -*-===//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Reid Spencer and is distributed under the 
6 // University of Illinois Open Source License. See LICENSE.TXT for details.
7 // 
8 //===----------------------------------------------------------------------===//
9 //
10 // This file provides the Cygwin specific implementation of the Path class.
11 //
12 //===----------------------------------------------------------------------===//
13
14 //===----------------------------------------------------------------------===//
15 //=== WARNING: Implementation here must contain only Cygwin specific code 
16 //===          and must not be generic UNIX code (see ../Unix/Path.cpp)
17 //===----------------------------------------------------------------------===//
18
19 // Include the generic Unix implementation
20 #include "../Unix/Path.cpp"
21
22 namespace llvm {
23 using namespace sys;
24
25 bool 
26 Path::is_valid() const {
27   if (path.empty()) 
28     return false;
29   char pathname[MAXPATHLEN];
30   if (0 == realpath(path.c_str(), pathname))
31     if (errno != EACCES && errno != EIO && errno != ENOENT && errno != ENOTDIR)
32       return false;
33   return true;
34 }
35
36 Path
37 Path::GetTemporaryDirectory() {
38   char* pathname = tempnam(0,"llvm_");
39   if (0 == pathname)
40     ThrowErrno(std::string("Can't create temporary directory name"));
41   Path result;
42   result.set_directory(pathname);
43   free(pathname);
44   assert(result.is_valid() && "tempnam didn't create a valid pathname!");
45   if (0 != mkdir(result.c_str(), S_IRWXU))
46     ThrowErrno(result.get() + ": Can't create temporary directory");
47   return result;
48 }
49
50 std::string
51 Path::GetDLLSuffix() {
52   return "dll.a";
53 }
54
55 }
56
57 // vim: sw=2 smartindent smarttab tw=80 autoindent expandtab