guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

46/118: Fix use of sysread


From: Ludovic Courtès
Subject: 46/118: Fix use of sysread
Date: Tue, 19 May 2015 14:45:34 +0000

civodul pushed a commit to branch nix
in repository guix.

commit 42d91b079c5d0b468663511e7b2a8e2f4048c475
Author: Eelco Dolstra <address@hidden>
Date:   Thu Jul 10 21:14:34 2014 +0200

    Fix use of sysread
---
 perl/lib/Nix/CopyClosure.pm |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/perl/lib/Nix/CopyClosure.pm b/perl/lib/Nix/CopyClosure.pm
index 779d743..8be4ead 100644
--- a/perl/lib/Nix/CopyClosure.pm
+++ b/perl/lib/Nix/CopyClosure.pm
@@ -7,11 +7,24 @@ use List::Util qw(sum);
 use IPC::Open2;
 
 
+sub readN {
+    my ($bytes, $from) = @_;
+    my $res = "";
+    while ($bytes > 0) {
+        my $s;
+        my $n = sysread($from, $s, $bytes);
+        die "I/O error reading from remote side\n" if !defined $n;
+        die "got EOF while expecting $bytes bytes from remote side\n" if !$n;
+        $bytes -= $n;
+        $res .= $s;
+    }
+    return $res;
+}
+
+
 sub readInt {
     my ($from) = @_;
-    my $resp;
-    sysread($from, $resp, 8) == 8 or die "did not receive valid reply from 
remote host\n";
-    return unpack("L<x4", $resp);
+    return unpack("L<x4", readN(8, $from));
 }
 
 
@@ -66,10 +79,9 @@ sub copyTo {
     my $n = readInt($from);
     while ($n--) {
         my $len = readInt($from);
-        my $s;
-        sysread($from, $s, $len) == $len or die;
+        my $s = readN($len, $from);
         $present{$s} = 1;
-        sysread($from, $s, 8 - $len % 8) if $len % 8; # skip padding
+        readN(8 - $len % 8, $from) if $len % 8; # skip padding
     }
 
     my @missing = grep { !$present{$_} } @closure;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]