Home | History | Annotate | Line # | Download | only in ms
cmp.pl revision 1.1.1.1
      1 #!/usr/local/bin/perl
      2 
      3 ($#ARGV == 1) || die "usage: cmp.pl <file1> <file2>\n";
      4 
      5 open(IN0,"<$ARGV[0]") || die "unable to open $ARGV[0]\n";
      6 open(IN1,"<$ARGV[1]") || die "unable to open $ARGV[1]\n";
      7 binmode IN0;
      8 binmode IN1;
      9 
     10 $tot=0;
     11 $ret=1;
     12 for (;;)
     13 	{
     14 	$n1=sysread(IN0,$b1,4096);
     15 	$n2=sysread(IN1,$b2,4096);
     16 
     17 	last if ($n1 != $n2);
     18 	last if ($b1 ne $b2);
     19 	last if ($n1 < 0);
     20 	if ($n1 == 0)
     21 		{
     22 		$ret=0;
     23 		last;
     24 		}
     25 	$tot+=$n1;
     26 	}
     27 
     28 close(IN0);
     29 close(IN1);
     30 if ($ret)
     31 	{
     32 	printf STDERR "$ARGV[0] and $ARGV[1] are different\n";
     33 	@a1=unpack("C*",$b1);
     34 	@a2=unpack("C*",$b2);
     35 	for ($i=0; $i<=$#a1; $i++)
     36 		{
     37 		if ($a1[$i] ne $a2[$i])
     38 			{
     39 			printf "%02X %02X <<\n",$a1[$i],$a2[$i];
     40 			last;
     41 			}
     42 		}
     43 	$nm=$tot+$n1;
     44 	$tot+=$i+1;
     45 	printf STDERR "diff at char $tot of $nm\n";
     46 	}
     47 exit($ret);
     48