From abb80356bb59bcc101a57949badbb85fde4db9ba Mon Sep 17 00:00:00 2001 From: Tony Finch Date: Fri, 26 Mar 2010 18:15:26 +0000 Subject: [PATCH] git-daemon: simplify xread() --- git-daemon/git-daemon.pl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/git-daemon/git-daemon.pl b/git-daemon/git-daemon.pl index df753e1..4f8a774 100755 --- a/git-daemon/git-daemon.pl +++ b/git-daemon/git-daemon.pl @@ -18,7 +18,7 @@ use Socket; use Sys::Syslog; use vars qw{ %vhost_default_user %vhost_user_from_tilde - $TILDE $REPO $HOSTNAME }; + $TILDE $REPO $HOSTNAME }; use lib '/etc/userv'; require 'git-daemon-vhosts.pl'; @@ -44,18 +44,14 @@ sub fail { sub xread { my $length = shift; my $buffer = ""; - my $count = 0; # simply die if the client takes too long alarm 30; while ($length > length $buffer) { - my ($data,$ret); - do { - $ret = sysread STDIN, $data, $length - } while not defined $ret and ($! == EINTR or $! == EAGAIN); - fail "read: $!" unless defined $ret; - fail "short read: expected $length bytes, got $count" if $ret == 0; - $buffer .= $data; - $count += $ret; + my $ret = sysread STDIN, $buffer, $length, length $buffer; + fail "short read: expected $length bytes, got " . length $buffer + if defined $ret and $ret == 0; + fail "read: $!" if not defined $ret and $! != EINTR and $! != EAGAIN; + $ret = 0 if not defined $ret; } alarm 0; return $buffer; -- 2.30.2