zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 505bc9817a2b78c97819f481b3cd98102c7ff964 (tree)
parent 14c3c47fb7315e6199751082f9ef544972bb13e6
Author: Ryan Liptak <squeek502@hotmail.com>
Date:   Fri, 26 Jun 2020 16:08:26 -0700

Implement Dir.deleteFile in terms of deleteFileZ/deleteFileW

Reduces duplicate code, consistent with other fn/fnZ/fnW implementations

Diffstat:
Mlib/std/fs.zig | 26++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/lib/std/fs.zig b/lib/std/fs.zig @@ -1110,20 +1110,18 @@ pub const Dir = struct { /// Delete a file name and possibly the file it refers to, based on an open directory handle. /// Asserts that the path parameter has no null bytes. pub fn deleteFile(self: Dir, sub_path: []const u8) DeleteFileError!void { - os.unlinkat(self.fd, sub_path, 0) catch |err| switch (err) { - error.DirNotEmpty => unreachable, // not passing AT_REMOVEDIR - error.AccessDenied => |e| switch (builtin.os.tag) { - // non-Linux POSIX systems return EPERM when trying to delete a directory, so - // we need to handle that case specifically and translate the error - .macosx, .ios, .freebsd, .netbsd, .dragonfly => { - const fstat = os.fstatat(self.fd, sub_path, 0) catch return e; - const is_dir = fstat.mode & os.S_IFMT == os.S_IFDIR; - return if (is_dir) error.IsDir else e; - }, - else => return e, - }, - else => |e| return e, - }; + if (builtin.os.tag == .windows) { + const sub_path_w = try os.windows.sliceToPrefixedFileW(sub_path); + return self.deleteFileW(sub_path_w.span().ptr); + } else if (builtin.os.tag == .wasi) { + os.unlinkatWasi(self.fd, sub_path, 0) catch |err| switch (err) { + error.DirNotEmpty => unreachable, // not passing AT_REMOVEDIR + else => |e| return e, + }; + } else { + const sub_path_c = try os.toPosixPath(sub_path); + return self.deleteFileZ(&sub_path_c); + } } pub const deleteFileC = @compileError("deprecated: renamed to deleteFileZ");