#!/usr/bin/perl -w
#grep for filenames in a tar file
#see /usr/include/tar.h for the layout

if ($ARGV[0] eq "-v") { 
	$doit = 0; 
	shift(@ARGV); 
} else { 
	$doit = 1;
} 	

$expr = $ARGV[0] || do { print "usage: $0 regexp\n"; exit 1; } ; 

$zero = "\0" x 512; 
$toskip = 0;
$output = $doit; 

for (;;)  {
$n = sysread(STDIN, $buf, 512); 
if ($n == 0) {
	print "early eof\n"; 
	last;
}
if ($toskip > 0) { 
	if ($output) { 
		syswrite(STDOUT,$buf,512); 
	} 
	$toskip--;
	next;
}
#$magic = substr($buf,257,5); 
#if ($magic ne "ustar" ) { 
#	print "magic test failed ($magic)\n" ;
#	exit(1); 
#} 
$name = substr($buf,0,100); 
$name =~ s/\0.*//; 
if (length($name) == 0 && $buf eq $zero) { 
	if (++$zerocnt == 2) { 
		last;
	} else { 
		next;
	}
} else {
	$zerocnt = 0;
} 
$prefix = substr($buf,345,155); 
$prefix =~ s/\0.*//; 
$prefix .= "/" if $prefix;
$size = oct(substr($buf, 124, 12));
$toskip = int ( ($size + 511)/512); 

if ($prefix . $name =~  /$expr/) { 
	$output = $doit; 
} else {
	$output = !$doit; 
} 

if ($output) { 
	syswrite(STDOUT, $buf, 512); 
} 


} 



