aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os.zig
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2020-01-15 18:11:54 +1000
committerAndrew Kelley <andrew@ziglang.org>2020-03-03 13:25:43 -0500
commit627618a38d291d9cc76c8e30e33cad60dc26cf11 (patch)
tree147fb6c132985cb88461abb58fcf1d18a36ce5eb /lib/std/os.zig
parentdfb420e6d779b9b6d60a277401aadba2800e3572 (diff)
downloadzig-627618a38d291d9cc76c8e30e33cad60dc26cf11.tar.gz
zig-627618a38d291d9cc76c8e30e33cad60dc26cf11.zip
std: add Dir.changeDir as wrapper around fchdir
Diffstat (limited to 'lib/std/os.zig')
-rw-r--r--lib/std/os.zig14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/std/os.zig b/lib/std/os.zig
index f97676a821..7563a34f21 100644
--- a/lib/std/os.zig
+++ b/lib/std/os.zig
@@ -1706,6 +1706,20 @@ pub fn chdirC(dir_path: [*:0]const u8) ChangeCurDirError!void {
}
}
+pub fn fchdir(dirfd: fd_t) ChangeCurDirError!void {
+ while (true) {
+ switch (errno(system.fchdir(dirfd))) {
+ 0 => return,
+ EACCES => return error.AccessDenied,
+ EBADF => unreachable,
+ ENOTDIR => return error.NotDir,
+ EINTR => continue,
+ EIO => return error.FileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
pub const ReadLinkError = error{
AccessDenied,
FileSystem,