]> git.proxmox.com Git - pmg-api.git/blobdiff - src/PMG/Unpack.pm
unpack: adapt to new libarchive methods
[pmg-api.git] / src / PMG / Unpack.pm
index a4ec20ed9948e8cd930beecba0beef76307fa746..d4fe4547ba9341a23a6841f9e24b756ed65605df 100755 (executable)
@@ -102,7 +102,7 @@ sub helper_pipe_open {
 
     $inputfilename = '/dev/null' if !$inputfilename;
 
-    # same algorythm as used inside SA
+    # same algorithm as used inside SA
 
     my $fd = fileno (STDIN);
     close STDIN;
@@ -259,10 +259,11 @@ sub new {
     $self->{debug} = $param{debug} || 0;
 
     $self->{mime} = {};
+    $self->{filenames} = {};
 
-    $self->{ufid} = 0; # counter to creat unique file names
-    $self->{udid} = 0; # counter to creat unique dir names
-    $self->{ulid} = 0; # counter to creat unique link names
+    $self->{ufid} = 0; # counter to create unique file names
+    $self->{udid} = 0; # counter to create unique dir names
+    $self->{ulid} = 0; # counter to create unique link names
 
     $self->{todo} = [];
 
@@ -462,7 +463,7 @@ sub check_comp_ratio {
 
     my $ratio = $usize/$compsize;
 
-    die "compresion ratio too large (> $self->{maxratio})"
+    die "compression ratio too large (> $self->{maxratio})"
        if $ratio > $self->{maxratio};
 }
 
@@ -471,7 +472,7 @@ sub check_quota {
 
     my $sizediff = $csize ? $size - $csize : $size;
 
-    die "compresion ratio too large (> $self->{maxratio})"
+    die "compression ratio too large (> $self->{maxratio})"
        if $self->{maxratio} && (($self->{size} + $sizediff) > $self->{ratioquota});
 
     die "archive too large (> $self->{quota})"
@@ -494,7 +495,10 @@ sub check_quota {
 sub add_glob_mime_type {
     my ($self, $filename) = @_;
 
-    if (my $ct = xdg_mime_get_mime_type_from_file_name (basename ($filename))) {
+    my $basename = basename($filename);
+    $self->{filenames}->{$basename} = 1;
+
+    if (my $ct = xdg_mime_get_mime_type_from_file_name($basename)) {
        $self->{mime}->{$ct} = 1 if $ct ne 'application/octet-stream';
     }
 }
@@ -677,7 +681,7 @@ sub unpack_tar {
     die "unable to create LibArchive object" if !$a;
 
     LibArchive::archive_read_support_format_all ($a);
-    LibArchive::archive_read_support_compression_all ($a);
+    LibArchive::archive_read_support_filter_all ($a);
 
     eval {
        run_with_timeout ($timeout, sub {
@@ -781,7 +785,7 @@ sub unpack_tar {
     my $err = $@;
 
     LibArchive::archive_read_close($a);
-    LibArchive::archive_read_finish($a);
+    LibArchive::archive_read_free($a);
 
     die $err if $err;
 
@@ -1055,7 +1059,7 @@ sub is_archive {
 # content types (detected by magic numbers and file extension)
 # Extracted files are stored inside 'tempdir'.
 #
-# returns: true if file is archive, undef otherwhise
+# returns: true if file is archive, undef otherwise
 
 sub unpack_archive {
     my ($self, $filename, $ct) = @_;