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