diff options
author | Chris Lattner <sabre@nondot.org> | 2008-02-27 06:17:10 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-02-27 06:17:10 +0000 |
commit | e1b332a30459a726e882a4f484a9a31f2cea9e29 (patch) | |
tree | a8c682ec5e545f6b8bb6de9876338a63b06b164b | |
parent | b09916bdfbd7ffdc8fbadb5ee0c0b50567823f46 (diff) | |
download | external_llvm-e1b332a30459a726e882a4f484a9a31f2cea9e29.zip external_llvm-e1b332a30459a726e882a4f484a9a31f2cea9e29.tar.gz external_llvm-e1b332a30459a726e882a4f484a9a31f2cea9e29.tar.bz2 |
Add path separator support, patch by Sam Bishop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47662 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/System/Path.h | 4 | ||||
-rw-r--r-- | lib/System/Path.cpp | 19 | ||||
-rw-r--r-- | lib/System/Unix/Path.inc | 21 | ||||
-rw-r--r-- | lib/System/Win32/Path.inc | 21 |
4 files changed, 27 insertions, 38 deletions
diff --git a/include/llvm/System/Path.h b/include/llvm/System/Path.h index db1de77..ee860e8 100644 --- a/include/llvm/System/Path.h +++ b/include/llvm/System/Path.h @@ -662,6 +662,10 @@ namespace sys { /// @returns true if an error occurs, false otherwise /// @brief Copy one file to another. bool CopyFile(const Path& Dest, const Path& Src, std::string* ErrMsg); + + /// This is the OS-specific path separator: a colon on Unix or a semicolon + /// on Windows. + extern const char PathSeparator; } std::ostream& operator<<(std::ostream& strm, const sys::Path& aPath); diff --git a/lib/System/Path.cpp b/lib/System/Path.cpp index 11035cf..8a1de75 100644 --- a/lib/System/Path.cpp +++ b/lib/System/Path.cpp @@ -177,6 +177,25 @@ Path::getSuffix() const { return path.substr(path.rfind('.') + 1); } +static void getPathList(const char*path, std::vector<Path>& Paths) { + const char* at = path; + const char* delim = strchr(at, PathSeparator); + Path tmpPath; + while (delim != 0) { + std::string tmp(at, size_t(delim-at)); + if (tmpPath.set(tmp)) + if (tmpPath.canRead()) + Paths.push_back(tmpPath); + at = delim + 1; + delim = strchr(at, PathSeparator); + } + + if (*at != 0) + if (tmpPath.set(std::string(at))) + if (tmpPath.canRead()) + Paths.push_back(tmpPath); +} + // Include the truly platform-specific parts of this class. #if defined(LLVM_ON_UNIX) #include "Unix/Path.inc" diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc index 2dde37c..c8bdd08 100644 --- a/lib/System/Unix/Path.inc +++ b/lib/System/Unix/Path.inc @@ -63,6 +63,8 @@ inline bool lastIsSlash(const std::string& path) { namespace llvm { using namespace sys; +extern const char sys::PathSeparator = ':'; + bool Path::isValid() const { // Check some obvious things @@ -183,25 +185,6 @@ Path::GetTemporaryDirectory(std::string* ErrMsg ) { #endif } -static void getPathList(const char*path, std::vector<sys::Path>& Paths) { - const char* at = path; - const char* delim = strchr(at, ':'); - Path tmpPath; - while( delim != 0 ) { - std::string tmp(at, size_t(delim-at)); - if (tmpPath.set(tmp)) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); - at = delim + 1; - delim = strchr(at, ':'); - } - if (*at != 0) - if (tmpPath.set(std::string(at))) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); - -} - void Path::GetSystemLibraryPaths(std::vector<sys::Path>& Paths) { #ifdef LTDL_SHLIBPATH_VAR diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc index ff5cc0a..ee3f622 100644 --- a/lib/System/Win32/Path.inc +++ b/lib/System/Win32/Path.inc @@ -45,6 +45,8 @@ static void FlipBackSlashes(std::string& s) { namespace llvm { namespace sys { +extern const char sys::PathSeparator = ';'; + bool Path::isValid() const { if (path.empty()) @@ -164,25 +166,6 @@ Path::GetRootDirectory() { return result; } -static void getPathList(const char*path, std::vector<sys::Path>& Paths) { - const char* at = path; - const char* delim = strchr(at, ';'); - Path tmpPath; - while (delim != 0) { - std::string tmp(at, size_t(delim-at)); - if (tmpPath.set(tmp)) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); - at = delim + 1; - delim = strchr(at, ';'); - } - - if (*at != 0) - if (tmpPath.set(std::string(at))) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); -} - void Path::GetSystemLibraryPaths(std::vector<sys::Path>& Paths) { Paths.push_back(sys::Path("C:/WINDOWS/SYSTEM32")); |