mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 05:29:24 +00:00
Modify setStatusInfoOnDisk to not throw an exception.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29402 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7dea1019c1
commit
1bebfb5ae4
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user