diff --git a/perl/lib/Nix/CopyClosure.pm b/perl/lib/Nix/CopyClosure.pm index f701a7c8a..061a15c07 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 3bcbabe98..dd3e5cefd 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