diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-06-29 18:21:58 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-07-08 19:17:35 +0200 |
commit | e6a19ba1a05f77f051187a6b1a828ee6d39ce052 (patch) | |
tree | c8a1566b10883edbe4a8bc9a724461f4003aaa10 /include/tar.h | |
parent | 359d71e90050a8b83f7bc7d2ecd4ff29c477cc22 (diff) |
Cleanup: split libtar header, move to sub directory
Some of the on-disk format internals are moved to a separate header
and some of the stuff from internal.h is moved to that format header.
C++ guards are added in addtion.
Everything PAX related is moved to pax_header.c, some internal
functions are marked as static.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'include/tar.h')
-rw-r--r-- | include/tar.h | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/include/tar.h b/include/tar.h deleted file mode 100644 index dadc16e..0000000 --- a/include/tar.h +++ /dev/null @@ -1,153 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar.h - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#ifndef TAR_H -#define TAR_H - -#include "config.h" -#include "compat.h" -#include "io/istream.h" -#include "io/ostream.h" - -#include <stdbool.h> -#include <stdint.h> -#include <stdio.h> - -typedef struct sparse_map_t { - struct sparse_map_t *next; - sqfs_u64 offset; - sqfs_u64 count; -} sparse_map_t; - -typedef struct { - char name[100]; - char mode[8]; - char uid[8]; - char gid[8]; - char size[12]; - char mtime[12]; - char chksum[8]; - char typeflag; - char linkname[100]; - char magic[6]; - char version[2]; - char uname[32]; - char gname[32]; - char devmajor[8]; - char devminor[8]; - union { - struct { - char prefix[155]; - char padding[12]; - } posix; - - struct { - char atime[12]; - char ctime[12]; - char offset[12]; - char deprecated[4]; - char unused; - struct { - char offset[12]; - char numbytes[12]; - } sparse[4]; - char isextended; - char realsize[12]; - char padding[17]; - } gnu; - } tail; -} tar_header_t; - -typedef struct { - struct { - char offset[12]; - char numbytes[12]; - } sparse[21]; - char isextended; - char padding[7]; -} gnu_sparse_t; - -typedef struct tar_xattr_t { - struct tar_xattr_t *next; - char *key; - sqfs_u8 *value; - size_t value_len; - char data[]; -} tar_xattr_t; - -typedef struct { - char *name; - char *link_target; - sparse_map_t *sparse; - sqfs_u64 actual_size; - sqfs_u64 record_size; - bool unknown_record; - bool is_hard_link; - tar_xattr_t *xattr; - - sqfs_u16 mode; - sqfs_u64 uid; - sqfs_u64 gid; - sqfs_u64 devno; - sqfs_s64 mtime; -} tar_header_decoded_t; - -#define TAR_TYPE_FILE '0' -#define TAR_TYPE_LINK '1' -#define TAR_TYPE_SLINK '2' -#define TAR_TYPE_CHARDEV '3' -#define TAR_TYPE_BLOCKDEV '4' -#define TAR_TYPE_DIR '5' -#define TAR_TYPE_FIFO '6' - -#define TAR_TYPE_GNU_SLINK 'K' -#define TAR_TYPE_GNU_PATH 'L' -#define TAR_TYPE_GNU_SPARSE 'S' - -#define TAR_TYPE_PAX 'x' -#define TAR_TYPE_PAX_GLOBAL 'g' - -#define TAR_MAGIC "ustar" -#define TAR_VERSION "00" - -#define TAR_MAGIC_OLD "ustar " -#define TAR_VERSION_OLD " " - -#define TAR_RECORD_SIZE (512) - -/* - Returns < 0 on failure, > 0 if cannot encode, 0 on success. - Prints error/warning messages to stderr. - - The counter is an incremental record counter used if additional - headers need to be generated. -*/ -int write_tar_header(ostream_t *fp, const struct stat *sb, const char *name, - const char *slink_target, const tar_xattr_t *xattr, - unsigned int counter); - -int write_hard_link(ostream_t *fp, const struct stat *sb, const char *name, - const char *target, unsigned int counter); - -/* calcuate and skip the zero padding */ -int skip_padding(istream_t *fp, sqfs_u64 size); - -/* round up to block size and skip the entire entry */ -int skip_entry(istream_t *fp, sqfs_u64 size); - -int read_header(istream_t *fp, tar_header_decoded_t *out); - -void free_xattr_list(tar_xattr_t *list); - -void clear_header(tar_header_decoded_t *hdr); - -/* - Write zero bytes to an output file to padd it to the tar record size. - Returns 0 on success. On failure, prints error message to stderr. -*/ -int padd_file(ostream_t *fp, sqfs_u64 size); - -#endif /* TAR_H */ |