summaryrefslogtreecommitdiff
path: root/lib/System/Unix
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2005-07-08 17:46:10 +0000
committerReid Spencer <rspencer@reidspencer.com>2005-07-08 17:46:10 +0000
commit8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c (patch)
treedc01004ce47fcb8eeb61f47209486b6d9e1cd369 /lib/System/Unix
parent8f1ac1c6313e5c1bf754c7131adc7b46d663730a (diff)
downloadllvm-8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c.tar.gz
llvm-8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c.tar.bz2
llvm-8b2d1aa37b8a1d8993c184a0255fefb47c6b9b7c.tar.xz
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/Unix')
-rw-r--r--lib/System/Unix/Path.inc14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index ffa1d174fd..3f2e90e9d3 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