authorgravatar for igor.anic@gmail.comIgor Anić <igor.anic@gmail.com> 2023-12-12 14:18:20+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-01-13 19:37:33-07:00
log76fe1f53d5b9cfae100854afe495e8b378d2dc9e
treeba636c65aa00fee1390742052b5c121968c6bef8
parenta75fd4ff156abdd131c2b609b9b19573813838a0

tar: fix tests on 32-bit platforms


2 files changed, 14 insertions(+), 11 deletions(-)

lib/std/tar.zig+10-10
...@@ -250,7 +250,7 @@ fn TarReader(comptime ReaderType: type) type {...@@ -250,7 +250,7 @@ fn TarReader(comptime ReaderType: type) type {
250 pub const File = struct {250 pub const File = struct {
251 name: []const u8, // name of file, symlink or directory251 name: []const u8, // name of file, symlink or directory
252 link_name: []const u8, // target name of symlink252 link_name: []const u8, // target name of symlink
253 size: usize, // size of the file in bytes253 size: u64, // size of the file in bytes
254 mode: u32,254 mode: u32,
255 kind: Header.Kind,255 kind: Header.Kind,
256256
...@@ -260,7 +260,7 @@ fn TarReader(comptime ReaderType: type) type {...@@ -260,7 +260,7 @@ fn TarReader(comptime ReaderType: type) type {
260 pub fn write(self: File, writer: anytype) !void {260 pub fn write(self: File, writer: anytype) !void {
261 var buffer: [4096]u8 = undefined;261 var buffer: [4096]u8 = undefined;
262262
263 var n: usize = 0;263 var n: u64 = 0;
264 while (n < self.size) {264 while (n < self.size) {
265 const buf = buffer[0..@min(buffer.len, self.size - n)];265 const buf = buffer[0..@min(buffer.len, self.size - n)];
266 try self.reader.readNoEof(buf);266 try self.reader.readNoEof(buf);
...@@ -308,9 +308,9 @@ fn TarReader(comptime ReaderType: type) type {...@@ -308,9 +308,9 @@ fn TarReader(comptime ReaderType: type) type {
308 }308 }
309309
310 // Number of padding bytes in the last file block.310 // Number of padding bytes in the last file block.
311 inline fn blockPadding(size: usize) usize {311 inline fn blockPadding(size: u64) usize {
312 const block_rounded = std.mem.alignForward(usize, size, Header.SIZE); // size rounded to te block boundary312 const block_rounded = std.mem.alignForward(u64, size, Header.SIZE); // size rounded to te block boundary
313 return block_rounded - size;313 return @intCast(block_rounded - size);
314 }314 }
315315
316 /// Iterates through the tar archive as if it is a series of files.316 /// Iterates through the tar archive as if it is a series of files.
...@@ -324,7 +324,7 @@ fn TarReader(comptime ReaderType: type) type {...@@ -324,7 +324,7 @@ fn TarReader(comptime ReaderType: type) type {
324324
325 while (try self.readHeader()) |header| {325 while (try self.readHeader()) |header| {
326 const kind = header.kind();326 const kind = header.kind();
327 const size: usize = @intCast(try header.size());327 const size: u64 = try header.size();
328 self.padding = blockPadding(size);328 self.padding = blockPadding(size);
329329
330 switch (kind) {330 switch (kind) {
...@@ -349,16 +349,16 @@ fn TarReader(comptime ReaderType: type) type {...@@ -349,16 +349,16 @@ fn TarReader(comptime ReaderType: type) type {
349 },349 },
350 // Prefix header types350 // Prefix header types
351 .gnu_long_name => {351 .gnu_long_name => {
352 self.file.name = try self.readString(size, &self.file_name_buffer);352 self.file.name = try self.readString(@intCast(size), &self.file_name_buffer);
353 },353 },
354 .gnu_long_link => {354 .gnu_long_link => {
355 self.file.link_name = try self.readString(size, &self.link_name_buffer);355 self.file.link_name = try self.readString(@intCast(size), &self.link_name_buffer);
356 },356 },
357 .extended_header => {357 .extended_header => {
358 // Use just attributes from last extended header.358 // Use just attributes from last extended header.
359 self.initFile();359 self.initFile();
360360
361 var rdr = paxReader(self.reader, size);361 var rdr = paxReader(self.reader, @intCast(size));
362 while (try rdr.next()) |attr| {362 while (try rdr.next()) |attr| {
363 switch (attr.kind) {363 switch (attr.kind) {
364 .path => {364 .path => {
...@@ -369,7 +369,7 @@ fn TarReader(comptime ReaderType: type) type {...@@ -369,7 +369,7 @@ fn TarReader(comptime ReaderType: type) type {
369 },369 },
370 .size => {370 .size => {
371 var buf: [64]u8 = undefined;371 var buf: [64]u8 = undefined;
372 self.file.size = try std.fmt.parseInt(usize, try attr.value(&buf), 10);372 self.file.size = try std.fmt.parseInt(u64, try attr.value(&buf), 10);
373 },373 },
374 }374 }
375 }375 }
lib/std/tar/test.zig+4-1
...@@ -1,12 +1,15 @@...@@ -1,12 +1,15 @@
1const std = @import("../std.zig");1const std = @import("../std.zig");
2const builtin = @import("builtin");
2const tar = std.tar;3const tar = std.tar;
3const assert = std.debug.assert;4const assert = std.debug.assert;
45
5test "tar run Go test cases" {6test "tar run Go test cases" {
7 if (builtin.os.tag == .wasi) return error.SkipZigTest;
8
6 const Case = struct {9 const Case = struct {
7 const File = struct {10 const File = struct {
8 name: []const u8,11 name: []const u8,
9 size: usize = 0,12 size: u64 = 0,
10 mode: u32 = 0,13 mode: u32 = 0,
11 link_name: []const u8 = &[0]u8{},14 link_name: []const u8 = &[0]u8{},
12 kind: tar.Header.Kind = .normal,15 kind: tar.Header.Kind = .normal,