New dpkg-deb function -t, stands for --fsys-tarfile

This commit is contained in:
Glenn L McGrath
2001-04-12 13:49:09 +00:00
parent c9cac5be23
commit 3e2ab88ee2
7 changed files with 41 additions and 24 deletions

View File

@@ -26,6 +26,7 @@
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include "libbb.h"
@@ -42,14 +43,9 @@ extern int deb_extract(const char *package_filename, int function, char *target_
case (extract_control):
ared_file = xstrdup("control.tar.gz");
break;
case (extract_contents):
case (extract_extract):
case (extract_verbose_extract):
case (extract_list):
default:
ared_file = xstrdup("data.tar.gz");
break;
default:
error_msg("Unknown extraction function");
}
/* open the debian package to be worked on */
@@ -71,9 +67,11 @@ extern int deb_extract(const char *package_filename, int function, char *target_
/* open a stream of decompressed data */
uncompressed_file = fdopen(gz_open(deb_file, &gunzip_pid), "r");
/* get a list of all tar headers inside the .gz file */
untar(uncompressed_file, function, target_dir);
if (function & extract_fsys_tarfile) {
copy_file_chunk(uncompressed_file, stdout, -1);
} else {
untar(uncompressed_file, function, target_dir);
}
/* we are deliberately terminating the child so we can safely ignore this */
gz_close(gunzip_pid);

View File

@@ -55,13 +55,26 @@ extern int untar(FILE *src_tar_file, int untar_function, char *base_path)
while (fread((char *) &raw_tar_header, 1, 512, src_tar_file) == 512) {
long sum = 0;
char *dir = NULL;
if (ferror(src_tar_file) || feof(src_tar_file)) {
break;
}
uncompressed_count += 512;
/* Check header has valid magic */
if (strncmp(raw_tar_header.magic, "ustar", 5) != 0) {
/* Put this pack after TODO (check child still alive) is done */
error_msg("Invalid tar magic");
/*
* FIXME, Need HELP with this
*
* This has to fail silently or it incorrectly reports errors when called from
* deb_extract.
* The problem is deb_extract decompresses the .gz file in a child process and
* untar reads from the child proccess. The child process finishes and exits,
* but fread reads 0's from the src_tar_file even though the child
* closed its handle.
*/
// error_msg("Invalid tar magic");
break;
}
@@ -109,7 +122,7 @@ extern int untar(FILE *src_tar_file, int untar_function, char *base_path)
}
*/
if (untar_function & (extract_verbose_extract | extract_contents)) {
if (untar_function & (extract_contents | extract_verbose_extract)) {
printf("%s\n", raw_tar_header.name);
}
@@ -144,7 +157,7 @@ extern int untar(FILE *src_tar_file, int untar_function, char *base_path)
break;
}
case '5':
if (untar_function & (extract_extract | extract_verbose_extract)) {
if (untar_function & extract_extract) {
if (create_path(dir, mode) != TRUE) {
free(dir);
perror_msg("%s: Cannot mkdir", raw_tar_header.name);