Preserve and allow editing of module lines
authorJamie Cameron <jcameron@webmin.com>
Sat, 9 Feb 2008 23:31:23 +0000 (23:31 +0000)
committerJamie Cameron <jcameron@webmin.com>
Sat, 9 Feb 2008 23:31:23 +0000 (23:31 +0000)
grub/CHANGELOG
grub/edit_title.cgi
grub/grub-lib.pl
grub/lang/en
grub/save_title.cgi

index 002c4f1..967da3b 100644 (file)
@@ -1,2 +1,4 @@
 ---- Changes since 1.390 ----
 Converted all code to use the new Webmin user interface library.
+---- Changes since 1.400 ----
+Multiple module lines in menu.lst are now preserved and editable. This prevents breakage sometimes seen on kernels using Xen.
index 613e2ca..39ff5f0 100755 (executable)
@@ -69,8 +69,12 @@ push(@opts, [ 2, $text{'title_kernel'},
              &ui_table_row($text{'title_args'},
                &ui_textbox("args", $args, 50)).
              &ui_table_row($text{'title_initrd'},
-               &ui_opt_textbox("initrd", $title->{'initrd'}, 50,
+               &ui_opt_textbox("initrd", $title->{'initrd'}, 40,
                                $text{'global_none'})).
+             &ui_table_row($text{'title_modules'},
+               &ui_textarea("module",
+                       join("\n", split(/\0/, $title->{'module'})), 3, 50,
+                       "off")).
              &ui_table_end() ]);
 
 # Chain loader
@@ -83,7 +87,7 @@ push(@opts, [ 1, $text{'title_chain'},
                           defined($title->{'makeactive'})) ]);
 
 # None (menu entry only)
-push(@opts, [ 0, $text{'title_none'} ]);
+push(@opts, [ 0, $text{'title_none1'}, $text{'title_none2'} ]);
 
 print &ui_table_row($text{'title_boot'},
        &ui_radio_table("boot_mode", $boot, \@opts), 3);
index 6bb779c..797b2a2 100644 (file)
@@ -25,7 +25,13 @@ while(<CONF>) {
        if (/^\s*(\S+)\s*=\s*(.*)/ || /^\s*(\S+)\s*(.*)/) {
                if ($title && $1 ne 'title') {
                        # directive in an existing section
-                       $title->{$1} = $2;
+                       if (defined($title->{$1})) {
+                               # Multiple values!
+                               $title->{$1} .= "\0".$2;
+                               }
+                       else {
+                               $title->{$1} = $2;
+                               }
                        $title->{'eline'} = $lnum;
                        }
                else {
@@ -65,7 +71,9 @@ if (defined($_[2])) {
                                push(@lines, $k);
                                }
                        else {
-                               push(@lines, $k." ".$_[2]->{$k});
+                               foreach my $v (split(/\0/, $_[2]->{$k})) {
+                                       push(@lines, $k." ".$v);
+                                       }
                                }
                        }
                }
index 16424a0..544d073 100644 (file)
@@ -22,11 +22,13 @@ title_kernel=Kernel
 title_kfile=Path to kernel
 title_args=Kernel options
 title_initrd=Initial ramdisk file
+title_modules=Extra modules
 title_chain=Other OS
 title_chain_def=From first sector of partition
 title_chain_file=From chainloader file
 title_makeactive=Make root partition active?
-title_none=None (non-booting menu entry)
+title_none1=None
+title_none2=(non-booting menu entry)
 title_err=Failed to save boot option
 title_etitle=Missing option title
 title_eroot=Missing root partition
index c1ab982..0906fc5 100755 (executable)
@@ -43,10 +43,12 @@ else {
        delete($title->{'kernel'});
        delete($title->{'chainloader'});
        delete($title->{'initrd'});
+       delete($title->{'module'});
        if ($in{'boot_mode'} == 2) {
                $title->{'kernel'} = $in{'kernel'};
                $title->{'kernel'} .= " $in{'args'}" if ($in{'args'});
                $title->{'initrd'} = $in{'initrd'} if (!$in{'initrd_def'});
+               $title->{'module'} = join("\0", split(/\r?\n/, $in{'module'}));
                }
        elsif ($in{'boot_mode'} == 1) {
                $title->{'chainloader'} = $in{'chain_def'} ? '+1'