about summary refs log tree commit diff
path: root/perl
diff options
context:
space:
mode:
Diffstat (limited to 'perl')
-rw-r--r--perl/lib/Nix/CopyClosure.pm8
-rw-r--r--perl/lib/Nix/SSH.pm21
2 files changed, 21 insertions, 8 deletions
diff --git a/perl/lib/Nix/CopyClosure.pm b/perl/lib/Nix/CopyClosure.pm
index f701a7c8a0d5..061a15c071cf 100644
--- a/perl/lib/Nix/CopyClosure.pm
+++ b/perl/lib/Nix/CopyClosure.pm
@@ -27,13 +27,7 @@ sub copyToOpen {
 
     # Get back the set of paths that are already valid on the remote host.
     my %present;
-    my $n = readInt($from);
-    while ($n--) {
-        my $len = readInt($from);
-        my $s = readN($len, $from);
-        $present{$s} = 1;
-        readN(8 - $len % 8, $from) if $len % 8; # skip padding
-    }
+    $present{$_} = 1 foreach readStrings($from);
 
     my @missing = grep { !$present{$_} } @closure;
     return if !@missing;
diff --git a/perl/lib/Nix/SSH.pm b/perl/lib/Nix/SSH.pm
index 3bcbabe981d6..dd3e5cefd8c7 100644
--- a/perl/lib/Nix/SSH.pm
+++ b/perl/lib/Nix/SSH.pm
@@ -7,7 +7,8 @@ use IPC::Open2;
 our @ISA = qw(Exporter);
 our @EXPORT = qw(
   sshOpts openSSHConnection closeSSHConnection
-  readN readInt writeInt writeString writeStrings
+  readN readInt readString readStrings
+  writeInt writeString writeStrings
   connectToRemoteNix
 );
 
@@ -83,6 +84,24 @@ sub readInt {
 }
 
 
+sub readString {
+    my ($from) = @_;
+    my $len = readInt($from);
+    my $s = readN($len, $from);
+    readN(8 - $len % 8, $from) if $len % 8; # skip padding
+    return $s;
+}
+
+
+sub readStrings {
+    my ($from) = @_;
+    my $n = readInt($from);
+    my @res;
+    push @res, readString($from) while $n--;
+    return @res;
+}
+
+
 sub writeInt {
     my ($n, $to) = @_;
     syswrite($to, pack("L<x4", $n)) or die;