# The following is Public Domain / Creative Commons CC0 from
# http://billauer.co.il/blog/2011/05/perl-crc32-crc-xs-module/
sub mycrc32 {
my ($input, $init_value, $polynomial) = @_;
$init_value =
0 unless (defined $init_value);
$polynomial =
0 xedb88320 unless (defined $polynomial);
my @lookup_table;
for (my $i=
0 ; $i<
256 ; $i++) {
my $x = $i;
for (my $j=
0 ; $j<
8 ; $j++) {
if ($x &
1 ) {
$x = ($x >>
1 ) ^ $polynomial;
}
else {
$x = $x >>
1 ;
}
}
push @lookup_table, $x;
}
my $crc = $init_value ^
0 xffffffff;
foreach my $x (unpack (
'C*' , $input)) {
$crc = (($crc >>
8 ) &
0 xffffff) ^ $lookup_table[ ($crc ^ $x) &
0 xff ];
}
$crc = $crc ^
0 xffffffff;
return $crc;
}
# Fix the checksum of an InnoDB tablespace page.
# Inputs:
# $page A bytestring with the page data.
# $full_crc32 Checksum type, see get_full_crc32() in innodb-util.pl
# Returns: the modified page as a bytestring.
sub fix_page_crc {
my ($page, $full_crc32)= @_;
my $ps= length($page);
my $polynomial =
0 x82f63b78;
# CRC-32C
if ($full_crc32) {
my $ck = mycrc32(substr($page,
0 , $ps -
4 ),
0 , $polynomial);
substr($page, $ps -
4 ,
4 ) = pack(
"N" , $ck);
}
else {
my $ck= pack(
"N" ,
mycrc32(substr($page,
4 ,
22 ),
0 , $polynomial) ^
mycrc32(substr($page,
38 , $ps -
38 -
8 ),
0 , $polynomial));
substr($page,
0 ,
4 )= $ck;
substr($page, $ps-
8 ,
4 )= $ck;
}
return $page;
}
Messung V0.5 in Prozent C=86 H=15 G=61
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland