diff options
| author | Aaron Ballman <aaron@aaronballman.com> | 2017-03-13 12:17:14 +0000 |
|---|---|---|
| committer | Aaron Ballman <aaron@aaronballman.com> | 2017-03-13 12:17:14 +0000 |
| commit | f5cba91591f45baf25d097763b59915bbee81114 (patch) | |
| tree | e1ff2bf0f6d56a91b9474d47726127e7438a5326 /llvm/lib/Support/Unix | |
| parent | 7163ecb4294ede871a9fe5e5d27b6937d5bade7e (diff) | |
| download | bcm5719-llvm-f5cba91591f45baf25d097763b59915bbee81114.tar.gz bcm5719-llvm-f5cba91591f45baf25d097763b59915bbee81114.zip | |
Add support for getting file system permissions and implement sys::fs::permissions to set them.
Patch by James Henderson.
llvm-svn: 297617
Diffstat (limited to 'llvm/lib/Support/Unix')
| -rw-r--r-- | llvm/lib/Support/Unix/Path.inc | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/llvm/lib/Support/Unix/Path.inc b/llvm/lib/Support/Unix/Path.inc index cdc692b8f1f..b2669d51eb8 100644 --- a/llvm/lib/Support/Unix/Path.inc +++ b/llvm/lib/Support/Unix/Path.inc @@ -568,12 +568,21 @@ 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 setLastModificationAndAccessTime(int FD, TimePoint<> Time) { -#if defined(HAVE_FUTIMENS) - timespec Times[2]; + 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];
Times[0] = Times[1] = sys::toTimeSpec(Time); if (::futimens(FD, Times)) return std::error_code(errno, std::generic_category()); |

