aboutsummaryrefslogtreecommitdiff
path: root/lib/std/tar.zig
AgeCommit message (Collapse)Author
2025-10-29std.Io: add dirOpenDir and WASI implAndrew Kelley
2025-07-22std.tar: update to new I/O APIAndrew Kelley
2025-07-07std.io: deprecated Reader/Writer; introduce new APIAndrew Kelley
2025-04-27chore(std.mem): Rename `trimLeft` and `trimRight`Shun Sakai
Rename `trimLeft` to `trimStart`, and `trimRight` to `trimEnd`. `trimLeft` and `trimRight` functions remain as deprecated aliases for these new names.
2025-04-16std.tar: pass entry kind to rootDir to avoid setting root_dir to file (#23456)Tobias Simetsreiter
2024-10-04Remove old deprecated symbols in std (#21584)PauloCampana
Also, actually run tests inside std/tar/writer.zig
2024-09-12Replace deprecated default initializations with decl literalsLinus Groh
2024-08-15std.tar: add writer (#19603)Igor Anić
Simplifies code in docs creation where we used `std.tar.output.Header`. Writer uses that Header internally and provides higher level interface. Updates checksum on write, handles long file names, allows setting mtime and file permission mode. Provides handy interface for passing `Dir.WalkerEntry`.
2024-07-09std: fix typos (#20560)Jora Troosh
2024-07-03std.tar: add strip components error to diagnosticsIgor Anić
This was the only kind of error which was raised in pipeToFileSystem and not added to Diagnostics. Shell tar silently ignores paths which are stripped out when used with `--strip-components` switch. This enables that same behavior, errors will be collected in diagnostics but caller is free to ignore that type of diagnostics errors. Enables use case where caller knows structure of the tar file and want to extract only some deeply nested folders ignoring upper files/folders. Fixes: #17620 by giving caller options: - not provide diagnostic and get errors - provide diagnostics and analyze errors - provide diagnostics and ignore errors
2024-06-13std: Convert deprecated aliases to compile errors and fix usagesRyan Liptak
Deprecated aliases that are now compile errors: - `std.fs.MAX_PATH_BYTES` (renamed to `std.fs.max_path_bytes`) - `std.mem.tokenize` (split into `tokenizeAny`, `tokenizeSequence`, `tokenizeScalar`) - `std.mem.split` (split into `splitSequence`, `splitAny`, `splitScalar`) - `std.mem.splitBackwards` (split into `splitBackwardsSequence`, `splitBackwardsAny`, `splitBackwardsScalar`) - `std.unicode` + `utf16leToUtf8Alloc`, `utf16leToUtf8AllocZ`, `utf16leToUtf8`, `fmtUtf16le` (all renamed to have capitalized `Le`) + `utf8ToUtf16LeWithNull` (renamed to `utf8ToUtf16LeAllocZ`) - `std.zig.CrossTarget` (moved to `std.Target.Query`) Deprecated `lib/std/std.zig` decls were deleted instead of made a `@compileError` because the `refAllDecls` in the test block would trigger the `@compileError`. The deleted top-level `std` namespaces are: - `std.rand` (renamed to `std.Random`) - `std.TailQueue` (renamed to `std.DoublyLinkedList`) - `std.ChildProcess` (renamed/moved to `std.process.Child`) This is not exhaustive. Deprecated aliases that I didn't touch: + `std.io.*` + `std.Build.*` + `std.builtin.Mode` + `std.zig.c_translation.CIntLiteralRadix` + anything in `src/`
2024-05-01std.tar: fix finding tar root_dir (#19829)Igor Anić
For issue #19820.
2024-04-09fetch: use empty string instead of null for root_dirIgor Anić
Make it consistent with Cache.Path sub_path. Remove null check in many locations.
2024-04-03tar: find package root dir in pipeToFileSystemIgor Anić
While iterating over all files in tarball set root_dir in diagnostic if there is single root in tarball. Will be used in package manager with strip_components = 0 to find the root of the fetched package.
2024-04-02std.tar: implement executable bit onlyIgor Anić
2024-03-21std: promote tests to doctestsAndrew Kelley
Now these show up as "example usage" in generated documentation.
2024-03-11std.tar: fix broken public interfaceIgor Anić
2024-03-11std.tar: use doctestIgor Anić
Make std.tar look better in docs. Remove from public interface what is not necessary. Add comment to the public methods. Add doctest as usage examples for iterator and pipeToFileSystem.
2024-03-11std.tar: fix test hanging on windowsIgor Anić
Problem was manifested only on windows with target `-target aarch64-windows-gnu`. I was creating new files but not closing any of them. Tmp dir cleanup hangs looping in deleteTree forever.
2024-03-11disable test which is hanging on windows in ciIgor Anić
When this test is enabled something like: `zig build test docs --zig-lib-dir .\lib\ -Dstatic-llvm -Dskip-non-native -Denable-symlinks-windows` never finishes. Those are failed runs from ci: https://github.com/ziglang/zig/actions/runs/8137710393 https://github.com/ziglang/zig/actions/runs/8129619923 https://github.com/ziglang/zig/actions/runs/8125845128 Isolating that test and running it is not a problem. Running something like `zig test .\lib\std\std.zig --zig-lib-dir .\lib\` is fine.
2024-03-11std.tar: fix build on 32 bit platformIgor Anić
Fixing error from ci: std/tar.zig:423:54: error: expected type 'usize', found 'u64' std/tar.zig:423:54: note: unsigned 32-bit int cannot represent all possible unsigned 64-bit values
2024-03-11std.tar: document iterator interface with exampleIgor Anić
2024-03-11std.tar make iterator interface more ergonomicIgor Anić
for the then end users: 1. Don't require user to call file.skip() on file returned from iterator.next if file is not read. Iterator will now handle this. Previously that returned header parsing error, without knowing some tar internals it is hard to understand what is required from user. 2. Use iterator.File.kind enum which is similar to fs.File.Kind, something familiar. Internal Header.Kind has many types which are not exposed but the user needs to have else in kind switch to cover those cases. 3. Add reader interface to the iterator.File.
2024-03-11std.tar: don't return in iterator initIgor Anić
Don't assert min buffer size on iterator init. That was changing public interface. This way we don't break that interface.
2024-03-11std.tar: remove redundant test name prefixesIgor Anić
2024-03-11std.tar: test buffers provided to the iteratorIgor Anić
Tar header stores name in max 256 bytes and link name in max 100 bytes. Those are minimums for provided buffers. Error is raised during iterator init if buffers are not long enough. Pax and gnu extensions can store longer names. If such extension is reached during unpack and don't fit into provided buffer error is returned.
2024-03-11std.tar: add tests for file and symlink createIgor Anić
Should do that before I broke package manager!
2024-03-10-femit-docs: creating sources.tarAndrew Kelley
It's always a good day when you get to use File.writeFileAll 😎
2024-02-29Merge pull request #19126 from ianic/tar_case_sensitiveAndrew Kelley
std.tar: fix unconditional error return
2024-02-28std.tar.iterator: make the buffers configurableAndrew Kelley
Provides more API flexibility and correctness, while still preserving the handy high level `pipeToFileSystem` API.
2024-02-28std.tar: avoid dependency on file systemAndrew Kelley
In the iterator function which is the low-level API, don't depend on `std.fs.MAX_PATH_BYTES` because this is not defined on all operating systems, such as freestanding. However in such environments it still makes sense to be able to extract from a tar file. An even more flexible solution would be to accept the buffers as arguments to iterator() which I think is a good idea, but for now let's just set the same upper limmit across all operating systems.
2024-02-29std.tar: fix unconditional error returnIgor Anić
2024-02-26Merge pull request #19081 from ianic/tar_case_sensitiveAndrew Kelley
std.tar don't overwrite files on unpack
2024-02-26std.tar fix refactored functionIgor Anić
It was not returning error in all cases. Bug in refactoring.
2024-02-25std.tar skip test on windowsIgor Anić
Or other platform which don't support symlinks.
2024-02-25std.tar improve error reportingIgor Anić
Report file name which failed to create in all cases.
2024-02-24std.tar don't overwrite existing fileIgor Anić
Fail with error if file already exists. File is not silently overwritten but an error is raised. Fixes: #18089
2024-02-24std.tar fix assert exploited by fuzzingIgor Anić
2024-02-23std.tar fix integer overflow in header size parseIgor Anić
Found by fuzzing. Fixing code and adding test.
2024-02-23std.tar fix parsing mode field in tar headerIgor Anić
Found by fuzzing. Previous numeric function assumed that is is getting buffer of size 12, mode is size 8. Fuzzing found overflow. Fixing and adding test cases.
2024-02-23std.tar: remove abuse of inline fnAndrew Kelley
In general, any `inline fn` should document why it is using `inline` because the rule of thumb is: don't use inline.
2024-02-22fix crash in tar found by fuzzingIgor Anić
Running fuzzing tar test with [zig std lib fuzzing](https://github.com/squeek502/zig-std-lib-fuzzing) reached and assert in tar implementation. Assert (in std lib) should not be reachable by external input, so I'm fixing this to return error.
2024-01-15Permits tar directory path without trailing slashcipharius
2024-01-13tar: improve diagnostic reportingIgor Anić
Using Python testtar file (mentioned in #14310) to test diagnostic reporting. Added computing checksum by using both unsigned and signed header bytes values. Added skipping gnu exteneded sparse headers while reporting unsupported header in diagnostic. Note on testing: wget https://github.com/python/cpython/raw/3.11/Lib/test/testtar.tar -O /tmp/testtar.tar ``` test "Python testtar.tar file" { const file_name = "testtar.tar"; var file = try std.fs.cwd().openFile("/tmp/" ++ file_name, .{}); defer file.close(); var diag = Options.Diagnostics{ .allocator = std.testing.allocator }; defer diag.deinit(); var iter = iterator(file.reader(), &diag); while (try iter.next()) |f| { std.debug.print("supported: {} {s} {d}\n", .{ f.kind, f.name, f.size }); try f.skip(); } for (diag.errors.items) |e| { switch (e) { .unsupported_file_type => |u| { std.debug.print("unsupported: {} {s}\n", .{ u.file_type, u.file_name }); }, else => unreachable, } } } ```
2024-01-13tar: rename reader to iteratorIgor Anić
Itarator has `next` function, iterates over tar files. When using from outside of module with `tar.` prefix makes more sense. var iter = tar.iterator(reader, null); while (try iter.next()) |file| { ... }
2024-01-13tar: fix tests on 32-bit platformsIgor Anić
2024-01-13tar: move test cases to std/tar/testdataIgor Anić
Create std/tar/test.zig for test which uses cases from testdata.
2024-01-13tar: add Go test case files to the projectIgor Anić
2024-01-13tar: reorganize file, functions before testsIgor Anić
2024-01-13tar: use file word in less placesIgor Anić