3 # Save a boot menu option
5 require './grub-lib.pl';
7 &lock_file($config{'menu_file'});
8 $conf = &get_menu_config();
10 $old = $title = $conf->[$in{'idx'}];
12 &error_setup($text{'title_err'});
15 # Just delete the title
16 &save_directive($conf, $title, undef);
20 $in{'title'} =~ /\S/ || &error($text{'title_etitle'});
21 $in{'root_mode'} != 1 || $in{'other'} =~ /^\S+$/ ||
22 &error($text{'title_eroot'});
23 $in{'boot_mode'} != 2 || $in{'kernel'} =~ /\S/ ||
24 &error($text{'title_ekernel'});
25 $in{'boot_mode'} != 1 || $in{'chain_def'} || $in{'chain'} =~ /\S/ ||
26 &error($text{'title_echain'});
27 $in{'initrd_def'} || $in{'initrd'} =~ /\S/ ||
28 &error($text{'title_einitrd'});
30 # store inputs in title structure
31 $title->{'name'} = 'title';
32 $title->{'value'} = $in{'title'};
33 local $r = $in{'noverify'} ? "rootnoverify" : "root";
34 delete($title->{'root'});
35 delete($title->{'rootnoverify'});
36 if ($in{'root_mode'} == 1) {
37 $title->{$r} = $in{'other'};
39 elsif ($in{'root_mode'} == 2) {
40 $root = &linux_to_bios($in{'root'});
41 $root || &error(&text('title_edev', $in{'root'}));
44 delete($title->{'kernel'});
45 delete($title->{'chainloader'});
46 delete($title->{'initrd'});
47 delete($title->{'module'});
48 if ($in{'boot_mode'} == 2) {
49 $title->{'kernel'} = $in{'kernel'};
50 $title->{'kernel'} .= " $in{'args'}" if ($in{'args'});
51 $title->{'initrd'} = $in{'initrd'} if (!$in{'initrd_def'});
52 if ($in{'module'} =~ /\S/) {
54 join("\0", split(/\r?\n/, $in{'module'}));
57 elsif ($in{'boot_mode'} == 1) {
58 $title->{'chainloader'} = $in{'chain_def'} ? '+1'
61 if ($in{'makeactive'}) {
62 $title->{'makeactive'} = "";
65 delete($title->{'makeactive'});
68 $title->{'lock'} = "";
71 delete($title->{'lock'});
74 # create or update the title
75 &save_directive($conf, $old, $title);
78 &flush_file_lines($config{'menu_file'});
79 &unlock_file($config{'menu_file'});
80 &webmin_log($in{'new'} ? 'create' : $in{'delete'} ? 'delete' : 'modify',
81 'title', undef, $title);