mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 17:46:38 -04:00
33 lines
640 B
Perl
33 lines
640 B
Perl
#!/usr/bin/env perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Sys::Mmap;
|
|
|
|
my $fh;
|
|
my $flen;
|
|
my $fdata;
|
|
|
|
sub commit {
|
|
return unless $fh;
|
|
munmap $fdata or die "munmap: $!";
|
|
close $fh or die "close: $!";
|
|
}
|
|
|
|
while (<>) {
|
|
chomp;
|
|
if (/^([0-9A-F]{8}):? ([0-9A-F]{2}) ([0-9A-F]{2})$/i) {
|
|
my ($offset, $old, $new) = map hex, $1, $2, $3;
|
|
next unless $fdata;
|
|
next unless $offset < $flen;
|
|
next if ord substr($fdata, $offset, 1) != $old;
|
|
substr($fdata, $offset, 1) = chr $new;
|
|
} elsif (-e) {
|
|
commit;
|
|
open $fh, '+<', $_ or die "open: $!";
|
|
mmap $fdata, 0, PROT_READ | PROT_WRITE, MAP_SHARED, $fh
|
|
or die "mmap: $!";
|
|
$flen = -s;
|
|
}
|
|
}
|
|
commit;
|