This was changed in

commit a52660a646012691f993cca821c00fe05cff08bb
Author: jaredj <jar...@nmgi.com>
Date:   Wed Mar 25 07:38:05 2009 -0500
    Spool body when $transaction->body_fh() is called
    
    Qpsmtpd::Transaction::body_filename() calls $self->body_spool() if
    the message body has not already been spool to disk.  This adds
    the same check to Qpsmtpd::Transaction::body_fh()

but I don't remember the background behind it.  Jared, do you remember
why you changed this?

David Favor wrote:
> 
> Since no one responded to my previous email I've
> combed through the code and found the problem.
> 
> r...@hive1:# git-describe
> v0.84-36-g0b0e4e9
> 
> perldoc lib/Qpsmtpd/Transaction.pm says...
> 
>     body_fh( )
>         Returns the file handle to the temporary file
>         of the email. This will return undef if the file
>         is not opened (yet). In hook_data( ) or later you can
>         force spooling to disk by calling $transaction->body_filename.
> 
> This use to be true and at some point the body_fh() code changed to:
> 
>     sub body_fh {
>         my ($self) = @_;
>         # Spool to disk if we weren't already doing so
>         $self->body_spool() unless $self->{_filename};
>         return $self->{_body_file};
>     }
> 
> Per the documentation this subroutine should be a single line:
> 
>         return $self->{_body_fh};
> 
> Lord knows when this code changed or what other code written
> depends on this change.

See above.

> 
> Suggested fixes:
> 
>     1) Fix the documentation to correctly reflect calling body_fh()
>        is the same as calling body_spool()

This seems straightforward.

> 
>     2) Add a subroutine spooled() which returns 1 if the data is
>        spooled to a file or 0 if in memory

Patch welcome.

-R

Reply via email to