diff options
Diffstat (limited to 'perl-install/standalone/drakfloppy')
| -rwxr-xr-x | perl-install/standalone/drakfloppy | 622 |
1 files changed, 279 insertions, 343 deletions
diff --git a/perl-install/standalone/drakfloppy b/perl-install/standalone/drakfloppy index d5d4e3e51..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 @@ -22,237 +22,191 @@ # MA 02111-1307, USA. -use POSIX; -use Gtk; +use strict; +use diagnostics; use lib qw(/usr/lib/libDrakX); -use standalone; #- warning, standalone must be loaded very first, for 'explanations' - -use interactive; -use Config; -use any; -use ugtk qw(:helpers); -init Gtk; -Gtk->set_locale; - -#------------------------------------------------------------- -# i18n routines -# IMPORTANT: next two routines have to be redefined here to -# get correct namespace (drakconf instead of libDrakX) -# (This version is now UTF8 compliant - Sg 2001-08-18) -#------------------------------------------------------------- - -#sub _ { -# my $s = shift @_; my $t = translate($s); -# sprintf $t, @_; -#} - -#sub translate { -# my ($s) = @_; -# $s ? c::dgettext('libDrakX', $s) : ''; -#} - -if ($::isEmbedded) { - print "EMBED\n"; - print "XID : $::XID\n"; - print "CCPID : $::CCPID\n"; +use standalone; #- warning, standalone must be loaded very first, for 'explanations' +use common; +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 $window = ugtk3->new(N("Boot Floppy")); +unless ($::isEmbedded) { + $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); } -$in = 'interactive'->vnew('su', 'default'); -local $_ = join '', @ARGV; - -/-h/ and die N("usage: drakfloppy\n"); - -$expert_mode = 0; -# we have put here the list in order to do $list->clear() when we have to do -$fixed_font = Gtk::Gdk::Font->fontset_load(N("-misc-Fixed-Medium-r-*-*-*-140-*-*-*-*-*-*,*")); -my @titles = ( N("Module name"), N("Size") ); -my $list = new_with_titles Gtk::CList( @titles ); -my $window = $::isEmbedded ? new Gtk::Plug ($::XID) : new Gtk::Window -toplevel; -$window->signal_connect( 'delete_event', sub { $::isEmbedded ? kill('USR1', $::CCPID) : Gtk->exit(0) }); -$window->set_title( N("drakfloppy") ); -$window->set_policy(1, 1, 1); -$window->border_width (5); +my (@modules, @temp_modules, %buttons, %options, $tree_model, $tree, $list_model, $list); -### 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 { $::isEmbedded ? kill('USR1', $::CCPID) : Gtk->exit(0) } }, - ); -my $menubar = ugtk::create_factory_menu($window, @menu_items); +my $conffile = "/etc/sysconfig/drakfloppy"; -######### menus end +# we must be robust against config file parsing +eval { %options = getVarsFromSh($conffile) }; +@modules = split(' ', $options{MODULES}); -my $global_vbox = new Gtk::VBox(); - -$::isEmbedded or $global_vbox->pack_start (new Gtk::Label(N("boot disk creation")), 0, 0, 0); ######## 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();}); -$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 {$::isEmbedded ? kill('USR1', $::CCPID) : 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->add( $global_vbox ); - -$window->show_all(); -$expert_mod_frame->hide(); -$expert_button_frame->hide(); - -Gtk->main_iteration while Gtk->events_pending; -$::isEmbedded and kill 'USR2', $::CCPID; -Gtk->main; - - +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; +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 @@ -260,134 +214,113 @@ Gtk->main; ### 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) ]); -sub change_tree { - $leaf->destroy(); - fill_tree (@_); - $leaf->show(); + # Create the subtree + expand_tree($tree, $parent_iter, $tree_model->get_path($parent_iter)) if has_sub_trees($root_dir); } -# Callback for expanding a tree - find subdirectories, files and add them to tree -sub expand_tree - { - my ( $item, $subtree ) = @_; - - my $dir_entry; - my $path; - my $item_new; - my $new_subtree; - - my $dir = $item->get_user_data(); - - chdir( $dir ); - - foreach $dir_entry ( <*> ) { - 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 ); - } - } - } - chdir( ".." ); - } +# 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); -# Callback for collapsing a tree -- removes the subtree -sub collapse_tree - { - my ( $item ) = @_; - my $subtree = new Gtk::Tree(); + return unless $model; # no real selection + my $file = $model->get($iter, 1); + + return if -d $file; - $item->remove_subtree(); - $item->set_subtree( $subtree ); - $item->signal_connect( 'expand', \&expand_tree, $subtree ); - } + my $size = get_file_size($file); -# 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); + return if member($file, @temp_modules); + push @temp_modules, $file; + $list_model->append_set([ 0 => stripit($file), 1 => $size, 2 => $file ]); } -#------------------------------------------------------------- -# menu callback functions -#------------------------------------------------------------- - -sub print_hello { - print "mcdtg !\n"; +# Callback for expanding a tree - find subdirectories, files and add them to tree +sub expand_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); + } + } + } + $tree->expand_row($path, 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; } - open STATUS, $co or do { create_dialog(N("Unable to fork: %s", $!), 0); return; }; - while (<STATUS>) { - $output->insert( $fixed_font, undef, undef, $_ ); - } - close STATUS or create_dialog(N("Unable to close properly 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]; } #### @@ -397,15 +330,18 @@ sub build_it { #### # Test whether a directory has subdirectories -sub has_sub_trees - { - my ( $dir ) = @_; - my $file; - - foreach $file ( <$dir/*> ) { - return 1 if ( -d $file ) or ($file =~ /\.o(\.gz)?$/); +sub has_sub_trees { + my ($dir) = @_; + + foreach my $file (glob_("$dir/*")) { + return 1 if -d $file || $file =~ /\.(k|)o(\.gz)?$/; } + + return 0; +} - return (0); - } - +sub stripit { + my ($file) = @_; + $file =~ s|/lib/modules/.*?/||g; + $file; +} |
