| ... | @@ -225,14 +225,16 @@ fn nullStr(str: []const u8) []const u8 { | ... | @@ -225,14 +225,16 @@ fn nullStr(str: []const u8) []const u8 { |
| 225 | return str; | 225 | return str; |
| 226 | } | 226 | } |
| 227 | | 227 | |
| 228 | pub fn tarReader(reader: anytype, diagnostics: ?*Options.Diagnostics) TarReader(@TypeOf(reader)) { | 228 | /// Iterates over files in tar archive. |
| | 229 | /// `next` returns each file in `reader` tar archive. |
| | 230 | pub fn iterator(reader: anytype, diagnostics: ?*Options.Diagnostics) Iterator(@TypeOf(reader)) { |
| 229 | return .{ | 231 | return .{ |
| 230 | .reader = reader, | 232 | .reader = reader, |
| 231 | .diagnostics = diagnostics, | 233 | .diagnostics = diagnostics, |
| 232 | }; | 234 | }; |
| 233 | } | 235 | } |
| 234 | | 236 | |
| 235 | fn TarReader(comptime ReaderType: type) type { | 237 | fn Iterator(comptime ReaderType: type) type { |
| 236 | return struct { | 238 | return struct { |
| 237 | reader: ReaderType, | 239 | reader: ReaderType, |
| 238 | diagnostics: ?*Options.Diagnostics, | 240 | diagnostics: ?*Options.Diagnostics, |
| ... | @@ -358,7 +360,7 @@ fn TarReader(comptime ReaderType: type) type { | ... | @@ -358,7 +360,7 @@ fn TarReader(comptime ReaderType: type) type { |
| 358 | // Use just attributes from last extended header. | 360 | // Use just attributes from last extended header. |
| 359 | self.initFile(); | 361 | self.initFile(); |
| 360 | | 362 | |
| 361 | var rdr = paxReader(self.reader, @intCast(size)); | 363 | var rdr = paxIterator(self.reader, @intCast(size)); |
| 362 | while (try rdr.next()) |attr| { | 364 | while (try rdr.next()) |attr| { |
| 363 | switch (attr.kind) { | 365 | switch (attr.kind) { |
| 364 | .path => { | 366 | .path => { |
| ... | @@ -393,10 +395,10 @@ fn TarReader(comptime ReaderType: type) type { | ... | @@ -393,10 +395,10 @@ fn TarReader(comptime ReaderType: type) type { |
| 393 | }; | 395 | }; |
| 394 | } | 396 | } |
| 395 | | 397 | |
| 396 | // Pax attributes reader. | 398 | /// Pax attributes iterator. |
| 397 | // Size is length of pax extended header in reader. | 399 | /// Size is length of pax extended header in reader. |
| 398 | fn paxReader(reader: anytype, size: usize) PaxReader(@TypeOf(reader)) { | 400 | fn paxIterator(reader: anytype, size: usize) PaxIterator(@TypeOf(reader)) { |
| 399 | return PaxReader(@TypeOf(reader)){ | 401 | return PaxIterator(@TypeOf(reader)){ |
| 400 | .reader = reader, | 402 | .reader = reader, |
| 401 | .size = size, | 403 | .size = size, |
| 402 | }; | 404 | }; |
| ... | @@ -408,7 +410,7 @@ const PaxAttributeKind = enum { | ... | @@ -408,7 +410,7 @@ const PaxAttributeKind = enum { |
| 408 | size, | 410 | size, |
| 409 | }; | 411 | }; |
| 410 | | 412 | |
| 411 | fn PaxReader(comptime ReaderType: type) type { | 413 | fn PaxIterator(comptime ReaderType: type) type { |
| 412 | return struct { | 414 | return struct { |
| 413 | size: usize, // cumulative size of all pax attributes | 415 | size: usize, // cumulative size of all pax attributes |
| 414 | reader: ReaderType, | 416 | reader: ReaderType, |
| ... | @@ -508,8 +510,7 @@ pub fn pipeToFileSystem(dir: std.fs.Dir, reader: anytype, options: Options) !voi | ... | @@ -508,8 +510,7 @@ pub fn pipeToFileSystem(dir: std.fs.Dir, reader: anytype, options: Options) !voi |
| 508 | }, | 510 | }, |
| 509 | } | 511 | } |
| 510 | | 512 | |
| 511 | var iter = tarReader(reader, options.diagnostics); | 513 | var iter = iterator(reader, options.diagnostics); |
| 512 | | | |
| 513 | while (try iter.next()) |file| { | 514 | while (try iter.next()) |file| { |
| 514 | switch (file.kind) { | 515 | switch (file.kind) { |
| 515 | .directory => { | 516 | .directory => { |
| ... | @@ -601,7 +602,7 @@ test "tar stripComponents" { | ... | @@ -601,7 +602,7 @@ test "tar stripComponents" { |
| 601 | try expectEqualStrings("c", try stripComponents("a/b/c", 2)); | 602 | try expectEqualStrings("c", try stripComponents("a/b/c", 2)); |
| 602 | } | 603 | } |
| 603 | | 604 | |
| 604 | test "tar PaxReader" { | 605 | test "tar PaxIterator" { |
| 605 | const Attr = struct { | 606 | const Attr = struct { |
| 606 | kind: PaxAttributeKind, | 607 | kind: PaxAttributeKind, |
| 607 | value: []const u8 = undefined, | 608 | value: []const u8 = undefined, |
| ... | @@ -699,10 +700,10 @@ test "tar PaxReader" { | ... | @@ -699,10 +700,10 @@ test "tar PaxReader" { |
| 699 | | 700 | |
| 700 | outer: for (cases) |case| { | 701 | outer: for (cases) |case| { |
| 701 | var stream = std.io.fixedBufferStream(case.data); | 702 | var stream = std.io.fixedBufferStream(case.data); |
| 702 | var rdr = paxReader(stream.reader(), case.data.len); | 703 | var iter = paxIterator(stream.reader(), case.data.len); |
| 703 | | 704 | |
| 704 | var i: usize = 0; | 705 | var i: usize = 0; |
| 705 | while (rdr.next() catch |err| { | 706 | while (iter.next() catch |err| { |
| 706 | if (case.err) |e| { | 707 | if (case.err) |e| { |
| 707 | try std.testing.expectEqual(e, err); | 708 | try std.testing.expectEqual(e, err); |
| 708 | continue; | 709 | continue; |