about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiInput.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-11-13 13:15:41 +0000
committerEric Wong <e@80x24.org>2023-11-13 21:55:00 +0000
commit2d3699d2ce8cbee21485c8b31b1f681d2bb5def5 (patch)
tree675eea9a3c112b7cf584295cac2e62fae489c9c1 /lib/PublicInbox/LeiInput.pm
parentc560ab9e67476ce7b4438f8323d8ae9e775e790e (diff)
downloadpublic-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.pm10
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);