#include // for FILE #include // for off_t enum extract_functions_e { extract_verbose_list = 1, extract_list = 2, extract_one_to_buffer = 4, extract_to_stdout = 8, extract_all_to_fs = 16, extract_preserve_date = 32, extract_data_tar_gz = 64, extract_control_tar_gz = 128, extract_unzip_only = 256, extract_unconditional = 512, extract_create_leading_dirs = 1024, extract_quiet = 2048, extract_exclude_list = 4096 }; typedef struct file_headers_s { char *name; char *link_name; off_t size; uid_t uid; gid_t gid; mode_t mode; time_t mtime; dev_t device; int (*extract_func)(FILE *, FILE *); } file_header_t; file_header_t *get_header_ar(FILE *in_file); file_header_t *get_header_cpio(FILE *src_stream); file_header_t *get_header_tar(FILE *tar_stream); file_header_t *get_header_zip(FILE *zip_stream); void seek_sub_file(FILE *src_stream, const int count); extern off_t archive_offset; char *unarchive(FILE *src_stream, FILE *out_stream, file_header_t *(*get_headers)(FILE *), const int extract_function, const char *prefix, char **include_name, char **exclude_name); char *deb_extract(const char *package_filename, FILE *out_stream, const int extract_function, const char *prefix, const char *filename);