Net-RRP
view release on metacpan or search on metacpan
lib/Net/RRP/Toolkit.pm view on Meta::CPAN
package Net::RRP::Toolkit;
use strict;
use Errno;
use Fcntl ':flock';
require Exporter;
@Net::RRP::Toolkit::ISA = qw(Exporter);
@Net::RRP::Toolkit::EXPORT_OK = qw(decodeTilde safeCall safeCopy lowerKeys pathSubtract);
$Net::RRP::Toolkit::VERSION = (split " ", '# $Id: Toolkit.pm,v 1.3 2000/10/04 08:05:37 mkul Exp $ ')[3];
sub decodeTilde
{
my $path = shift || return undef;
$path =~ s/^~([^\/]*)/$1 ? (getpwnam($1))[7] : (getpwuid($>))[7]/e;
$path;
}
sub safeCall
{
my $codeRef = shift;
my $result = &$codeRef;
while ( ( $! == Errno::EINTR ) && ( ! $result ) )
{
$result = &$codeRef;
}
$result;
}
sub safeWrite
{
my ( $handler, $buffer, $length ) = @_;
$handler || raise ZError 'MISSING_MANDATORY_PARAM', { name => 'hander' };
defined $buffer || raise ZError 'MISSING_MANDATORY_PARAM', { name => 'buffer' };
$length ||= length ( $buffer );
my ( $origLength, $itemLength ) = ( $length );
while ( $length )
{
$itemLength = Net::RRP::Toolkit::safeCall ( sub { $handler->syswrite ( $buffer, $length ) } );
last unless $itemLength;
$length -= $itemLength;
$buffer = substr ( $buffer, $itemLength ) if $length;
}
defined $itemLength ? $origLength : undef;
}
sub safeRead
{
my ( $handler, $buffer, $length ) = @_;
$handler || raise ZError 'MISSING_MANDATORY_PARAM', { name => 'hander' };
defined $buffer || raise ZError 'MISSING_MANDATORY_PARAM', { name => 'buffer' };
$length ||= length ( $buffer );
$$buffer = '';
my ( $origLength, $itemLength ) = ( $length );
my $subBuffer;
while ( $length )
{
$itemLength = Net::RRP::Toolkit::safeCall ( sub { $handler->sysread ( $subBuffer, $length ) } );
last unless $itemLength;
$length -= $itemLength;
$$buffer .= $subBuffer;
}
defined $itemLength ? $origLength : undef;
}
sub safeCopy
{
my $fromName = $_{srcFile} || die "safeCopy(): srcFile required";
my $toName = $_{dstFile} || die "safeCopy(): dstFile required";
( run in 0.762 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )