summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/drakfloppy
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/standalone/drakfloppy')
-rwxr-xr-xperl-install/standalone/drakfloppy557
1 files changed, 265 insertions, 292 deletions
diff --git a/perl-install/standalone/drakfloppy b/perl-install/standalone/drakfloppy
index ea90e748b..a864b678a 100755
--- a/perl-install/standalone/drakfloppy
+++ b/perl-install/standalone/drakfloppy
@@ -1,10 +1,10 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
-# Control-center
-# $Id$
+# DrakFloppy
#
-# Copyright (C) 2001-2002 MandrakeSoft
-# Yves Duret <yduret at mandrakesoft.com>
+# Copyright (C) 2001-2008 Mandriva
+# Yves Duret
+# Thierry Vignaud
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -26,207 +26,187 @@ use strict;
use diagnostics;
use lib qw(/usr/lib/libDrakX);
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
+use standalone; #- warning, standalone must be loaded very first, for 'explanations'
use common;
-use my_gtk qw(:helpers);
-use ugtk qw(:helpers);
-
-#- languages that can't be displayed with gtk1, so we unset translations
-#- for them until this tool is ported to gtk2
-if ($ENV{LANGUAGE} =~ /\b(ar|he|hi|ta)/) { $ENV{LANGUAGE} = "C" };
+use mygtk3 qw(gtknew);
+use ugtk3 qw(:create :dialogs :helpers :wrappers);
+use detect_devices;
+$ugtk3::wm_icon = "/usr/share/mcc/themes/default/drakfloppy-mdk.png";
require_root_capability();
-my $expert_mode = 0;
-# we have put here the list in order to do $list->clear() when we have to do
-my $fixed_font = Gtk::Gdk::Font->fontset_load(N("-misc-Fixed-Medium-r-*-*-*-140-*-*-*-*-*-*,*"));
-my $list = new_with_titles Gtk::CList(N("Module name"), N("Size"));
-
-my $window = my_gtk->new('drakfloppy');
+my $window = ugtk3->new(N("Boot Floppy"));
unless ($::isEmbedded) {
- $window->{rwindow}->signal_connect(delete_event => sub { my_gtk->exit(0) });
- $window->{rwindow}->set_title(N("drakfloppy"));
- $window->{rwindow}->set_policy(1, 1, 1);
- $window->{rwindow}->border_width(5);
+ $window->{rwindow}->signal_connect(delete_event => sub { ugtk3->exit(0) });
+ $window->{rwindow}->set_border_width(5);
+
+ ### menus definition
+ # the menus are not shown but they provides shiny shortcut like C-q
+ my $ui = gtknew('UIManager', actions => [
+ # [name, stock_id, value, label, accelerator, tooltip, callback]
+ [ 'FileMenu', undef, N("_File") ],
+ [ 'Quit', undef, N("_Quit"), N("<control>Q"), undef, sub { ugtk3->exit(0) } ],
+ ],
+ string => qq(<ui>
+ <menubar name='MenuBar'>
+ <menu action='FileMenu'>
+ <menuitem action='Quit'/>
+ </menu>
+ </menubar>
+</ui>));
+ $window->{rwindow}->add_accel_group($ui->get_accel_group);
}
-### menus definition
-# the menus are not shown
-# but they provides shiny shortcut like C-q
-my @menu_items = (
- { path => N("/_File"), type => '<Branch>' },
- { path => N("/File/_Quit"), accelerator => N("<control>Q"), callback => sub { my_gtk->exit(0) } },
- );
-ugtk::create_factory_menu($window->{rwindow}, @menu_items) unless $::isEmbedded;
-######### menus end
+my (@modules, @temp_modules, %buttons, %options, $tree_model, $tree, $list_model, $list);
-my $global_vbox = new Gtk::VBox();
+my $conffile = "/etc/sysconfig/drakfloppy";
+
+# we must be robust against config file parsing
+eval { %options = getVarsFromSh($conffile) };
+@modules = split(' ', $options{MODULES});
-$global_vbox->pack_start(new Gtk::Label(N("boot disk creation")), 0, 0, 0) unless $::isEmbedded;
######## up part
-my $up_vbox = new Gtk::VBox(0, 0);
# device part
-my $dev_hbox = new Gtk::HBox(1, 0);
-my $device_combo = new Gtk::Combo();
-my $device_button = new Gtk::Button(N("default"));
-
-$device_combo->set_popdown_strings("/dev/fd0", "/dev/fd1");
-$device_button->signal_connect(clicked => sub { $device_combo->entry->set_text("/dev/fd0") });
-
-$dev_hbox->pack_start(new Gtk::Label(N("device")), 0, 0, 0);
-$dev_hbox->pack_start($device_combo, 0, 0, 0);
-$dev_hbox->pack_start($device_button, 0, 0, 0);
-$up_vbox->pack_start($dev_hbox, 0, 0, 0);
+my $device_combo = gtknew('ComboBox', list => [ map { "/dev/$_" } detect_devices::floppies_dev() ]);
+$device_combo->set_active(0);
# kernel part
-my $ker_hbox = new Gtk::HBox(1, 0);
-my $kernel_combo = new Gtk::Combo();
-my $kernel_button = new Gtk::Button(N("default"));
-$kernel_combo->disable_activate();
-$kernel_combo->set_popdown_strings(do {
- opendir YREP, "/lib/modules" or die N("DrakFloppy Error: %s", $!);
- my @files_modules = grep !/^\.\.?$/, readdir YREP;
- closedir YREP;
- @files_modules;
-});
-#$kernel_combo->entry->set_text(`uname -r`);
-$kernel_combo->entry->signal_connect(changed => sub { change_tree($kernel_combo->entry->get_text()); $list->clear() });
-my $aaaa = `uname -r`;
-chomp($aaaa);
-$kernel_button->signal_connect(clicked => sub { $kernel_combo->entry->set_text($aaaa); $list->clear() });
-
-$ker_hbox->pack_start(new Gtk::Label(N("kernel version")), 0, 0, 0);
-$ker_hbox->pack_start($kernel_combo, 0, 0, 0);
-$ker_hbox->pack_start($kernel_button, 0, 0, 0);
-$up_vbox->pack_start($ker_hbox, 0, 0, 5);
-
-# vbox part
-my $up_frame = new Gtk::Frame(N("General"));
-$up_frame->add($up_vbox);
-$global_vbox->pack_start($up_frame, 1, 1, 0);
-
-### expert mode
-my $expert_main_frame = new Gtk::Frame(N("Expert Area"));
-my $expert_dedans = new Gtk::VBox(0, 5);
-$expert_dedans->border_width(5);
-my $expert_button_frame = new Gtk::Frame(N("mkinitrd optional arguments"));
-my $expert_mod_frame = new Gtk::Frame(N("Add a module"));
-my $expert_pane = new Gtk::HPaned();
-$expert_pane->set_handle_size(10);
-$expert_pane->set_gutter_size(8);
-
-my $expert_button = new Gtk::Button(N("Expert Mode"));
-$expert_button->signal_connect(clicked => sub {
- if ($expert_mode) {
- $expert_mod_frame->hide();
- $expert_button_frame->hide()
- } else {
- $expert_mod_frame->show();
- $expert_button_frame->show();
- }
- $expert_mode = !$expert_mode;
- });
-
-my $expert_button_vbox = new Gtk::VBox(0, 5);
-my $expert_button_hbox = new Gtk::HBox(0, 5);
-my $expert_button_hbox2 = new Gtk::HBox(0, 5);
-my $force_button = new Gtk::ToggleButton(N("force"));
-my $needed_button = new Gtk::ToggleButton(N("if needed"));
-my $scsi_button = new Gtk::ToggleButton(N("omit scsi modules"));
-my $raid_button = new Gtk::ToggleButton(N("omit raid modules"));
-$expert_button_hbox->pack_start($force_button, 0, 0, 0);
-$expert_button_hbox->pack_start($raid_button, 0, 0, 0);
-
-$expert_button_hbox2->pack_start($needed_button, 0, 0, 0);
-$expert_button_hbox2->pack_start($scsi_button, 0, 0, 0);
-
-$expert_button_vbox->pack_start($expert_button_hbox, 0, 0, 0);
-$expert_button_vbox->pack_start($expert_button_hbox2, 0, 0, 0);
-$expert_button_frame->add($expert_button_vbox);
-$expert_dedans->pack_start($expert_button_frame, 0, 0, 0);
-$expert_mod_frame->add($expert_pane);
-$expert_dedans->pack_start($expert_mod_frame, 1, 1, 0);
-$expert_main_frame->add($expert_dedans);
-$global_vbox->pack_start($expert_main_frame, 1, 1, 0);
-
-### the tree
-
-# Create a ScrolledWindow for the tree
-my $tree_scrolled_win = new Gtk::ScrolledWindow();
-$tree_scrolled_win->set_usize(200, $::isEmbedded ? 0 : 175);
-$expert_pane->add1($tree_scrolled_win);
-$tree_scrolled_win->set_policy('automatic', 'automatic');
-
-# Create root tree
-my $tree = new Gtk::Tree();
-my $leaf;
-my $root_dir;
-$tree_scrolled_win->add_with_viewport($tree);
-$tree->set_selection_mode('single');
-$tree->set_view_mode('item');
-
-fill_tree($kernel_combo->entry->get_text());
-
-# Create a ScrolledWindow for the list
-my $list_scrolled_win = new Gtk::ScrolledWindow(undef, undef);
-my $rmmod_button = new Gtk::Button(N("Remove a module"));
-my $expert_inside_pane2 = new Gtk::VBox(0, 0);
-my $list_selected_row;
-
-$expert_inside_pane2->pack_start($list_scrolled_win, 1, 1, 0);
-$expert_inside_pane2->pack_start($rmmod_button, 0, 0, 0);
-$expert_pane->add2($expert_inside_pane2);
-$list_scrolled_win->set_policy('automatic', 'automatic');
-$rmmod_button->signal_connect(clicked => sub { $list->remove($list_selected_row) });
-
-# Create list box
-########################################################## from here my $list
-$list->signal_connect(select_row => sub { (undef, $list_selected_row) = @_ });
-$list_scrolled_win->add($list);
-$list->set_column_justification(1, 'right');
-$list->set_column_width(0, 200);
-$list->set_column_width(1, 50);
-$list->set_selection_mode('single');
-$list->set_shadow_type('none');
-$list->show();
-
-### output
-my $output_frame = new Gtk::Frame(N("Output"));
-my $output = new Gtk::Text(undef, undef);
-my $vscrollbar = new Gtk::VScrollbar($output->vadj);
-my $output_hbox = new Gtk::HBox(0, 0);
-$output_hbox->border_width(5);
-$output_hbox->set_usize(30, 75);
-$output_hbox->pack_start($output, 1, 1, 0);
-$output_hbox->pack_start($vscrollbar, 0, 0, 0);
-$output_frame->add($output_hbox);
-$global_vbox->pack_start($output_frame, 0, 0, 0);
-
-### final buttons
-my $build_button = new Gtk::Button(N("Build the disk"));
-my $cancel_button = new Gtk::Button(N("Cancel"));
-my $fin_hbox = new Gtk::HBox(0, 0);
-$cancel_button->signal_connect(clicked => sub { my_gtk->exit(0) });
-$build_button->signal_connect(clicked => \&build_it);
-$fin_hbox->pack_end($cancel_button, 0, 0, 0);
-$fin_hbox->pack_end($build_button, 0, 0, 10);
-$fin_hbox->pack_end($expert_button, 0, 0, 10);
-$global_vbox->pack_start($fin_hbox, 0, 0, 0);
-
-### back to window
-$window->{window}->add($global_vbox);
-
-$window->{rwindow}->show_all();
-$expert_mod_frame->hide();
-$expert_button_frame->hide();
+my $kernel_combo = gtknew('ComboBox', text => chomp_(`uname -r`), list => [ sort grep { !/^\.\.?$/ } sort(all("/lib/modules")) ]);
+
+
+##########################################################
+
+### main window
+$window->{window}->add(
+ gtknew('VBox', children => [
+ if_($::isEmbedded, 0, gtknew('Label', text => N("Boot disk creation"))),
+ 0, gtknew('Frame', text => N("General"), child =>
+ gtknew('VBox', children_tight => [
+ gtknew('HBox', homogenous => 1, children_tight => [
+ gtknew('Label', text => N("Device")),
+ $device_combo,
+ gtknew('Button', text => N("Default"),
+ clicked => sub { $device_combo->entry->set_text("/dev/fd0") }),
+ ]),
+ gtknew('HBox', homogenous => 1, children_tight => [
+ gtknew('Label', text => N("Kernel version")),
+ $kernel_combo,
+ gtknew('Button', text => N("Default"),
+ clicked => sub {
+ $kernel_combo->entry->set_text(chomp_(`uname -r`));
+ }),
+ ]),
+ ]),
+ ),
+ 1, gtknew('VBox'),
+ 0, create_okcancel({
+ cancel_clicked => sub { ugtk3->exit(0) },
+ ok_clicked => \&build_it,
+ },
+ undef, undef, '',
+ [ N("Preferences"), \&pref_dialog, 0 ],
+ ),
+ ]),
+ );
+
+$window->{rwindow}->show_all;
$window->main;
-my_gtk->exit(0);
+ugtk3->exit(0);
+
+my $remove_but;
+
+sub pref_dialog() {
+ my $dialog = gtkset_modal(gtkset_size_request(_create_dialog(N("Advanced preferences")), 600, -1), 1);
+ $dialog->set_transient_for($window->{real_window});
+
+
+ # Create root tree:
+ $tree_model = Gtk3::TreeStore->new(("Glib::String") x 2, "Glib::Int");
+ $tree = Gtk3::TreeView->new_with_model($tree_model);
+ $tree->set_headers_visible(0);
+ $tree->append_column(Gtk3::TreeViewColumn->new_with_attributes("", Gtk3::CellRendererText->new, 'text' => 0));
+ $tree->signal_connect('row-expanded', \&expand_tree);
+ $tree->get_selection->signal_connect('changed' => \&selected_tree);
+
+ # Create modules list:
+ $list_model = Gtk3::ListStore->new(("Glib::String") x 3); # relative path, size, (hidden full path)
+ $list = Gtk3::TreeView->new_with_model($list_model);
+ each_index {
+ $list->append_column(my $col = Gtk3::TreeViewColumn->new_with_attributes($_, Gtk3::CellRendererText->new, 'text' => $::i));
+ $col->set_sort_column_id($::i);
+ $col->set_min_width((200, 50)[$::i]);
+ } (N("Module name"), N("Size"));
+
+ gtkpack_($dialog->get_child,
+ 0, gtknew('Frame', text => N("Mkinitrd optional arguments"), child =>
+ gtknew('VBox', spacing => 5, children_tight => [
+ $buttons{force} = gtknew('CheckButton', text => N("force")),
+ $buttons{raid} = gtknew('CheckButton', text => N("omit raid modules")),
+ $buttons{needed} = gtknew('CheckButton', text => N("if needed")),
+ $buttons{scsi} = gtknew('CheckButton', text => N("omit scsi modules")),
+ ]),
+ ),
+ 1, gtknew('Frame', text => N("Add a module"), child =>
+ create_hpaned(
+ gtkset_size_request(
+ gtknew('ScrolledWindow', child => $tree),
+ 200, $::isEmbedded ? 0 : 175),
+ gtknew('VBox', children => [
+ 1, gtkadd(Gtk3::ScrolledWindow->new,
+ $list
+ ),
+ 0, $remove_but = gtknew('Button', text => N("Remove a module"),
+ clicked => sub {
+ my $iter = ($list->get_selection->get_selected)[1];
+ return unless $iter;
+ my $removed = $list_model->get($iter, 2);
+ $list_model->remove($iter);
+ @temp_modules = grep { $_ ne $removed } @temp_modules;
+ $remove_but->set_sensitive(scalar @temp_modules);
+ }),
+ ]),
+ ),
+ ),
+ );
+
+ # restore values:
+ $buttons{$_}->set_active($options{$_}) foreach keys %buttons;
+ fill_tree($kernel_combo->entry->get_text);
+ foreach my $module (@modules) {
+ my $full_path = join('/', "/lib/modules", $kernel_combo->entry->get_text, $module);
+ $full_path =~ s/\.(ko|o)(|.gz)//;
+ my $size = get_file_size(glob_("$full_path.*"));
+ $list_model->append_set(map_index { $::i => $_ } $module, $size, $full_path);
+ }
+
+ $remove_but->set_sensitive(scalar @modules);
+ @temp_modules = ();
+
+ gtkadd($dialog->get_action_area,
+ create_okcancel({
+ cancel_clicked => sub { $dialog->destroy },
+ ok_clicked => sub {
+ # save values:
+ $options{$_} = $buttons{$_}->get_active foreach keys %buttons;
+ my $val;
+ @modules = ();
+ $list_model->foreach(sub {
+ my ($model, $_path, $iter) = @_;
+ push @modules, $model->get($iter, 0);
+ return 0;
+ }, $val);
+ $dialog->destroy;
+ },
+ }),
+ );
+ $dialog->show_all;
+ $dialog->run;
+}
#-------------------------------------------------------------
# tree functions
@@ -234,125 +214,113 @@ my_gtk->exit(0);
### Subroutines
sub fill_tree {
- ($root_dir) = @_;
- $root_dir = "/lib/modules/" . $root_dir;
- # Create root tree item widget
- $leaf = new_with_label Gtk::TreeItem($root_dir);
- $tree->append($leaf);
- $leaf->signal_connect('select', \&select_item, $root_dir);
- $leaf->set_user_data($root_dir);
-
- # Create the subtree
- if (has_sub_trees($root_dir)) {
- my $subtree = new Gtk::Tree();
- $leaf->set_subtree($subtree);
- $leaf->signal_connect('expand', \&expand_tree, $subtree);
- $leaf->signal_connect('collapse', \&collapse_tree);
- $leaf->expand();
- }
+ my ($root_dir) = @_;
+ $root_dir = "/lib/modules/" . $root_dir;
+ # Create root tree item widget
+ my $parent_iter = $tree_model->append_set(undef, [ 0 => $root_dir, 1 => $root_dir, 2 => has_sub_trees($root_dir) ]);
+
+ # Create the subtree
+ expand_tree($tree, $parent_iter, $tree_model->get_path($parent_iter)) if has_sub_trees($root_dir);
}
-sub change_tree {
- $leaf->destroy();
- fill_tree(@_);
- $leaf->show();
+
+# Called whenever an item is clicked on the tree widget.
+sub selected_tree {
+ my ($select) = @_;
+ my ($model, $iter) = $select->get_selected;
+ $remove_but->set_sensitive($model && $iter);
+
+ return unless $model; # no real selection
+ my $file = $model->get($iter, 1);
+
+ return if -d $file;
+
+ my $size = get_file_size($file);
+
+ return if member($file, @temp_modules);
+ push @temp_modules, $file;
+ $list_model->append_set([ 0 => stripit($file), 1 => $size, 2 => $file ]);
}
# Callback for expanding a tree - find subdirectories, files and add them to tree
sub expand_tree {
- my ($item, $subtree) = @_;
-
- my $path;
- my $item_new;
- my $new_subtree;
-
- my $dir = $item->get_user_data();
-
- chdir($dir);
-
- foreach my $dir_entry (all(".")) {
- if (-d $dir_entry or $dir_entry =~ /\.o(\.gz)?$/) {
- $path = $dir . "/" . $dir_entry;
- $path =~ s|//|/|g;
- $item_new = new_with_label Gtk::TreeItem($dir_entry);
- $item_new->set_user_data($path);
- $item_new->signal_connect('select', \&select_item, $path);
- $subtree->append($item_new);
- $item_new->show();
-
- if (has_sub_trees($path)) {
- $new_subtree = new Gtk::Tree();
- $item_new->set_subtree($new_subtree);
- $item_new->signal_connect('expand', \&expand_tree, $new_subtree);
- $item_new->signal_connect('collapse', \&collapse_tree);
- }
- }
+ my ($tree, $parent_iter, $path) = @_;
+ return if !$tree || !$parent_iter;
+ my $dir = $tree_model->get($parent_iter, 1);
+
+ #- if we're hinted to be expandable
+ if ($tree_model->get($parent_iter, 2)) {
+ #- hackish: if first child has '' as name, then we need to expand on the fly
+ if ($tree_model->iter_has_child($parent_iter)) {
+ my $child = $tree_model->iter_children($parent_iter);
+ # BUG: ->iter_children return invalid iterators !!! thus the dummy empty line
+ $tree_model->remove($child);
+ }
+ # do not refill the parent anymore
+ $tree_model->set($parent_iter, 2 => 0);
+
+ foreach my $dir_entry (sort(all($dir))) {
+ my $entry_path = $dir . "/" . $dir_entry;
+ if (-d $entry_path || $dir_entry =~ /\.(k|)o(\.gz)?$/) {
+ $entry_path =~ s|//|/|g;
+ my $iter = $tree_model->append_set($parent_iter, [ 0 => $dir_entry, 1 => $entry_path, 2 => has_sub_trees($entry_path) ]);
+ #- hackery for partial displaying of trees, used in rpmdrake:
+ #- if leaf is void, we may create the parent and one child (to have the [+] in front of the parent in the ctree)
+ #- though we use '' as the label of the child; then rpmdrake will connect on tree_expand, and whenever
+ #- the first child has '' as the label, it will remove the child and add all the "right" children
+ $tree_model->append_set($iter, [ 0 => '' ]) if has_sub_trees($entry_path);
+ }
+ }
}
- chdir("..");
- }
-
-
-# Callback for collapsing a tree -- removes the subtree
-sub collapse_tree {
- my ($item) = @_;
- my $subtree = new Gtk::Tree();
+ $tree->expand_row($path, 0);
+}
- $item->remove_subtree();
- $item->set_subtree($subtree);
- $item->signal_connect('expand', \&expand_tree, $subtree);
- }
-# Called whenever an item is clicked on the tree widget.
-sub select_item {
- my ($widget, $file) = @_;
- return if -d $file;
- my $size = (lstat($file))[7];
- my $lr = $list->rows();
- my $i;
- $file =~ s|/lib/modules/.*?/||g;
- for ($i = 0; $i < $lr; $i++) {
- last if $file eq $list->get_text($i, 0);
- }
- print $file, "\n";
-
- $list->append($file, $size) if $i == $lr or $lr == 0;
-}
#-------------------------------------------------------------
# the function
#-------------------------------------------------------------
-sub build_it {
- my $y;
- my $co = "/sbin/mkbootdisk --noprompt --verbose --device " . $device_combo->entry->get_text();
- if ($expert_mode) {
- $co .= " --mkinitrdargs -f" if $force_button->get_active;
- $co .= " --mkinitrdargs --ifneeded" if $needed_button->get_active;
- $co .= " --mkinitrdargs --omit-scsi-modules" if $scsi_button->get_active;
- $co .= " --mkinitrdargs --omit-raid-modules" if $raid_button->get_active;
- for (my $i = 0; $i < $list->rows(); $i++) {
- $y = $list->get_text($i, 0);
- $y =~ s|.*?/||g;
- $co .= " --mkinitrdargs --with=" . $y; #. "/usr/lib/" . $kernel_combo->entry->get_text() . "/" . $y;
+sub build_it() {
+ my $initrd_args = join(' ',
+ if_($options{force}, "-f"),
+ if_($options{needed}, "--ifneeded"),
+ if_($options{scsi}, "--omit-scsi-modules"),
+ if_($options{raid}, "--omit-raid-modules"),
+ if_(@modules, map { my $i = $_; $i =~ s!.*/!!; "--with=$i" } @modules),
+ );
+ $initrd_args = qq(--mkinitrdargs "$initrd_args") if $initrd_args;
+ my $co = join(' ', "/sbin/mkbootdisk --noprompt --verbose --device", $device_combo->entry->get_text, $initrd_args);
+ $options{MODULES} = join(' ', @modules);
+ setVarsInSh($conffile, \%options);
+
+ $co .= " " . $kernel_combo->entry->get_text;
+ $co .= " 2>&1 |";
+ $::testing or warn_dialog(N("Warning"), N("Be sure a media is present for the device %s", $device_combo->entry->get_text)) or return;
+ # we test if the media is present
+ test:
+ my $a = "dd count=1 if=/dev/null of=" . $device_combo->entry->get_text . " 2>&1";
+ my $b = `$a`;
+ if (!$::testing && $b =~ /dd/) {
+ err_dialog(N("Error"), N("There is no medium or it is write-protected for device %s.\nPlease insert one.", $device_combo->entry->get_text), { cancel => 1 }) ? goto test : return 0;
}
- }
- $co .= " " . $kernel_combo->entry->get_text();
- $co .= " 2>&1 |";
- create_dialog(N("Be sure a media is present for the device %s", $device_combo->entry->get_text()), 1) or return;
-# we test if the media is present
- test:
- my $a = "dd count=1 if=/dev/null of=" . $device_combo->entry->get_text() . " 2>&1";
- my $b = `$a`;
- if ($b =~ /dd/) { create_dialog(N("There is no medium or it is write-protected for device %s.\nPlease insert one.", $device_combo->entry->get_text()), 1) ? goto test : return 0 }
- local *STATUS;
- open STATUS, $co or do { create_dialog(N("Unable to fork: %s", $!), 0); return };
- local $_;
- while (<STATUS>) {
- $output->insert($fixed_font, undef, undef, $_);
- }
- close STATUS or create_dialog(N("Unable to properly close mkbootdisk: \n %s \n %s", $!, $?), 0);
+ open(my $STATUS, $co) or do { err_dialog(N("Error"), N("Unable to fork: %s", $!)); return };
+ my $log = join('', <$STATUS>);
+ if (close $STATUS) {
+ info_dialog(N("Floppy creation completed"), N("The creation of the boot floppy has been successfully completed \n"));
+ ugtk3->exit;
+ } else {
+ err_dialog(N("Error"),
+ #-PO: Do not alter the <span ..> and </span> tags
+ N("Unable to properly close mkbootdisk:\n\n<span foreground=\"Red\"><tt>%s</tt></span>", $log), { use_markup => 1 });
+ }
- return (0);
+ return 0;
+}
+
+sub get_file_size {
+ my ($file) = @_;
+ (lstat($file))[7];
}
####
@@ -366,9 +334,14 @@ sub has_sub_trees {
my ($dir) = @_;
foreach my $file (glob_("$dir/*")) {
- return 1 if -d $file or $file =~ /\.o(\.gz)?$/;
+ return 1 if -d $file || $file =~ /\.(k|)o(\.gz)?$/;
}
- return (0);
+ return 0;
}
+sub stripit {
+ my ($file) = @_;
+ $file =~ s|/lib/modules/.*?/||g;
+ $file;
+}