https://bitbucket.org/hudson/magic-lantern
Raw File
Tip revision: 5e164a63a53ac66522e2ca02d01678b0d67d07bd authored by Trammell Hudson on 24 March 2011, 13:29:27 UTC
Allow enable-liveview to be toggled on and off
Tip revision: 5e164a6
patch-bin
#!/usr/bin/perl
# Apply a patch to a binary image.
use warnings;
use strict;
use File::Slurp;

my $fail = 0;
my $pass = 0;
my $file = shift;

my $image = read_file( $file, {binmode => ':raw'} )
	or die "$0: Unable to read $file: $!\n";


while(<>)
{
	s/[\r\n]//g;

	next if /^Comparing files/;

	my ($offset,$from,$to) = m/
		^
		([0-9A-Fa-f]+):
		\s+
		([0-9A-Fa-f]+)
		\s+
		([0-9A-Fa-f]+)
	$/x or warn "Unable to parse: '$_'\n" and next;

	$offset = hex $offset;
	$from = chr( hex $from );
	$to = chr( hex $to );

	if( substr( $image, $offset, 1) eq $from )
	{
		substr( $image, $offset, 1 ) = $to;
		$pass++;
		next;
	}

	printf STDERR "%08x: %02x != %02x!\n",
		$offset,
		ord( $from ),
		ord( substr( $image, $offset, 1 ) ),
		;

	$fail++;
}

die "$0: $fail errors reported\n" if $fail;

warn "$0: $file: patched $pass bytes\n";
write_file( $file, $image );
__END__
back to top