Skip to content

Commit ecfd05e

Browse files
committed
tar: use tar.writer in fuzz web server
1 parent e53fb65 commit ecfd05e

File tree

1 file changed

+5
-25
lines changed

1 file changed

+5
-25
lines changed

lib/std/Build/Fuzz/WebServer.zig

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,6 @@ fn serveSourcesTar(ws: *WebServer, request: *std.http.Server.Request) !void {
456456
},
457457
},
458458
});
459-
const w = response.writer();
460459

461460
const DedupeTable = std.ArrayHashMapUnmanaged(Build.Cache.Path, void, Build.Cache.Path.TableAdapter, false);
462461
var dedupe_table: DedupeTable = .{};
@@ -490,40 +489,21 @@ fn serveSourcesTar(ws: *WebServer, request: *std.http.Server.Request) !void {
490489

491490
var cwd_cache: ?[]const u8 = null;
492491

492+
var archiver = std.tar.writer(response.writer());
493+
493494
for (deduped_paths) |joined_path| {
494495
var file = joined_path.root_dir.handle.openFile(joined_path.sub_path, .{}) catch |err| {
495496
log.err("failed to open {}: {s}", .{ joined_path, @errorName(err) });
496497
continue;
497498
};
498499
defer file.close();
499500

500-
const stat = file.stat() catch |err| {
501-
log.err("failed to stat {}: {s}", .{ joined_path, @errorName(err) });
502-
continue;
503-
};
504-
if (stat.kind != .file)
505-
continue;
506-
507-
const padding = p: {
508-
const remainder = stat.size % 512;
509-
break :p if (remainder > 0) 512 - remainder else 0;
510-
};
511-
512-
var file_header = std.tar.output.Header.init();
513-
file_header.typeflag = .regular;
514-
try file_header.setPath(
515-
joined_path.root_dir.path orelse try memoizedCwd(arena, &cwd_cache),
516-
joined_path.sub_path,
517-
);
518-
try file_header.setSize(stat.size);
519-
try file_header.updateChecksum();
520-
try w.writeAll(std.mem.asBytes(&file_header));
521-
try w.writeFile(file);
522-
try w.writeByteNTimes(0, padding);
501+
archiver.prefix = joined_path.root_dir.path orelse try memoizedCwd(arena, &cwd_cache);
502+
try archiver.writeFile(joined_path.sub_path, file);
523503
}
524504

525505
// intentionally omitting the pointless trailer
526-
//try w.writeByteNTimes(0, 512 * 2);
506+
//try archiver.finish();
527507
try response.end();
528508
}
529509

0 commit comments

Comments
 (0)