| ... | ... | @@ -85,30 +85,6 @@ pub fn writeLink(w: *Writer, sub_path: []const u8, link_name: []const u8, option |
| 85 | 85 | try w.writeHeader(.symbolic_link, sub_path, link_name, 0, options); |
| 86 | 86 | } |
| 87 | 87 | |
| 88 | | /// Writes fs.Dir.WalkerEntry. Uses `mtime` from file system entry and |
| 89 | | /// default for entry mode . |
| 90 | | pub fn writeEntry(w: *Writer, entry: std.fs.Dir.Walker.Entry) Error!void { |
| 91 | | switch (entry.kind) { |
| 92 | | .directory => { |
| 93 | | try w.writeDir(entry.path, .{ .mtime = try entryMtime(entry) }); |
| 94 | | }, |
| 95 | | .file => { |
| 96 | | var file = try entry.dir.openFile(entry.basename, .{}); |
| 97 | | defer file.close(); |
| 98 | | const stat = try file.stat(); |
| 99 | | try w.writeFile(entry.path, file, stat); |
| 100 | | }, |
| 101 | | .sym_link => { |
| 102 | | var link_name_buffer: [std.fs.max_path_bytes]u8 = undefined; |
| 103 | | const link_name = try entry.dir.readLink(entry.basename, &link_name_buffer); |
| 104 | | try w.writeLink(entry.path, link_name, .{ .mtime = try entryMtime(entry) }); |
| 105 | | }, |
| 106 | | else => { |
| 107 | | return error.UnsupportedWalkerEntryKind; |
| 108 | | }, |
| 109 | | } |
| 110 | | } |
| 111 | | |
| 112 | 88 | fn writeHeader( |
| 113 | 89 | w: *Writer, |
| 114 | 90 | typeflag: Header.FileType, |
| ... | ... | @@ -120,7 +96,7 @@ fn writeHeader( |
| 120 | 96 | var header = Header.init(typeflag); |
| 121 | 97 | try w.setPath(&header, sub_path); |
| 122 | 98 | try header.setSize(size); |
| 123 | | try header.setMtime(if (options.mtime != 0) options.mtime else w.mtimeNow()); |
| 99 | try header.setMtime(options.mtime); |
| 124 | 100 | if (options.mode != 0) |
| 125 | 101 | try header.setMode(options.mode); |
| 126 | 102 | if (typeflag == .symbolic_link) |
| ... | ... | @@ -131,17 +107,6 @@ fn writeHeader( |
| 131 | 107 | try header.write(w.underlying_writer); |
| 132 | 108 | } |
| 133 | 109 | |
| 134 | | fn mtimeNow(w: *Writer) u64 { |
| 135 | | if (w.mtime_now == 0) |
| 136 | | w.mtime_now = @intCast(std.time.timestamp()); |
| 137 | | return w.mtime_now; |
| 138 | | } |
| 139 | | |
| 140 | | fn entryMtime(entry: std.fs.Dir.Walker.Entry) !u64 { |
| 141 | | const stat = try entry.dir.statFile(entry.basename); |
| 142 | | return @intCast(@divFloor(stat.mtime, std.time.ns_per_s)); |
| 143 | | } |
| 144 | | |
| 145 | 110 | /// Writes path in posix header, if don't fit (in name+prefix; 100+155 |
| 146 | 111 | /// bytes) writes it in gnu extended header. |
| 147 | 112 | fn setPath(w: *Writer, header: *Header, sub_path: []const u8) Error!void { |