diff options
| author | Robert Günzler <r@gnzler.io> | 2026-09-23 21:09:41 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2026-09-23 23:23:41 +0200 |
| commit | 28ff7b629e2e67d27e1f6fa6e0d951e11ecc903c (patch) | |
| tree | 5e49e398eda014b700cfe88f3ab63fd863832725 | |
| parent | 9d4766c403ad107c2e2e1306b772f83b7a527054 (diff) | |
| download | site-28ff7b629e2e67d27e1f6fa6e0d951e11ecc903c.tar.gz | |
return optionals from xattr helpers
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '')
| -rw-r--r-- | src/main.zig | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/main.zig b/src/main.zig index 2730187..80dd1bb 100644 --- a/src/main.zig +++ b/src/main.zig @@ -651,19 +651,11 @@ fn formatLink(gpa: Allocator, name: []const u8, offset: ?[]const u8) ![]u8 { fn targetExists(io: Io, gpa: Allocator, target_fd: Io.File, root_dir: Io.Dir) !bool { if (FORCE) return false; - const target_parts = getXattrSourceComponents(gpa, target_fd) catch |err| - switch (err) { - error.XattrNotFound => return false, - else => return err, - }; + const target_parts = try getXattrSourceComponents(gpa, target_fd) orelse return false; defer gpa.free(target_parts); defer for (target_parts) |p| gpa.free(p); - const target_dgst = getXattrSourceDigest(gpa, target_fd) catch |err| - switch (err) { - error.XattrNotFound => return false, - else => return err, - }; + const target_dgst = try getXattrSourceDigest(gpa, target_fd) orelse return false; // create digests for parts var actual_dgsts: std.ArrayList(Digest) = .empty; @@ -715,13 +707,13 @@ fn setXattr(fd: Io.File, key: [:0]const u8, val: []const u8) !void { } } -fn getXattr(gpa: Allocator, fd: Io.File, key: [:0]const u8) ![]u8 { +fn getXattr(gpa: Allocator, fd: Io.File, key: [:0]const u8) !?[]u8 { var buffer: [BUFFER_SIZE]u8 = undefined; const rc = linux.fgetxattr(fd.handle, key.ptr, &buffer, buffer.len); switch (linux.errno(rc)) { .SUCCESS => {}, .OPNOTSUPP => return error.XattrNotSupported, - .NODATA => return error.XattrNotFound, + .NODATA => return null, else => { log.err("errno: {d}", .{linux.errno(rc)}); return error.XattrError; @@ -737,8 +729,8 @@ fn setXattrSourceDigest(fd: Io.File, dgst: Digest) !void { return try setXattr(fd, XATTR_SOURCE_DIGEST, &dgst); } -fn getXattrSourceDigest(gpa: Allocator, fd: Io.File) !Digest { - const val = try getXattr(gpa, fd, XATTR_SOURCE_DIGEST); +fn getXattrSourceDigest(gpa: Allocator, fd: Io.File) !?Digest { + const val = try getXattr(gpa, fd, XATTR_SOURCE_DIGEST) orelse return null; defer gpa.free(val); return val[0..16].*; } @@ -758,8 +750,8 @@ fn setXattrSourceComponents(gpa: Allocator, fd: Io.File, parts: [][]const u8) !v return try setXattr(fd, XATTR_SOURCE_COMPONENTS, val); } -fn getXattrSourceComponents(gpa: Allocator, fd: Io.File) ![][]const u8 { - const val = try getXattr(gpa, fd, XATTR_SOURCE_COMPONENTS); +fn getXattrSourceComponents(gpa: Allocator, fd: Io.File) !?[][]const u8 { + const val = try getXattr(gpa, fd, XATTR_SOURCE_COMPONENTS) orelse return null; defer gpa.free(val); var parts: std.ArrayList([]const u8) = .empty; |