diff options
-rw-r--r-- | include/llvm/System/Program.h | 3 | ||||
-rw-r--r-- | lib/System/Unix/Program.inc | 4 | ||||
-rw-r--r-- | lib/System/Win32/Program.inc | 6 |
3 files changed, 8 insertions, 5 deletions
diff --git a/include/llvm/System/Program.h b/include/llvm/System/Program.h index 0c14076..c595082 100644 --- a/include/llvm/System/Program.h +++ b/include/llvm/System/Program.h @@ -114,7 +114,8 @@ namespace sys { /// This static constructor (factory) will attempt to locate a program in /// the operating system's file system using some pre-determined set of - /// locations to search (e.g. the PATH on Unix). + /// locations to search (e.g. the PATH on Unix). Paths with slashes are + /// returned unmodified. /// @returns A Path object initialized to the path of the program or a /// Path object that is empty (invalid) if the program could not be found. /// @brief Construct a Program by finding it by name. diff --git a/lib/System/Unix/Program.inc b/lib/System/Unix/Program.inc index 86d9b2a..e06f80b 100644 --- a/lib/System/Unix/Program.inc +++ b/lib/System/Unix/Program.inc @@ -66,8 +66,8 @@ Program::FindProgramByName(const std::string& progName) { if (progName.find('/') != std::string::npos) return temp; - // At this point, the file name does not contain slashes. Search for it - // through the directories specified in the PATH environment variable. + // At this point, the file name is valid and does not contain slashes. Search + // for it through the directories specified in the PATH environment variable. // Get the path. If its empty, we can't do anything to find it. const char *PathStr = getenv("PATH"); diff --git a/lib/System/Win32/Program.inc b/lib/System/Win32/Program.inc index b55aa2f..2d6e665 100644 --- a/lib/System/Win32/Program.inc +++ b/lib/System/Win32/Program.inc @@ -67,10 +67,12 @@ Program::FindProgramByName(const std::string& progName) { Path temp; if (!temp.set(progName)) // invalid name return Path(); - if (temp.canExecute()) // already executable as is + // Return paths with slashes verbatim. + if (progName.find('\\') != std::string::npos || + progName.find('/') != std::string::npos) return temp; - // At this point, the file name is valid and its not executable. + // At this point, the file name is valid and does not contain slashes. // Let Windows search for it. char buffer[MAX_PATH]; char *dummy = NULL; |