about summary refs log tree commit diff
path: root/src/main.zig
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2026-09-23 21:09:41 +0200
committerRobert Günzler <r@gnzler.io>2026-09-23 23:23:41 +0200
commit28ff7b629e2e67d27e1f6fa6e0d951e11ecc903c (patch)
tree5e49e398eda014b700cfe88f3ab63fd863832725 /src/main.zig
parent9d4766c403ad107c2e2e1306b772f83b7a527054 (diff)
downloadsite-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.zig24
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;