diff options
Diffstat (limited to 'scripts/remove-boot-splash')
-rw-r--r-- | scripts/remove-boot-splash | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/scripts/remove-boot-splash b/scripts/remove-boot-splash new file mode 100644 index 0000000..e63c3b5 --- /dev/null +++ b/scripts/remove-boot-splash @@ -0,0 +1,34 @@ +#!/usr/bin/perl + +@ARGV == 1 or die "usage: remove-splash <initrd>\n"; + +my $magic = 'BOOTSPL3'; +my $buffer_size = 15; + +my ($initrd) = @ARGV; +open(my $F, "+< $initrd") or die "can't open $initrd: $!\n"; + +while (1) { + my $got = read($F, my $buffer, $buffer_size); + $got > length($magic) or last; + + my $index = index($buffer, $magic); + if ($index >= 0) { + my $offset = $index + tell($F) - $got; + + seek($F, $offset + 12, 0) && read($F, my $tmp, 4) or last; + my $splash_size = unpack("V", $tmp) + 38; + + my $initrd_size = seek($F, 0, 2) && tell($F); + + if ($offset + $splash_size == $initrd_size) { + truncate($F, $offset); + exit 0; + } else { + warn "bootsplash found at offset $offset, but it is not at the end ($offset + $splash_size != $initrd_size)\n"; + } + } + seek($F, -length($magic), 1); # handle the case BOOTSPL3 when overlaps between buffers +} + +warn "bootsplash not found in $initrd\n"; |