- my $mime = $cb->();
- my ($dir) = ($path =~ m!(.+)/(?:[^/]+)\z!);
- -d $dir or die "BUG: dir=$dir is not the dir of $path";
- my $fh = File::Temp->new(DIR => $dir);
- $fh->autoflush(1);
- print $fh $mime->as_string or die "print: $!";
- my $fn = $fh->filename;
- rename($fn, $path) or die "link $fn => $path: $!";
- $fh->unlink_on_destroy(0);
- pop @_; # retry via tail recursion
- goto &mime_load;
- } else {
- die "open $path: $!";
- }
+sub eml_load ($) {
+ my ($path, $cb) = @_;
+ open(my $fh, '<', $path) or die "open $path: $!";
+ binmode $fh;
+ PublicInbox::Eml->new(\(do { local $/; <$fh> }));