Root is the lizard king.
[p5sagit/p5-mst-13.2.git] / lib / Net / FTP / A.pm
index 46791e8..764e915 100644 (file)
@@ -1,4 +1,4 @@
-##
+## $Id: //depot/libnet/Net/FTP/A.pm#16 $
 ## Package to read/write on ASCII data connections
 ##
 
@@ -10,7 +10,7 @@ use Carp;
 require Net::FTP::dataconn;
 
 @ISA = qw(Net::FTP::dataconn);
-$VERSION = "1.13"; # $Id: //depot/libnet/Net/FTP/A.pm#9 $
+$VERSION = "1.15";
 
 sub read {
   my    $data   = shift;
@@ -71,23 +71,25 @@ sub write {
   my    $size  = shift || croak 'write($buf,$size,[$timeout])';
   my    $timeout = @_ ? shift : $data->timeout;
 
-  $data->can_write($timeout) or
-        croak "Timeout";
-
   (my $tmp = substr($buf,0,$size)) =~ s/\n/\015\012/sg;
 
   # If the remote server has closed the connection we will be signal'd
   # when we write. This can happen if the disk on the remote server fills up
 
-  local $SIG{PIPE} = 'IGNORE';
+  local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
 
   my $len = length($tmp);
   my $off = 0;
   my $wrote = 0;
 
+  my $blksize = ${*$data}{'net_ftp_blksize'};
+
   while($len) {
+    $data->can_write($timeout) or
+        croak "Timeout";
+
     $off += $wrote;
-    $wrote = syswrite($data, substr($tmp,$off), $len);
+    $wrote = syswrite($data, substr($tmp,$off), $len > $blksize ? $blksize : $len);
     return undef
       unless defined($wrote);
     $len -= $wrote;