diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2005-07-08 17:46:10 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2005-07-08 17:46:10 +0000 |
commit | 8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c (patch) | |
tree | dc01004ce47fcb8eeb61f47209486b6d9e1cd369 /lib/System | |
parent | 8f1ac1c6313e5c1bf754c7131adc7b46d663730a (diff) | |
download | external_llvm-8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c.zip external_llvm-8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c.tar.gz external_llvm-8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c.tar.bz2 |
Ensure that functions like isDirectory don't fail if the file doesn't
exist but just return false instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22361 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System')
-rw-r--r-- | lib/System/Unix/Path.inc | 14 | ||||
-rw-r--r-- | lib/System/Win32/Path.inc | 6 |
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc index ffa1d17..3f2e90e 100644 --- a/lib/System/Unix/Path.inc +++ b/lib/System/Unix/Path.inc @@ -231,6 +231,8 @@ Path::GetUserHomeDirectory() { bool Path::isFile() const { + if (!exists()) + return false; struct stat buf; if (0 != stat(path.c_str(), &buf)) { ThrowErrno(path + ": can't determine type of path object: "); @@ -240,6 +242,8 @@ Path::isFile() const { bool Path::isDirectory() const { + if (!exists()) + return false; struct stat buf; if (0 != stat(path.c_str(), &buf)) { ThrowErrno(path + ": can't determine type of path object: "); @@ -249,6 +253,8 @@ Path::isDirectory() const { bool Path::isHidden() const { + if (!exists()) + return false; size_t slash = path.rfind('/'); return (slash != std::string::npos && slash < path.length()-1 && @@ -269,6 +275,8 @@ Path::getBasename() const { } bool Path::hasMagicNumber(const std::string &Magic) const { + if (!isFile()) + return false; size_t len = Magic.size(); assert(len < 1024 && "Request for magic string too long"); char* buf = (char*) alloca(1 + len); @@ -303,6 +311,8 @@ bool Path::getMagicNumber(std::string& Magic, unsigned len) const { bool Path::isBytecodeFile() const { + if (!isFile()) + return false; char buffer[ 4]; buffer[0] = 0; int fd = ::open(path.c_str(),O_RDONLY); @@ -334,11 +344,13 @@ Path::canWrite() const { bool Path::canExecute() const { + if (0 != access(path.c_str(), R_OK | X_OK )) + return false; struct stat st; int r = stat(path.c_str(), &st); if (r != 0 || !S_ISREG(st.st_mode)) return false; - return 0 == access(path.c_str(), R_OK | X_OK ); + return true; } std::string diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc index a049f16..2524310 100644 --- a/lib/System/Win32/Path.inc +++ b/lib/System/Win32/Path.inc @@ -213,6 +213,8 @@ Path::isFile() const { bool Path::isDirectory() const { + if (!exists()) + return false; WIN32_FILE_ATTRIBUTE_DATA fi; if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) ThrowError(std::string(path) + ": Can't get status: "); @@ -221,6 +223,8 @@ Path::isDirectory() const { bool Path::isHidden() const { + if (!exists()) + return false; WIN32_FILE_ATTRIBUTE_DATA fi; if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) ThrowError(std::string(path) + ": Can't get status: "); @@ -248,6 +252,8 @@ bool Path::hasMagicNumber(const std::string &Magic) const { bool Path::isBytecodeFile() const { + if (!isFile()) + return false; std::string actualMagic; if (!getMagicNumber(actualMagic, 4)) return false; |