#include "config.h" #include "tar.h" #include "logerr.h" #include #include #include #include #include /* About the ustar format: - name[100] can only contain 100 bytes, while PATH_MAX's minimum value is 256 for `_POSIX_PATH_MAX`, and 1024 for _XOPEN_PATH_MAX. Wait! Actually there is a "prefix" field, which is probably what I'm looking for; - characters are encoded in ISO/IEC 646:1991 [0] instead of UTF-8, even though it requires the file names to be conformant to the POSIX filename restrictions; [0]: https://en.wikipedia.org/wiki/ISO/IEC_646 */ /* * Implementation of the "ustar archive tape" (tar) format, conformant to the * specification [0]. * * [0]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06 */ static void logerr( const char *const s, const char *const msg, const int lineno ) { logerr_file(s, msg, __FILE__, lineno); } static void logerrs( const char *const pre, const char *const mid, const char *const post, const char *const msg, const int lineno ) { logerrs_file(pre, mid, post, msg, __FILE__, lineno); } static void logerrl( const char *const pre, const size_t mid, const char *const post, const char *const msg, const int lineno ) { logerrl_file(pre, mid, post, msg, __FILE__, lineno); } struct TarEntry { // What size the spec says? unsigned int begin; }; // static int tar_write(FILE *const fd,  int tarball_write_from_directory( const FILE *const fd, const char *const directory_path ) { int ret = 0; struct TarEntry *entry = NULL; (void)directory_path; (void)fd; if (!(entry = malloc(sizeof(struct TarEntry)))) { logerrl("malloc(", sizeof(struct TarEntry), ")", strerror(errno), __LINE__); ret = -1; goto cleanup; } if (false) { logerrs("", "", "", "", 0); logerr("", "", 0); } cleanup: free(entry); return ret; } #ifdef TEST void unit_tests_tar(void) {} #endif