home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
perl_ste.zip
/
auto
/
Net
/
FTP
/
_store_cmd.al
< prev
next >
Wrap
Text File
|
1997-11-28
|
1KB
|
73 lines
# NOTE: Derived from ./blib/lib/Net/FTP.pm. Changes made here will be lost.
package Net::FTP;
sub _store_cmd
{
my($ftp,$cmd,$local,$remote) = @_;
my($loc,$sock,$len,$buf,$localfd);
local *FD;
$localfd = ref($local) ? fileno($local)
: undef;
unless(defined $remote)
{
croak 'Must specify remote filename with stream input'
if defined $localfd;
($remote = $local) =~ s%.*/%%;
}
if(defined $localfd)
{
$loc = $local;
}
else
{
$loc = \*FD;
unless(open($loc,"<$local"))
{
carp "Cannot open Local file $local: $!\n";
return undef;
}
}
if($ftp->type eq 'I' && !binmode($loc))
{
carp "Cannot binmode Local file $local: $!\n";
return undef;
}
delete ${*$ftp}{'net_ftp_port'};
delete ${*$ftp}{'net_ftp_pasv'};
$sock = $ftp->_data_cmd($cmd, $remote) or
return undef;
while(1)
{
last unless $len = sysread($loc,$buf="",1024);
unless($sock->write($buf,$len) == $len)
{
$sock->abort;
close($loc)
unless defined $localfd;
return undef;
}
}
$sock->close();
close($loc)
unless defined $localfd;
($remote) = $ftp->message =~ /unique file name:\s*(\S*)\s*\)/
if ('STOU' eq uc $cmd);
return $remote;
}
1;