Add dup_body_fh to return a dup'd body FH

It wasn't suitable to dup the body FH returned by plain old
body_fh(), so here's a separate function to return that.

Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
This commit is contained in:
Jared Johnson 2009-06-05 11:21:50 -05:00 committed by Ask Bjørn Hansen
parent 04f8f7dd98
commit 16b4dbcd81

View File

@ -217,6 +217,12 @@ sub body_fh {
return shift->{_body_file}; return shift->{_body_file};
} }
sub dup_body_fh {
my ($self) = @_;
open(my $fh, '<&=', $self->body_fh);
return $fh;
}
sub DESTROY { sub DESTROY {
my $self = shift; my $self = shift;
# would we save some disk flushing if we unlinked the file before # would we save some disk flushing if we unlinked the file before
@ -380,6 +386,13 @@ Returns the file handle to the temporary file of the email. This will return
undef if the file is not opened (yet). In I<hook_data( )> or later you can undef if the file is not opened (yet). In I<hook_data( )> or later you can
force spooling to disk by calling I<$transaction-E<gt>body_filename>. force spooling to disk by calling I<$transaction-E<gt>body_filename>.
=head2 dup_body_fh( )
Returns a dup()'d file handle to the temporary file of the email. This can be
useful if an external module may call close() on the filehandle that is passed
to it. This should only be used for reads, as writing to a dup'd filehandle
may have unintended consequences.
=head1 SEE ALSO =head1 SEE ALSO
L<Mail::Header>, L<Qpsmtpd::Address>, L<Qpsmtpd::Connection> L<Mail::Header>, L<Qpsmtpd::Address>, L<Qpsmtpd::Connection>