7571ef42c6
fix: Cast time_t to a known type for snprintf()
2023-02-06 23:18:05 +01:00
88d6fbffb7
fix: Check for _WIN32 instead of _MSC_VER
2023-02-06 23:17:28 +01:00
8cb5175630
fix: Do not #include <sys/types.h> on Windows
...
Instead, we provide our own typedef for mode_t, uid_t and gid_t, and we get time_t from <time.h>.
2023-02-05 14:22:31 +01:00
5bfc7e45ac
chore: Adjust comment in minitar_write_file_entry()
2023-02-05 14:14:37 +01:00
482ac6d949
feat: Add write support
...
This uses a new struct (struct minitar_w).
This struct is initialized using the minitar_open_w function, and deleted using minitar_close_w.
The functions to write to an archive are minitar_write_file_entry() and minitar_write_special_entry().
The difference is that regular files have content, while the rest (special entries) do not.
This commit also adds a new example program (pack), which can create tar archives from files (no directory support though).
Archives created using pack and minitar can be read and extracted using GNU tar!!
Documentation is coming in another commit.
2023-02-04 19:02:08 +01:00
5b0d597c09
feat: Add support for block and character devices
2023-01-29 22:07:54 +01:00
1f08cf4b31
feat: Add support for FIFOs
2023-01-27 23:00:53 +01:00
3772e9e3a6
feat: Add support for hard links
2023-01-27 22:46:18 +01:00
599cac5811
feat: Add support for symbolic links
...
All the pieces were in place, we just needed to put them together.
Sorry, but sub-500 LoC isn't gonna work anymore...
2023-01-26 22:12:42 +01:00
4c90f9078b
fix: Use memcpy() in minitar_strlcpy()
...
This allows the platform to provide a more optimized and FAST version of memcpy than
our manual implementation inside strlcpy.
2023-01-26 21:40:57 +01:00
d8faf424ad
fix: Skip the padding field when calculating header checksums
2023-01-19 22:32:01 +01:00
9a7629459e
chore: Add copyright headers to all source files
2023-01-12 21:04:52 +01:00
27dac123f4
fix: Make minitar_read_contents() take a const pointer to entry
2023-01-12 20:03:42 +01:00
dead1e3ee2
feat: Move all internal structures to a minitar_entry_internal struct
2023-01-12 19:20:32 +01:00
d9b0dce41a
Remove minitar_panic() wrapper around minitar_handle_panic()
2023-01-12 19:01:55 +01:00
e568e88617
Remove assertion that was not used
...
minitar_static_dup() is always called with sizes MUCH smaller than 1024.
2023-01-12 19:00:12 +01:00
7b83dce96a
feat: calculate header checksums and validate them against hdr->chksum
...
Fixes #2 .
2023-01-11 21:02:37 +01:00
f2f4d4ddab
Update tar.h to use MSVC-compatible struct packing
...
Fixes #3 .
2023-01-08 12:47:09 +01:00
55276a78e2
Add newlines at EOF so clang doesn't complain
2022-12-31 12:51:47 +01:00
ab80b8ba45
Correct includes
2022-12-31 12:48:53 +01:00
39d5ee5b9a
Remove dependency on strtoul() and strtoull() by making our own specialized parse_octal() function
2022-12-31 12:40:21 +01:00
165352cdca
Bounds checking :)
2022-12-30 11:13:55 +01:00
d018d128a0
Optionally ignore unsupported types instead of panicking
2022-12-30 11:13:21 +01:00
7d4e774cf7
Rewrite the entire API just to eliminate heap allocations
...
Just bumping minor because nobody uses this and I don't want to jump up to 2.0.0
2022-12-25 14:33:47 +01:00
89bc990725
More optimization and heap elimination
2022-12-25 13:31:11 +01:00
555059a742
PERFORMANCE OPTIMIZATIONS
2022-12-25 13:21:09 +01:00
41a1e23abf
Remove -ansi and make it compile under TCC
2022-12-25 13:06:02 +01:00
51b09f35ad
MSVC does not have __attribute__((weak))
2022-12-25 13:00:47 +01:00
23c313d9cf
Get rid of libgen.h in favor of our own basename :)
2022-12-25 12:51:35 +01:00
c78566bb27
Split basename parsing into a helper function
2022-12-01 19:37:37 +01:00
125ec8f063
Provide strdup ourselves
2022-12-01 19:30:51 +01:00
28d1eab1c1
Remove character and block devices from supported entry types
...
Closes #1 .
2022-11-30 11:20:13 +01:00
eeb7bccda8
Skip null-terminating a result already null-terminated by strlcpy()
2022-11-30 11:14:11 +01:00
e922cfe8b9
read_contents(): shortcircuit if an entry is empty
2022-11-30 10:36:19 +01:00
7b5e6196a7
Make some functions only used in util.c static
2022-11-23 20:59:15 +01:00
f156f8472e
attempt_read_entry -> try_to_read_valid_entry
2022-11-23 20:56:57 +01:00
cdf1e0bcba
Make minitar_read_contents cleaner
2022-11-23 20:56:08 +01:00
726afbae15
Update tar.h
2022-11-23 20:52:18 +01:00
408342cb1d
Remove shadow function
2022-11-23 20:41:44 +01:00
9420107a55
More commenting
2022-11-23 20:40:47 +01:00
9fe8159d5a
More commenting + minitar_get_size_in_blocks -> minitar_align_up_to_block_size
2022-11-23 20:39:34 +01:00
653f9a90d0
Provide our own strndup + a lot more comments going on
2022-11-23 20:32:05 +01:00
f929a860c4
Be more explicit about "what" is necessary to read the file properly
2022-11-23 18:32:42 +01:00
fd85cf1c6a
Full path is now metadata->path and basename metadata->name
...
Shouldn't have rushed to 1.0.0 so quickly. Oh well, I guess I can allow 1.1.0...
2022-11-23 18:32:10 +01:00
b7c27a25a6
Reorganize minitar_attempt_read_entry
2022-11-22 17:28:34 +01:00
ba7b77bdae
Rename internal function minitar_parse_tar_header -> minitar_parse_metadata_from_tar_header
2022-11-22 17:28:15 +01:00
0fbcdde399
Return fclose's status code
2022-11-22 17:25:17 +01:00
d123c49946
Do not automatically read an entry's contents, leave it up to the user
...
This API change modifies minitar_read_entry to skip over the file's contents and instead store the current read position in the entry.
struct minitar_entry no longer has a ptr field, but has a position field (of type fpos_t) for internal use.
minitar_free_entry no longer frees entry->ptr.
A new function has been added, minitar_read_contents().
It reads a certain number of bytes from an entry (which is capped to the entry's size) into a user-provided buffer.
This function can be called at any time provided it is called with a valid archive stream and entry.
This is achieved by calling fgetpos() to store the start of the entry's contents in the entry's position field while reading it.
Then minitar_read_contents() will store the current position, rewind to the entry's position, read the chosen number of bytes from the archive, and then rewind back to the current position.
Since this is a breaking change, it needs a major version bump. Since there was no version, I bumped it to 1.0.0 :)
2022-11-21 20:20:37 +01:00
9695889040
Add FIXME
2022-11-21 19:17:29 +01:00
e3fae29713
Safer string copying
2022-11-21 19:15:52 +01:00