diff --git a/src/kits/mail/Jamfile b/src/kits/mail/Jamfile index 6a5b88ffda..ebcb4ecb6e 100644 --- a/src/kits/mail/Jamfile +++ b/src/kits/mail/Jamfile @@ -5,7 +5,7 @@ SetSubDirSupportedPlatformsBeOSCompatible ; if $(TARGET_PLATFORM) != haiku { UsePublicHeaders mail ; } -UsePrivateHeaders mail ; +UsePrivateHeaders mail shared ; UsePublicHeaders [ FDirName add-ons mail_daemon ] ; if $(CHECK_MALLOC) { diff --git a/src/kits/mail/MailAttachment.cpp b/src/kits/mail/MailAttachment.cpp index 12faa37cda..8e0816bb2f 100644 --- a/src/kits/mail/MailAttachment.cpp +++ b/src/kits/mail/MailAttachment.cpp @@ -15,6 +15,8 @@ #include #include +#include + class _EXPORT BSimpleMailAttachment; class _EXPORT BAttributedMailAttachment; class _EXPORT BMailAttachment; @@ -352,11 +354,13 @@ status_t BSimpleMailAttachment::RenderToRFC822(BPositionIO *render_to) { if (src == NULL) return B_NO_MEMORY; + MemoryDeleter sourceDeleter(src); + _data->Seek(0,SEEK_SET); ssize_t read = _data->Read(src,size); if (read < B_OK) - return read; // Return an error code and leak memory. + return read; // The encoded text will never be more than twice as large with any // conceivable encoding. But just in case, there's a function call which @@ -368,15 +372,15 @@ status_t BSimpleMailAttachment::RenderToRFC822(BPositionIO *render_to) { if (dest == NULL) return B_NO_MEMORY; + MemoryDeleter destinationDeleter(dest); + destSize = encode (_encoding, dest, src, read, false /* headerMode */); - if (destSize < B_OK) { - free(dest); + if (destSize < B_OK) return destSize; - } + if (destSize > 0) read = render_to->Write(dest,destSize); - free (src); - free (dest); + return (read > 0) ? B_OK : read; }