diff options
author | Tony Finch <dot@dotat.at> | 2010-03-26 18:15:26 +0000 |
---|---|---|
committer | Ian Jackson <ian@liberator.relativity.greenend.org.uk> | 2010-05-22 15:54:40 +0100 |
commit | abb80356bb59bcc101a57949badbb85fde4db9ba (patch) | |
tree | 8315fcc1aefd56d9d8f27373c1d0516157f603c5 /git-daemon | |
parent | fbde0914d3e4fc184ac396dbb35ad6f77527b535 (diff) | |
download | userv-utils-abb80356bb59bcc101a57949badbb85fde4db9ba.tar.gz |
git-daemon: simplify xread()
Diffstat (limited to 'git-daemon')
-rwxr-xr-x | git-daemon/git-daemon.pl | 16 |
1 files 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; |