-sub make_new_tape_label {
- my $self = shift;
- my %params = @_;
-
- my $tl = exists $params{'tapelist'}? $params{'tapelist'} : $self->{'tapelist'};
- my $template = exists $params{'template'}? $params{'template'} : $self->{'autolabel'}->{'template'};
- my $labelstr = exists $params{'labelstr'}? $params{'labelstr'} : $self->{'labelstr'};
-
- (my $npercents =
- $template) =~ s/[^%]*(%+)[^%]*/length($1)/e;
- my $nlabels = 10 ** $npercents;
-
- # make up a sprintf pattern
- (my $sprintf_pat =
- $template) =~ s/(%+)/"%0" . length($1) . "d"/e;
-
- my %existing_labels =
- map { $_->{'label'} => 1 } @{$tl->{'tles'}};
-
- my ($i, $label);
- for ($i = 1; $i < $nlabels; $i++) {
- $label = sprintf($sprintf_pat, $i);
- last unless (exists $existing_labels{$label});
- }
-
- # bail out if we didn't find an unused label
- return (undef, "Can't label unlabeled volume: All label used") if ($i >= $nlabels);
-
- # verify $label matches $labelstr
- if ($label !~ /$labelstr/) {
- return (undef, "Newly-generated label '$label' does not match labelstr '$labelstr'");
- }
-
- return $label;
-}
-