diff options
-rw-r--r-- | archivers/rpm2cpio/Makefile | 1 | ||||
-rw-r--r-- | archivers/rpm2cpio/distinfo | 1 | ||||
-rw-r--r-- | archivers/rpm2cpio/files/rpm2cpio | 106 |
3 files changed, 107 insertions, 1 deletions
diff --git a/archivers/rpm2cpio/Makefile b/archivers/rpm2cpio/Makefile index b66cb88b1d40..05dba1e701aa 100644 --- a/archivers/rpm2cpio/Makefile +++ b/archivers/rpm2cpio/Makefile @@ -7,6 +7,7 @@ PORTNAME= rpm2cpio PORTVERSION= 1.2 +PORTREVISION= 1 CATEGORIES= archivers MASTER_SITES= # none DISTFILES= # none diff --git a/archivers/rpm2cpio/distinfo b/archivers/rpm2cpio/distinfo deleted file mode 100644 index 9c8795b94893..000000000000 --- a/archivers/rpm2cpio/distinfo +++ /dev/null @@ -1 +0,0 @@ -MD5 (rpm2cpio) = eb97001af3b1854e4592fc2576f942f1 diff --git a/archivers/rpm2cpio/files/rpm2cpio b/archivers/rpm2cpio/files/rpm2cpio new file mode 100644 index 000000000000..11adc24502ec --- /dev/null +++ b/archivers/rpm2cpio/files/rpm2cpio @@ -0,0 +1,106 @@ +#!/usr/bin/perl + +# Copyright (C) 1997,1998,1999, Roger Espel Llima +# Copyright (C) 2000, Sergey Babkin +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and any associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# SOFTWARE'S COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE + +# (whew, that's done!) + +# why does the world need another rpm2cpio? because the existing one +# won't build unless you have half a ton of things that aren't really +# required for it, since it uses the same library used to extract RPM's. +# in particular, it won't build on the HPsUX box i'm on. + + +# add a path if desired +$gzip = "gzip"; + +sub printhelp { + print "rpm2cpio, perl version by orabidoo <odar\@pobox.com>\n"; + print "use: rpm2cpio [file.rpm]\n"; + print "dumps the contents to stdout as a GNU cpio archive\n"; + exit 0; +} + +if ($#ARGV == -1) { + printhelp if -t STDIN; + $f = "STDIN"; +} elsif ($#ARGV == 0) { + open(F, "< $ARGV[0]") or die "Can't read file $ARGV[0]\n"; + $f = 'F'; +} else { + printhelp; +} + +printhelp if -t STDOUT; + +# gobble the file up +undef $/; +$|=1; +#$rpm = <$f>; +#close ($f); + +read $f, $rpm, 96 ; + +($magic, $major, $minor) = unpack("NCC", $rpm); + +die "Not an RPM\n" if $magic != 0xedabeedb; +die "Not a version 3 RPM\n" if $major != 3; + +$filter=""; + +read $f, $rpm, 16 or die "No header\n" ; +while(1) { + ($magic, $crap, $sections, $bytes) = unpack("N4", $rpm); + $smagic = unpack("n", $rpm); + $format="unknown"; + if ($smagic eq 0x1f8b) { + $filter="gzip -cd"; + last; + } + if (substr($rpm, 0, 3) eq "BZh") { + $filter="bzip2 -cd"; + last; + } + #printf(STDERR "0x%x 0x%x 0x%x 0x%x\n", $magic, $sections, $bytes, $smagic); + die "Error: header not recognized\n" if $magic != 0x8eade801; + seek $f, 16*$sections+$bytes, 1 or die "FIle is too small\n"; # skip the headers + do { + read $f, $rpm, 1 or die "No header\n" ; + $c = unpack("C", $rpm); + } while($c==0); + read $f, $rpm, 15, 1 or die "No header\n" ; +} + +#read $f, $rpm, 20 or die "No gzip header\n"; # the gzip header +#$smagic = unpack("n", $rpm); +#printf(STDERR "0x%x\n", $smagic); +die "Error: bogus RPM\n" if $filter eq ""; + +open(ZCAT, "| $filter") || die "can't pipe to $filter\n"; +#print STDERR "CPIO archive found!\n"; + +while($rpm ne '') { + print ZCAT $rpm; + read $f, $rpm, 10240 ; # read in blocks +} + +close ZCAT; + |