#ifndef CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY
const llist_t *control_tar_llist = NULL;
#endif
-#ifndef CONFIG_AR
- char magic[7];
-#endif
-
- /* a .deb file is an ar archive that contain three files,
- * data.tar.gz, control.tar.gz and debian
- */
/* Setup the tar archive handle */
tar_archive = init_handle();
mkdir(argv[optind], 0777);
chdir(argv[optind]);
-#ifdef CONFIG_AR
unpack_ar_archive(ar_archive);
-#else
- xread_all(ar_archive->src_fd, magic, 7);
- if (strncmp(magic, "!<arch>", 7) != 0) {
- error_msg_and_die("Invalid ar magic");
- }
- ar_archive->offset += 7;
-
- while (get_header_ar(ar_archive) == EXIT_SUCCESS);
-#endif
/* Cleanup */
close (ar_archive->src_fd);
#ifdef CONFIG_FEATURE_DEB_TAR_BZ2
if (strcmp(name_ptr, ".bz2") == 0) {
archive_handle->sub_archive->read = read_bz2;
-// BZ2_bzReadOpen(archive_handle->sub_archive->src_fd, NULL, 0);
BZ2_bzReadOpen(archive_handle->src_fd, NULL, 0);
archive_handle->action_data_subarchive = get_header_tar;
return(EXIT_SUCCESS);
{
BZ2_bzReadOpen(archive_handle->src_fd, NULL, 0);
+ archive_handle->read = read_bz2;
+ archive_handle->seek = seek_by_char;
+
archive_handle->offset = 0;
while (get_header_tar(archive_handle) == EXIT_SUCCESS);
int fd_pipe[2];
int pid;
unsigned char magic[2];
-
+
/* Cant lseek over pipe's */
+ archive_handle->read = read;
archive_handle->seek = seek_by_char;
archive_xread_all(archive_handle, &magic, 2);
#endif
#ifdef CONFIG_FEATURE_TAR_BZIP2
case 'j':
- tar_handle->read = read_bz2;
+ get_header_ptr = get_header_tar_bz2;
break;
#endif
default:
tar_handle->src_fd = fileno(stdin);
tar_handle->seek = seek_by_char;
} else {
- tar_handle->seek = seek_by_jump;
tar_handle->src_fd = xopen(tar_filename, O_RDONLY);
}
-#ifdef CONFIG_FEATURE_TAR_GZIP
- if (get_header_ptr == get_header_tar_gz) {
- get_header_tar_gz(tar_handle);
- } else
-#endif /* CONFIG_FEATURE_TAR_GZIP */
-#ifdef CONFIG_FEATURE_TAR_BZIP2
- if (tar_handle->read == read_bz2) {
- get_header_tar_bz2(tar_handle);
- } else
-#endif /* CONFIG_FEATURE_TAR_BZIP2 */
-
- while (get_header_tar(tar_handle) == EXIT_SUCCESS);
+ while (get_header_ptr(tar_handle) == EXIT_SUCCESS);
/* Ckeck that every file that should have been extracted was */
while (tar_handle->accept) {