#!/usr/opkg/bin/perl ## ## rpmoffset -- determine offset of payload in an RPM file ## use IO; my $f = new IO::File "<$ARGV[0]"; $f->read($rpm, 96); ($magic, $major, $minor, $crap) = unpack("NCC C90", $rpm); die "Not an RPM\n" if $magic != 0xedabeedb; die "Not a version 3 or 4 RPM\n" if $major != 3 && $major != 4; while (!$f->eof) { $pos = $f->tell(); $f->read($rpm, 16); $smagic = unpack("n", $rpm); last if $smagic eq 0x1f8b; if ($pos & 0x7) { $pos += 7; $pos &= ~0x7; $f->seek($pos, 0); $f->read($rpm, 16); } ($magic, $crap, $sections, $bytes) = unpack("N4", $rpm); die "Error: header not recognized\n" if $magic != 0x8eade801; $pos += 16; $pos += 16 * $sections; $pos += $bytes; $f->seek($pos, 0); } print STDERR $pos . "\n";