|
Packit Service |
44c065 |
package Utils;
|
|
Packit Service |
44c065 |
use strict;
|
|
Packit Service |
44c065 |
use warnings;
|
|
Packit Service |
44c065 |
use File::Spec;
|
|
Packit Service |
44c065 |
use Config;
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
require Exporter;
|
|
Packit Service |
44c065 |
our @ISA = 'Exporter';
|
|
Packit Service |
44c065 |
our @EXPORT = qw/save_std restore_std next_fd sig_num/;
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
sub _open {
|
|
Packit Service |
44c065 |
open $_[0], $_[1] or die "Error from open( " . join(q{, }, @_) . "): $!";
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
my @saved;
|
|
Packit Service |
44c065 |
sub save_std {
|
|
Packit Service |
44c065 |
for my $h ( @_ ) {
|
|
Packit Service |
44c065 |
my $fh;
|
|
Packit Service |
44c065 |
_open $fh, ($h eq 'stdin' ? "<&" : ">&") . uc $h;
|
|
Packit Service |
44c065 |
push @saved, $fh;
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
sub restore_std {
|
|
Packit Service |
44c065 |
for my $h ( @_ ) {
|
|
Packit Service |
44c065 |
no strict 'refs';
|
|
Packit Service |
44c065 |
my $fh = shift @saved;
|
|
Packit Service |
44c065 |
_open \*{uc $h}, ($h eq 'stdin' ? "<&" : ">&") . fileno( $fh );
|
|
Packit Service |
44c065 |
close $fh;
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
sub next_fd {
|
|
Packit Service |
44c065 |
no warnings 'io';
|
|
Packit Service |
44c065 |
open my $fh, ">", File::Spec->devnull;
|
|
Packit Service |
44c065 |
my $fileno = fileno $fh;
|
|
Packit Service |
44c065 |
close $fh;
|
|
Packit Service |
44c065 |
return $fileno;
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
#--------------------------------------------------------------------------#
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
my %sig_num;
|
|
Packit Service |
44c065 |
my @sig_name;
|
|
Packit Service |
44c065 |
unless($Config{sig_name} && $Config{sig_num}) {
|
|
Packit Service |
44c065 |
die "No sigs?";
|
|
Packit Service |
44c065 |
} else {
|
|
Packit Service |
44c065 |
my @names = split ' ', $Config{sig_name};
|
|
Packit Service |
44c065 |
@sig_num{@names} = split ' ', $Config{sig_num};
|
|
Packit Service |
44c065 |
foreach (@names) {
|
|
Packit Service |
44c065 |
$sig_name[$sig_num{$_}] ||= $_;
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
sub sig_num {
|
|
Packit Service |
44c065 |
my $name = shift;
|
|
Packit Service |
44c065 |
return exists $sig_num{$name} ? $sig_num{$name} : '';
|
|
Packit Service |
44c065 |
}
|
|
Packit Service |
44c065 |
|
|
Packit Service |
44c065 |
1;
|