Ensure that functions like isDirectory don't fail if the file doesn't
authorReid Spencer <rspencer@reidspencer.com>
Fri, 8 Jul 2005 17:46:10 +0000 (17:46 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Fri, 8 Jul 2005 17:46:10 +0000 (17:46 +0000)
exist but just return false instead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22361 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/Path.inc
lib/System/Win32/Path.inc

index ffa1d174fd8ac94da4d7e0e8924889d75e93b7a0..3f2e90e9d36e6b8c728fe2894a27ad5a09782849 100644 (file)
@@ -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 
index a049f16f13d47399d51890c5b0687461d1e5c4da..2524310443857095b528be891f0b61c902bfc930 100644 (file)
@@ -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;