elimiante some syscalls
authorChris Lattner <sabre@nondot.org>
Tue, 1 Aug 2006 17:51:09 +0000 (17:51 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 1 Aug 2006 17:51:09 +0000 (17:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29442 91177308-0d34-0410-b5e6-96231b3b80d8

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

index f26315cea623049633eb3bc6e98e144e088f22db..41349d940e2da340e9ce7483b9b88b157939b5d5 100644 (file)
@@ -241,7 +241,7 @@ Path::isFile() const {
   if (!exists())
     return false;
   struct stat buf;
-  if (0 != stat(path.c_str(), &buf)) {
+  if (stat(path.c_str(), &buf) != 0) {
     ThrowErrno(path + ": can't determine type of path object: ");
   }
   return S_ISREG(buf.st_mode);
@@ -286,12 +286,10 @@ 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);
-  int fd = ::open(path.c_str(),O_RDONLY);
+  int fd = ::open(path.c_str(), O_RDONLY);
   if (fd < 0)
     return false;
   size_t read_len = ::read(fd, buf, len);
@@ -303,11 +301,9 @@ bool Path::hasMagicNumber(const std::string &Magic) const {
 }
 
 bool Path::getMagicNumber(std::string& Magic, unsigned len) const {
-  if (!isFile())
-    return false;
   assert(len < 1024 && "Request for magic string too long");
   char* buf = (char*) alloca(1 + len);
-  int fd = ::open(path.c_str(),O_RDONLY);
+  int fd = ::open(path.c_str(), O_RDONLY);
   if (fd < 0)
     return false;
   ssize_t bytes_read = ::read(fd, buf, len);
@@ -322,11 +318,9 @@ bool Path::getMagicNumber(std::string& Magic, unsigned len) const {
 
 bool 
 Path::isBytecodeFile() const {
-  if (!isFile())
-    return false;
-  char buffer[ 4];
+  char buffer[4];
   buffer[0] = 0;
-  int fd = ::open(path.c_str(),O_RDONLY);
+  int fd = ::open(path.c_str(), O_RDONLY);
   if (fd < 0)
     return false;
   ssize_t bytes_read = ::read(fd, buffer, 4);
@@ -335,7 +329,7 @@ Path::isBytecodeFile() const {
     return false;
 
   return (buffer[0] == 'l' && buffer[1] == 'l' && buffer[2] == 'v' &&
-      (buffer[3] == 'c' || buffer[3] == 'm'));
+         (buffer[3] == 'c' || buffer[3] == 'm'));
 }
 
 bool
@@ -605,14 +599,17 @@ Path::createTemporaryFileOnDisk(bool reuse_current) {
 
 bool
 Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const {
-  // Make sure we're dealing with a directory.
-  if (isFile()) {
+  FileStatus Status;
+  if (getFileStatus(Status, ErrStr))
+    return true;
+    
+  if (Status.isFile) {
     if (unlink(path.c_str()) != 0)
       return GetErrno(path + ": can't destroy file", ErrStr);
     return false;
   }
   
-  if (!isDirectory()) {
+  if (!Status.isDir) {
     if (ErrStr) *ErrStr = "not a file or directory";
     return true;
   }
index 7b74746900e1666cdac6c12404b0a487f031d7d9..73432ba69e447793ef2fb780951bd4949d849f35 100644 (file)
@@ -281,8 +281,6 @@ 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;
@@ -574,12 +572,16 @@ Path::createFileOnDisk() {
 
 bool
 Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const {
-  if (isFile()) {
+  FileStatus Status;
+  if (getFileStatus(Status, ErrStr))
+    return true;
+    
+  if (Status.isFile) {
     DWORD attr = GetFileAttributes(path.c_str());
 
     // If it doesn't exist, we're done.
     if (attr == INVALID_FILE_ATTRIBUTES)
-      return false;
+      return true;
 
     // Read-only files cannot be deleted on Windows.  Must remove the read-only
     // attribute first.
@@ -590,8 +592,8 @@ Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const {
 
     if (!DeleteFile(path.c_str()))
       ThrowError(path + ": Can't destroy file: ");
-    return true;
-  } else if (isDirectory()) {
+    return false;
+  } else if (Status.isDir) {
     // If it doesn't exist, we're done.
     if (!exists())
       return false;
@@ -657,8 +659,6 @@ Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const {
 }
 
 bool Path::getMagicNumber(std::string& Magic, unsigned len) const {
-  if (!isFile())
-    return false;
   assert(len < 1024 && "Request for magic string too long");
   char* buf = (char*) alloca(1 + len);