aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes/MCDataMac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/basetypes/MCDataMac.mm')
-rw-r--r--src/core/basetypes/MCDataMac.mm16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/core/basetypes/MCDataMac.mm b/src/core/basetypes/MCDataMac.mm
index 8081b1f9..589e8b59 100644
--- a/src/core/basetypes/MCDataMac.mm
+++ b/src/core/basetypes/MCDataMac.mm
@@ -14,9 +14,17 @@ using namespace mailcore;
CFDataRef Data::destructiveNSData()
{
- NSData * result = [NSData dataWithBytesNoCopy:(void *) mBytes length:mLength];
- mBytes = NULL;
- mAllocated = 0;
- mLength = 0;
+ NSData * result;
+ if (mExternallyAllocatedMemory) {
+ BytesDeallocator deallocator = mBytesDeallocator;
+ result = [[[NSData alloc] initWithBytesNoCopy:mBytes length:mLength deallocator:^(void * bytes, NSUInteger length) {
+ if (deallocator) {
+ deallocator((char *)bytes, (unsigned int)length);
+ }
+ }] autorelease];
+ } else {
+ result = [NSData dataWithBytesNoCopy:(void *) mBytes length:mLength];
+ }
+ init();
return (CFDataRef) result;
}