|
const Directory = @This(); const std = @import("../../std.zig"); const fs = std.fs; const fmt = std.fmt; const Allocator = std.mem.Allocator; |
clone()Whether or not the handle should be closed, or the path should be freed is determined by usage, however this function is provided for convenience if it happens to be what the caller needs. |
/// This field is redundant for operations that can act on the open directory handle /// directly, but it is needed when passing the directory to a child process. /// `null` means cwd. path: ?[]const u8, handle: fs.Dir, |
cwd() |
pub fn clone(d: Directory, arena: Allocator) Allocator.Error!Directory { return .{ .path = if (d.path) |p| try arena.dupe(u8, p) else null, .handle = d.handle, }; } |
join() |
pub fn cwd() Directory { return .{ .path = null, .handle = fs.cwd(), }; } |
joinZ() |
pub fn join(self: Directory, allocator: Allocator, paths: []const []const u8) ![]u8 { if (self.path) |p| { // TODO clean way to do this with only 1 allocation const part2 = try fs.path.join(allocator, paths); defer allocator.free(part2); return fs.path.join(allocator, &[_][]const u8{ p, part2 }); } else { return fs.path.join(allocator, paths); } } |
closeAndFree() |
pub fn joinZ(self: Directory, allocator: Allocator, paths: []const []const u8) ![:0]u8 { if (self.path) |p| { // TODO clean way to do this with only 1 allocation const part2 = try fs.path.join(allocator, paths); defer allocator.free(part2); return fs.path.joinZ(allocator, &[_][]const u8{ p, part2 }); } else { return fs.path.joinZ(allocator, paths); } } |
format() |
/// Whether or not the handle should be closed, or the path should be freed /// is determined by usage, however this function is provided for convenience /// if it happens to be what the caller needs. pub fn closeAndFree(self: *Directory, gpa: Allocator) void { self.handle.close(); if (self.path) |p| gpa.free(p); self.* = undefined; } |
eql() |
pub fn format( self: Directory, comptime fmt_string: []const u8, options: fmt.FormatOptions, writer: anytype, ) !void { _ = options; if (fmt_string.len != 0) fmt.invalidFmtError(fmt_string, self); if (self.path) |p| { try writer.writeAll(p); try writer.writeAll(fs.path.sep_str); } } pub fn eql(self: Directory, other: Directory) bool { return self.handle.fd == other.handle.fd; } |
Generated by zstd-live on 2025-08-13 02:35:12 UTC. |