diff --git a/lib/std/tar.zig b/lib/std/tar.zig index a5fbbed10421253277fdc72af8cf9278b9705816..5bca19f0bd4c8f69a21330563c3c80292b79df88 100644 --- a/lib/std/tar.zig +++ b/lib/std/tar.zig @@ -564,7 +564,7 @@ pub fn pipeToFileSystem(dir: std.fs.Dir, reader: anytype, options: Options) !voi const link_name = file.link_name; createDirAndSymlink(dir, link_name, file_name) catch |err| { - const d = options.diagnostics orelse return err; + const d = options.diagnostics orelse return error.UnableToCreateSymLink; try d.errors.append(d.allocator, .{ .unable_to_create_sym_link = .{ .code = err, .file_name = try d.allocator.dupe(u8, file_name), diff --git a/lib/std/tar/test.zig b/lib/std/tar/test.zig index e568adb539b3047db34430f768e325430f9e545d..be840f5ddc0987df75452831410c3f35e343a457 100644 --- a/lib/std/tar/test.zig +++ b/lib/std/tar/test.zig @@ -467,11 +467,15 @@ test "tar pipeToFileSystem" { var root = std.testing.tmpDir(.{ .no_follow = true }); defer root.cleanup(); - try tar.pipeToFileSystem(root.dir, fsb.reader(), .{ + tar.pipeToFileSystem(root.dir, fsb.reader(), .{ .mode_mode = .ignore, .strip_components = 1, .exclude_empty_directories = true, - }); + }) catch |err| { + // Skip on platform which don't support symlinks + if (err == error.UnableToCreateSymLink) return error.SkipZigTest; + return err; + }; try testing.expectError(error.FileNotFound, root.dir.statFile("empty")); try testing.expect((try root.dir.statFile("a/file")).kind == .file);