sub bootloader () {
my $c = get_cookie('bootloader');
- my $ed = sub {
- my ($file,$script) = @_;
- my $cmd = <<END;
- ed $file <<EOF
-$script
-w
-q
-EOF
-END
- $cmd .= setupboot_bootloader_edited_rune($ho);
- target_cmd_root($ho, $cmd, 200);
+ my $edit = sub {
+ my ($file,$editor) = @_;
+ target_editfile_root($ho,$file,$editor);
+ target_cmd_root($ho, setupboot_bootloader_edited_rune($ho), 200);
};
my $edscript;
if ($ho->{Flags}{'need-uboot-bootscr'}) {
- $ed->('/boot/boot.xen',<<END)
-/^echo Loaded
-i
-echo osstest uboot $c
-.
-END
+ $edit->('/boot/boot.xen', sub {
+ my $done;
+ while (<::EI>) {
+ if (m/^echo Loaded/ && !$done++) {
+ print ::EO "echo osstest uboot $c\n";
+ }
+ print ::EO;
+ }
+ });
} else {
- $ed->('/boot/grub/grub.cfg',<<END); # no support for grub1
-1
-/^ *menuentry *
-s/'\([^']*\)'/'$c \1'
-1
-/^ *submenu *
-s
-END
+ # no support for grub1
+ $edit->('/boot/grub/grub.cfg', sub {
+ my %done;
+ while (<::EI>) {
+ s{^(\s* ( menuentry | submenu ) \s+
+ (['"]) )( [^'"]+ \3) }{
+ $done{$2}++ ? $& : "$1$c $4"
+ }xe;
+ print ::EO;
+ }
+ });
}
}