diff options
Diffstat (limited to 'src/main.zig')
| -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; |