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
This commit is contained in:
Chris Lattner 2008-02-27 06:17:10 +00:00
parent b09916bdfb
commit e1b332a304
4 changed files with 27 additions and 38 deletions

View File

@ -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);

View File

@ -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"

View File

@ -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

View File

@ -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"));