prepare to upload
[debian/amanda] / server-src / amtape.pl
index d733d7016828be287b685e24394d69dfec75d640..df7b176d5025d2f11255b686fc06c7cece0ce1b0 100644 (file)
@@ -19,6 +19,7 @@
 
 use lib '@amperldir@';
 use strict;
+use warnings;
 
 use File::Basename;
 use Getopt::Long;
@@ -44,10 +45,11 @@ my %subcommands;
 
 sub usage {
     my ($finished_cb) = @_;
-    $finished_cb ||= sub { exit(1); };
+
+    $finished_cb = sub { exit(1); } if (!$finished_cb or !(ref($finished_cb) eq "CODE"));
 
     print STDERR <<EOF;
-Usage: amtape <conf> <command> {<args>} [-o configoption]*
+Usage: amtape [-o configoption]* <conf> <command> {<args>}
   Valid commands are:
 EOF
     local $Text::Wrap::columns = 80 - 20;
@@ -80,7 +82,7 @@ subcommand("usage", "usage", "this message",
 sub {
     my ($finished_cb, @args) = @_;
 
-    usage($finished_cb);
+    return usage($finished_cb);
 });
 
 subcommand("reset", "reset", "reset changer to known state",
@@ -256,11 +258,13 @@ sub {
            my $line = "slot $sl->{slot}:";
            if (!defined($sl->{device_status}) && !defined($sl->{label})) {
                $line .= " unknown state";
-           } elsif ($sl->{'status'} == Amanda::Changer::SLOT_EMPTY) {
+           } elsif ($sl->{'state'} == Amanda::Changer::SLOT_EMPTY) {
                $line .= " empty";
            } else {
                if (defined $sl->{label}) {
                    $line .= " label $sl->{label}";
+               } elsif ($sl->{'device_status'} == $DEVICE_STATUS_VOLUME_UNLABELED) {
+                   $line .= " blank";
                } elsif ($sl->{'device_status'} != $DEVICE_STATUS_SUCCESS) {
                    $line .= "device error";
                } elsif ($sl->{'f_type'} != $Amanda::Header::F_TAPESTART) {
@@ -315,7 +319,7 @@ sub {
     # 'current' or 'next' ..  when we have a changer using such slot names,
     # this subcommand will need to support a --literal flag
 
-    usage($finished_cb) unless (@args == 1);
+    return usage($finished_cb) unless (@args == 1);
     my $slot = shift @args;
 
     my $chg = load_changer($finished_cb) or return;
@@ -392,7 +396,7 @@ sub {
     my $inter;
     my $scan;
 
-    usage($finished_cb) unless (@args == 1);
+    return usage($finished_cb) unless (@args == 1);
     my $label = shift @args;
 
     my $steps = define_steps
@@ -520,7 +524,7 @@ sub {
        }
     };
 
-    usage($finished_cb) unless (@args == 0);
+    return usage($finished_cb) unless (@args == 0);
     my $label = shift @args;
 
     my $chg = load_changer($finished_cb) or return;
@@ -639,10 +643,16 @@ select($previous_fh);
 sub main {
     my ($finished_cb) = @_;
 
-    my $subcmd = shift @ARGV;
-    usage($finished_cb) unless defined($subcmd) and exists ($subcommands{$subcmd});
-    invoke_subcommand($subcmd, $finished_cb, @ARGV);
+    my $steps = define_steps
+       cb_ref => \$finished_cb;
+
+    step start => sub {
+       my $subcmd = shift @ARGV;
+       return usage($finished_cb) unless defined($subcmd) and exists ($subcommands{$subcmd});
+       invoke_subcommand($subcmd, $finished_cb, @ARGV);
+    }
 }
+
 main(\&Amanda::MainLoop::quit);
 Amanda::MainLoop::run();
 Amanda::Util::finish_application();