| #include <stdio.h> // for FILE |
| #include <unistd.h> // 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); |