diff options
Diffstat (limited to 'src/core/basetypes/MCDataMac.mm')
-rw-r--r-- | src/core/basetypes/MCDataMac.mm | 16 |
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; } |