summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Support')
-rw-r--r--llvm/lib/Support/Path.cpp20
-rw-r--r--llvm/lib/Support/Unix/Path.inc21
-rw-r--r--llvm/lib/Support/Windows/Path.inc71
3 files changed, 31 insertions, 81 deletions
diff --git a/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp
index 5ac60e8dc3e..fc3cf525c93 100644
--- a/llvm/lib/Support/Path.cpp
+++ b/llvm/lib/Support/Path.cpp
@@ -1189,20 +1189,12 @@ std::error_code identify_magic(const Twine &Path, file_magic &Result) {
}
std::error_code directory_entry::status(file_status &result) const {
- return fs::status(Path, result, FollowSymlinks);
-}
-
-ErrorOr<perms> getPermissions(const Twine &Path) {
- file_status Status;
- if (std::error_code EC = status(Path, Status))
- return EC;
-
- return Status.permissions();
-}
-
-} // end namespace fs
-} // end namespace sys
-} // end namespace llvm
+ return fs::status(Path, result, FollowSymlinks);
+}
+
+} // end namespace fs
+} // end namespace sys
+} // end namespace llvm
// Include the truly platform-specific parts.
#if defined(LLVM_ON_UNIX)
diff --git a/llvm/lib/Support/Unix/Path.inc b/llvm/lib/Support/Unix/Path.inc
index b2669d51eb8..cdc692b8f1f 100644
--- a/llvm/lib/Support/Unix/Path.inc
+++ b/llvm/lib/Support/Unix/Path.inc
@@ -568,21 +568,12 @@ std::error_code status(const Twine &Path, file_status &Result, bool Follow) {
std::error_code status(int FD, file_status &Result) {
struct stat Status;
int StatRet = ::fstat(FD, &Status);
- return fillStatus(StatRet, Status, Result);
-}
-
-std::error_code setPermissions(const Twine &Path, perms Permissions) {
- SmallString<128> PathStorage;
- StringRef P = Path.toNullTerminatedStringRef(PathStorage);
-
- if (::chmod(P.begin(), Permissions))
- return std::error_code(errno, std::generic_category());
- return std::error_code();
-}
-
-std::error_code setLastModificationAndAccessTime(int FD, TimePoint<> Time) {
-#if defined(HAVE_FUTIMENS)
- timespec Times[2];
+ return fillStatus(StatRet, Status, Result);
+}
+
+std::error_code setLastModificationAndAccessTime(int FD, TimePoint<> Time) {
+#if defined(HAVE_FUTIMENS)
+ timespec Times[2];
Times[0] = Times[1] = sys::toTimeSpec(Time);
if (::futimens(FD, Times))
return std::error_code(errno, std::generic_category());
diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc
index 8ad1edd12e9..d8a14b41cb2 100644
--- a/llvm/lib/Support/Windows/Path.inc
+++ b/llvm/lib/Support/Windows/Path.inc
@@ -527,21 +527,19 @@ static std::error_code getStatus(HANDLE FileHandle, file_status &Result) {
goto handle_status_error;
{
- file_type Type = (Info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- ? file_type::directory_file
- : file_type::regular_file;
- perms Permissions = (Info.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
- ? (all_read | all_exe)
- : all_all;
- Result = file_status(
- Type, Permissions, Info.ftLastAccessTime.dwHighDateTime,
- Info.ftLastAccessTime.dwLowDateTime,
- Info.ftLastWriteTime.dwHighDateTime, Info.ftLastWriteTime.dwLowDateTime,
- Info.dwVolumeSerialNumber, Info.nFileSizeHigh, Info.nFileSizeLow,
- Info.nFileIndexHigh, Info.nFileIndexLow);
- return std::error_code();
- }
-
+ file_type Type = (Info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ ? file_type::directory_file
+ : file_type::regular_file;
+ Result =
+ file_status(Type, Info.ftLastAccessTime.dwHighDateTime,
+ Info.ftLastAccessTime.dwLowDateTime,
+ Info.ftLastWriteTime.dwHighDateTime,
+ Info.ftLastWriteTime.dwLowDateTime,
+ Info.dwVolumeSerialNumber, Info.nFileSizeHigh,
+ Info.nFileSizeLow, Info.nFileIndexHigh, Info.nFileIndexLow);
+ return std::error_code();
+ }
+
handle_status_error:
DWORD LastError = ::GetLastError();
if (LastError == ERROR_FILE_NOT_FOUND ||
@@ -588,43 +586,12 @@ std::error_code status(const Twine &path, file_status &result, bool Follow) {
std::error_code status(int FD, file_status &Result) {
HANDLE FileHandle = reinterpret_cast<HANDLE>(_get_osfhandle(FD));
- return getStatus(FileHandle, Result);
-}
-
-std::error_code setPermissions(const Twine &Path, perms Permissions) {
- SmallVector<wchar_t, 128> PathUTF16;
- if (std::error_code EC = widenPath(Path, PathUTF16))
- return EC;
-
- DWORD Attributes = ::GetFileAttributesW(PathUTF16.begin());
- if (Attributes == INVALID_FILE_ATTRIBUTES)
- return mapWindowsError(GetLastError());
-
- // There are many Windows file attributes that are not to do with the file
- // permissions (e.g. FILE_ATTRIBUTE_HIDDEN). We need to be careful to preserve
- // them.
- if (Permissions & all_write) {
- Attributes &= ~FILE_ATTRIBUTE_READONLY;
- if (Attributes == 0)
- // FILE_ATTRIBUTE_NORMAL indicates no other attributes are set.
- Attributes |= FILE_ATTRIBUTE_NORMAL;
- }
- else {
- Attributes |= FILE_ATTRIBUTE_READONLY;
- // FILE_ATTRIBUTE_NORMAL is not compatible with any other attributes, so
- // remove it, if it is present.
- Attributes &= ~FILE_ATTRIBUTE_NORMAL;
- }
-
- if (!::SetFileAttributesW(PathUTF16.begin(), Attributes))
- return mapWindowsError(GetLastError());
-
- return std::error_code();
-}
-
-std::error_code setLastModificationAndAccessTime(int FD, TimePoint<> Time) {
- FILETIME FT = toFILETIME(Time);
- HANDLE FileHandle = reinterpret_cast<HANDLE>(_get_osfhandle(FD));
+ return getStatus(FileHandle, Result);
+}
+
+std::error_code setLastModificationAndAccessTime(int FD, TimePoint<> Time) {
+ FILETIME FT = toFILETIME(Time);
+ HANDLE FileHandle = reinterpret_cast<HANDLE>(_get_osfhandle(FD));
if (!SetFileTime(FileHandle, NULL, &FT, &FT))
return mapWindowsError(::GetLastError());
return std::error_code();
OpenPOWER on IntegriCloud