Function makePathStatus [src]

Same as makePath except returns whether the path already existed or was successfully created.

Prototype

pub fn makePathStatus(self: Dir, sub_path: []const u8) (MakeError || StatFileError)!MakePathStatus

Parameters

self: Dirsub_path: []const u8

Source

pub fn makePathStatus(self: Dir, sub_path: []const u8) (MakeError || StatFileError)!MakePathStatus { var it = try fs.path.componentIterator(sub_path); var status: MakePathStatus = .existed; var component = it.last() orelse return error.BadPathName; while (true) { if (self.makeDir(component.path)) |_| { status = .created; } else |err| switch (err) { error.PathAlreadyExists => { // stat the file and return an error if it's not a directory // this is important because otherwise a dangling symlink // could cause an infinite loop check_dir: { // workaround for windows, see https://github.com/ziglang/zig/issues/16738 const fstat = self.statFile(component.path) catch |stat_err| switch (stat_err) { error.IsDir => break :check_dir, else => |e| return e, }; if (fstat.kind != .directory) return error.NotDir; } }, error.FileNotFound => |e| { component = it.previous() orelse return e; continue; }, else => |e| return e, } component = it.next() orelse return status; } }