diff options
author | Eric Wong <e@80x24.org> | 2023-11-13 13:15:41 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-11-13 21:55:00 +0000 |
commit | 2d3699d2ce8cbee21485c8b31b1f681d2bb5def5 (patch) | |
tree | 675eea9a3c112b7cf584295cac2e62fae489c9c1 /lib/PublicInbox/LeiInput.pm | |
parent | c560ab9e67476ce7b4438f8323d8ae9e775e790e (diff) | |
download | public-inbox-2d3699d2ce8cbee21485c8b31b1f681d2bb5def5.tar.gz |
read_all can be expanded to support FIFOs/pipes/sockets where read-until-EOF behavior is desired. We can also rely on wantarray to support splitting on EOL markers, but it's hard-coded to support only `$/ eq "\n"' since (AFAIK) it's the only way we use the wantarray form `readline'.
Diffstat (limited to 'lib/PublicInbox/LeiInput.pm')
-rw-r--r-- | lib/PublicInbox/LeiInput.pm | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/lib/PublicInbox/LeiInput.pm b/lib/PublicInbox/LeiInput.pm index 68c3c459..daba9a8e 100644 --- a/lib/PublicInbox/LeiInput.pm +++ b/lib/PublicInbox/LeiInput.pm @@ -79,12 +79,10 @@ sub input_net_cb { # imap_each, nntp_each cb sub input_fh { my ($self, $ifmt, $fh, $name, @args) = @_; if ($ifmt eq 'eml') { - my $buf = do { local $/; <$fh> }; - my $ok = defined($buf) ? 1 : 0; - ++$ok if eof($fh); - ++$ok if $fh->close; - $ok == 3 or return $self->{lei}->child_error($?, <<""); -error reading $name: $! (\$?=$?) + my $buf = eval { PublicInbox::IO::read_all $fh, 0 }; + my $e = $@; + return $self->{lei}->child_error($?, <<"") if !$fh->close || $e; +error reading $name: $! (\$?=$?) (\$@=$e) PublicInbox::Eml::strip_from($buf); |