about summary refs log tree commit
path: root/Net/FTP/A.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Net/FTP/A.pm')
-rw-r--r--Net/FTP/A.pm21
1 files changed, 12 insertions, 9 deletions
diff --git a/Net/FTP/A.pm b/Net/FTP/A.pm
index b3589db..d2644cc 100644
--- a/Net/FTP/A.pm
+++ b/Net/FTP/A.pm
@@ -69,23 +69,26 @@ sub write
  # What is previous pkt ended in \015 or not ??
 
  my $tmp;
- ($tmp = $buf) =~ s/(?!\015)\012/\015\012/sg;
+ ($tmp = substr($buf,0,$size)) =~ s/(?!\015)\012/\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';
 
- my $len = $size + length($tmp) - length($buf);
- my $wrote = syswrite($data, $tmp, $len);
+ my $len = length($tmp);
+ my $off = 0;
+ my $wrote = 0;
 
- if($wrote > 0)
-  {
-   $wrote = $wrote == $len ? $size
-                           : $len - $wrote
-  }
+ while($len) {
+   $off += $wrote;
+   $wrote = syswrite($data, substr($tmp,$off), $len);
+   return $wrote
+     if $wrote <= 0;
+   $len -= $wrote;
+ }
 
- return $wrote;
+ return $size;
 }
 
 1;