- 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;