From: Riku Voipio Date: Thu, 19 Oct 2017 10:30:49 +0000 (+0300) Subject: Deb.pm: support control.tar.xz X-Git-Tag: submit/devel/20190730.074441~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9f0147d8c97e4113e9a8edcb0721c87261212c18;p=tools%2Fbuild.git Deb.pm: support control.tar.xz Add support for uncompressing and hdrmd5 for XZ compressed control.tar - default on dpkg >= 1.19. Fixes issue #395 Change-Id: I2f18307182591b3965c6c6e70f355ab617dc1533 --- diff --git a/Build/Deb.pm b/Build/Deb.pm index 5713de8..904fca5 100644 --- a/Build/Deb.pm +++ b/Build/Deb.pm @@ -256,9 +256,14 @@ sub debq { $data = substr($data, 8 + 60 + $len); if (substr($data, 0, 16) ne 'control.tar.gz ' && substr($data, 0, 16) ne 'control.tar.gz/ ') { - warn("$fn: control.tar.gz is not second ar entry\n"); - close DEBF unless ref $fn; - return (); + if (substr($data, 0, 16) eq 'control.tar.xz ' || + substr($data, 0, 16) eq 'control.tar.xz/ ') { + $decompressor = "unxz"; + } else { + warn("$fn: control.tar is not second ar entry\n"); + close DEBF unless ref $fn; + return (); + } } $len = substr($data, 48, 10); if (length($data) < 60+$len) { @@ -278,7 +283,7 @@ sub debq { $data = uncompress($data, $decompressor); } if (!$data) { - warn("$fn: corrupt control.tar.gz file\n"); + warn("$fn: corrupt control.tar file\n"); return (); } my $control; @@ -288,7 +293,7 @@ sub debq { my $len = oct('00'.substr($data, 124,12)); my $blen = ($len + 1023) & ~511; if (length($data) < $blen) { - warn("$fn: corrupt control.tar.gz file\n"); + warn("$fn: corrupt control.tar file\n"); return (); } if ($n eq './control' || $n eq "control") { @@ -390,8 +395,11 @@ sub queryhdrmd5 { } $data = substr($data, 8 + 60 + $len); if (substr($data, 0, 16) ne 'control.tar.gz ' && - substr($data, 0, 16) ne 'control.tar.gz/ ') { - warn("$bin: control.tar.gz is not second ar entry\n"); + substr($data, 0, 16) ne 'control.tar.gz/ ' && + substr($data, 0, 16) ne 'control.tar.xz ' && + substr($data, 0, 16) ne 'control.tar.xz/ ') + { + warn("$bin: control.tar is not second ar entry\n"); close F; return undef; }