Modify setStatusInfoOnDisk to not throw an exception.
authorChris Lattner <sabre@nondot.org>
Fri, 28 Jul 2006 22:36:17 +0000 (22:36 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 28 Jul 2006 22:36:17 +0000 (22:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29402 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/System/Path.h
lib/System/Unix/Path.inc
lib/System/Win32/Path.inc

index 14602d7a2ce86aa3ad4c2a42b38ebf10314e34a9..c2fb2b911974c2e7db6abb9921e85fd9891b729f 100644 (file)
@@ -461,9 +461,10 @@ namespace sys {
       /// This method allows the last modified time stamp and permission bits
       /// to be set on the disk object referenced by the Path.
       /// @throws std::string if an error occurs.
-      /// @returns true
+      /// @returns true on error.
       /// @brief Set the status information.
-      bool setStatusInfoOnDisk(const FileStatus &SI) const;
+      bool setStatusInfoOnDisk(const FileStatus &SI,
+                               std::string *ErrStr = 0) const;
 
       /// This method attempts to create a directory in the file system with the
       /// same name as the Path object. The \p create_parents parameter controls
index 26f29c0bc0c969ed83f2d5fedc09a888cbdabe1e..f26315cea623049633eb3bc6e98e144e088f22db 100644 (file)
@@ -647,15 +647,15 @@ Path::renamePathOnDisk(const Path& newName) {
 }
 
 bool
-Path::setStatusInfoOnDisk(const FileStatus &si) const {
+Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrStr) const {
   struct utimbuf utb;
   utb.actime = si.modTime.toPosixTime();
   utb.modtime = utb.actime;
   if (0 != ::utime(path.c_str(),&utb))
-    ThrowErrno(path + ": can't set file modification time");
+    return GetErrno(path + ": can't set file modification time", ErrStr);
   if (0 != ::chmod(path.c_str(),si.mode))
-    ThrowErrno(path + ": can't set mode");
-  return true;
+    return GetErrno(path + ": can't set mode", ErrStr);
+  return false;
 }
 
 void 
index a7c7d21bcf0e372ef08df7af557cb9b6d65f9f34..7c14ea7df47a3a71792f9c644b28169f0242baaf 100644 (file)
@@ -693,9 +693,9 @@ Path::renamePathOnDisk(const Path& newName) {
 }
 
 bool
-Path::setStatusInfoOnDisk(const FileStatus &si) const {
+Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrStr) const {
   // FIXME: should work on directories also.
-  if (!isFile()) return false;
+  if (!isFile()) return true;
 
   HANDLE h = CreateFile(path.c_str(),
                         FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES,
@@ -705,14 +705,14 @@ Path::setStatusInfoOnDisk(const FileStatus &si) const {
                         FILE_ATTRIBUTE_NORMAL,
                         NULL);
   if (h == INVALID_HANDLE_VALUE)
-    return false;
+    return true;
 
   BY_HANDLE_FILE_INFORMATION bhfi;
   if (!GetFileInformationByHandle(h, &bhfi)) {
     DWORD err = GetLastError();
     CloseHandle(h);
     SetLastError(err);
-    ThrowError(path + ": GetFileInformationByHandle: ");
+    return GetError(path + ": GetFileInformationByHandle: ", ErrStr);
   }
 
   FILETIME ft;
@@ -722,7 +722,7 @@ Path::setStatusInfoOnDisk(const FileStatus &si) const {
   CloseHandle(h);
   if (!ret) {
     SetLastError(err);
-    ThrowError(path + ": SetFileTime: ");
+    return GetError(path + ": SetFileTime: ", ErrStr);
   }
 
   // Best we can do with Unix permission bits is to interpret the owner
@@ -731,17 +731,17 @@ Path::setStatusInfoOnDisk(const FileStatus &si) const {
     if (bhfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY) {
       if (!SetFileAttributes(path.c_str(),
               bhfi.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY))
-        ThrowError(path + ": SetFileAttributes: ");
+        return GetError(path + ": SetFileAttributes: ", ErrStr);
     }
   } else {
     if (!(bhfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY)) {
       if (!SetFileAttributes(path.c_str(),
               bhfi.dwFileAttributes | FILE_ATTRIBUTE_READONLY))
-        ThrowError(path + ": SetFileAttributes: ");
+        return GetError(path + ": SetFileAttributes: ", ErrStr);
     }
   }
 
-  return true;
+  return false;
 }
 
 void