xref: /aosp_15_r20/external/erofs-utils/include/erofs/tar.h (revision 33b1fccf6a0fada2c2875d400ed01119b7676ee5)
1*33b1fccfSAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0+ OR Apache-2.0 */
2*33b1fccfSAndroid Build Coastguard Worker #ifndef __EROFS_TAR_H
3*33b1fccfSAndroid Build Coastguard Worker #define __EROFS_TAR_H
4*33b1fccfSAndroid Build Coastguard Worker 
5*33b1fccfSAndroid Build Coastguard Worker #ifdef __cplusplus
6*33b1fccfSAndroid Build Coastguard Worker extern "C"
7*33b1fccfSAndroid Build Coastguard Worker {
8*33b1fccfSAndroid Build Coastguard Worker #endif
9*33b1fccfSAndroid Build Coastguard Worker 
10*33b1fccfSAndroid Build Coastguard Worker #if defined(HAVE_ZLIB)
11*33b1fccfSAndroid Build Coastguard Worker #include <zlib.h>
12*33b1fccfSAndroid Build Coastguard Worker #endif
13*33b1fccfSAndroid Build Coastguard Worker #include <sys/stat.h>
14*33b1fccfSAndroid Build Coastguard Worker 
15*33b1fccfSAndroid Build Coastguard Worker #include "internal.h"
16*33b1fccfSAndroid Build Coastguard Worker 
17*33b1fccfSAndroid Build Coastguard Worker struct erofs_pax_header {
18*33b1fccfSAndroid Build Coastguard Worker 	struct stat st;
19*33b1fccfSAndroid Build Coastguard Worker 	struct list_head xattrs;
20*33b1fccfSAndroid Build Coastguard Worker 	bool use_mtime;
21*33b1fccfSAndroid Build Coastguard Worker 	bool use_size;
22*33b1fccfSAndroid Build Coastguard Worker 	bool use_uid;
23*33b1fccfSAndroid Build Coastguard Worker 	bool use_gid;
24*33b1fccfSAndroid Build Coastguard Worker 	char *path, *link;
25*33b1fccfSAndroid Build Coastguard Worker };
26*33b1fccfSAndroid Build Coastguard Worker 
27*33b1fccfSAndroid Build Coastguard Worker #define EROFS_IOS_DECODER_NONE		0
28*33b1fccfSAndroid Build Coastguard Worker #define EROFS_IOS_DECODER_GZIP		1
29*33b1fccfSAndroid Build Coastguard Worker #define EROFS_IOS_DECODER_LIBLZMA	2
30*33b1fccfSAndroid Build Coastguard Worker 
31*33b1fccfSAndroid Build Coastguard Worker #ifdef HAVE_LIBLZMA
32*33b1fccfSAndroid Build Coastguard Worker #include <lzma.h>
33*33b1fccfSAndroid Build Coastguard Worker struct erofs_iostream_liblzma {
34*33b1fccfSAndroid Build Coastguard Worker 	u8 inbuf[32768];
35*33b1fccfSAndroid Build Coastguard Worker 	lzma_stream strm;
36*33b1fccfSAndroid Build Coastguard Worker 	int fd;
37*33b1fccfSAndroid Build Coastguard Worker };
38*33b1fccfSAndroid Build Coastguard Worker #endif
39*33b1fccfSAndroid Build Coastguard Worker 
40*33b1fccfSAndroid Build Coastguard Worker struct erofs_iostream {
41*33b1fccfSAndroid Build Coastguard Worker 	union {
42*33b1fccfSAndroid Build Coastguard Worker 		struct erofs_vfile vf;
43*33b1fccfSAndroid Build Coastguard Worker 		void *handler;
44*33b1fccfSAndroid Build Coastguard Worker #ifdef HAVE_LIBLZMA
45*33b1fccfSAndroid Build Coastguard Worker 		struct erofs_iostream_liblzma *lzma;
46*33b1fccfSAndroid Build Coastguard Worker #endif
47*33b1fccfSAndroid Build Coastguard Worker 	};
48*33b1fccfSAndroid Build Coastguard Worker 	u64 sz;
49*33b1fccfSAndroid Build Coastguard Worker 	char *buffer;
50*33b1fccfSAndroid Build Coastguard Worker 	unsigned int head, tail, bufsize;
51*33b1fccfSAndroid Build Coastguard Worker 	int decoder, dumpfd;
52*33b1fccfSAndroid Build Coastguard Worker 	bool feof;
53*33b1fccfSAndroid Build Coastguard Worker };
54*33b1fccfSAndroid Build Coastguard Worker 
55*33b1fccfSAndroid Build Coastguard Worker struct erofs_tarfile {
56*33b1fccfSAndroid Build Coastguard Worker 	struct erofs_pax_header global;
57*33b1fccfSAndroid Build Coastguard Worker 	struct erofs_iostream ios;
58*33b1fccfSAndroid Build Coastguard Worker 	char *mapfile, *dumpfile;
59*33b1fccfSAndroid Build Coastguard Worker 
60*33b1fccfSAndroid Build Coastguard Worker 	u32 dev;
61*33b1fccfSAndroid Build Coastguard Worker 	int fd;
62*33b1fccfSAndroid Build Coastguard Worker 	u64 offset;
63*33b1fccfSAndroid Build Coastguard Worker 	bool index_mode, headeronly_mode, rvsp_mode, aufs;
64*33b1fccfSAndroid Build Coastguard Worker 	bool ddtaridx_mode;
65*33b1fccfSAndroid Build Coastguard Worker };
66*33b1fccfSAndroid Build Coastguard Worker 
67*33b1fccfSAndroid Build Coastguard Worker void erofs_iostream_close(struct erofs_iostream *ios);
68*33b1fccfSAndroid Build Coastguard Worker int erofs_iostream_open(struct erofs_iostream *ios, int fd, int decoder);
69*33b1fccfSAndroid Build Coastguard Worker int tarerofs_parse_tar(struct erofs_inode *root, struct erofs_tarfile *tar);
70*33b1fccfSAndroid Build Coastguard Worker 
71*33b1fccfSAndroid Build Coastguard Worker #ifdef __cplusplus
72*33b1fccfSAndroid Build Coastguard Worker }
73*33b1fccfSAndroid Build Coastguard Worker #endif
74*33b1fccfSAndroid Build Coastguard Worker 
75*33b1fccfSAndroid Build Coastguard Worker #endif
76