aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/remove-boot-splash
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/remove-boot-splash')
-rw-r--r--scripts/remove-boot-splash34
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";