aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xbuild-mac/mailcore2.xcodeproj/project.pbxproj6
-rw-r--r--src/cmake/core.cmake1
-rw-r--r--src/core/basetypes/MCData.h7
-rw-r--r--src/core/basetypes/MCDataMac.mm22
-rw-r--r--src/core/rfc822/MCMessageParser.cc6
-rw-r--r--src/core/rfc822/MCMessageParser.h10
-rw-r--r--src/core/rfc822/MCMessageParserMac.mm34
-rw-r--r--src/objc/imap/MCOIMAPFetchContentOperation.mm2
8 files changed, 79 insertions, 9 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj
index e4763f82..23efb138 100755
--- a/build-mac/mailcore2.xcodeproj/project.pbxproj
+++ b/build-mac/mailcore2.xcodeproj/project.pbxproj
@@ -1262,6 +1262,8 @@
C6D4FD3819FA9F57001F7E01 /* MCONNTPFetchServerTimeOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */; };
C6D4FD3F19FB7534001F7E01 /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; };
C6D4FD4019FB7786001F7E01 /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; };
+ C6D4FD4319FB7DAA001F7E01 /* MCDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */; };
+ C6D4FD4419FB7DB2001F7E01 /* MCDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */; };
C6D6F7F9171E595D006F5B28 /* MCJSON.cc in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F7F7171E595D006F5B28 /* MCJSON.cc */; };
C6D6F7FA171E595D006F5B28 /* MCJSON.cc in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F7F7171E595D006F5B28 /* MCJSON.cc */; };
C6D6F954171E5CB8006F5B28 /* MCMD5.cc in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F950171E5CB8006F5B28 /* MCMD5.cc */; };
@@ -2258,6 +2260,7 @@
C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MCO.h"; sourceTree = "<group>"; };
C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSString+MCO.mm"; sourceTree = "<group>"; };
C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCMessageParserMac.mm; sourceTree = "<group>"; };
+ C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCDataMac.mm; sourceTree = "<group>"; };
C6D6F7F7171E595D006F5B28 /* MCJSON.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCJSON.cc; sourceTree = "<group>"; };
C6D6F7F8171E595D006F5B28 /* MCJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCJSON.h; sourceTree = "<group>"; };
C6D6F950171E5CB8006F5B28 /* MCMD5.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCMD5.cc; sourceTree = "<group>"; };
@@ -2809,6 +2812,7 @@
C68B2AF617797389005E61EF /* MCConnectionLoggerUtils.h */,
C64EA6A9169E847800778456 /* MCData.cc */,
C64EA6AA169E847800778456 /* MCData.h */,
+ C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */,
C64EA6AB169E847800778456 /* MCHash.cc */,
C64EA6AC169E847800778456 /* MCHash.h */,
C64EA6AD169E847800778456 /* MCHashMap.cc */,
@@ -4150,6 +4154,7 @@
C64BB23516EDAA17000DB34C /* MCOAbstractMessage.mm in Sources */,
C64BB23916EDAA3F000DB34C /* MCOAbstractMessagePart.mm in Sources */,
C64BB23C16EDAAC7000DB34C /* MCOAbstractMultipart.mm in Sources */,
+ C6D4FD4319FB7DAA001F7E01 /* MCDataMac.mm in Sources */,
C64BB23F16EDAAE1000DB34C /* MCOAbstractPart.mm in Sources */,
C64BB24216EDAAF4000DB34C /* MCOAddress.mm in Sources */,
C64BB24516EDAAFE000DB34C /* MCOMessageHeader.mm in Sources */,
@@ -4387,6 +4392,7 @@
84D73765199BFFC7005124E5 /* MCONNTPSession.mm in Sources */,
C6BA2BF01705F4E6003F0E9E /* MCOAbstractMessage.mm in Sources */,
C6BA2BF11705F4E6003F0E9E /* MCOAbstractMessagePart.mm in Sources */,
+ C6D4FD4419FB7DB2001F7E01 /* MCDataMac.mm in Sources */,
C6BA2BF21705F4E6003F0E9E /* MCOAbstractMultipart.mm in Sources */,
C6BA2BF31705F4E6003F0E9E /* MCOAbstractPart.mm in Sources */,
C6BA2BF41705F4E6003F0E9E /* MCOAddress.mm in Sources */,
diff --git a/src/cmake/core.cmake b/src/cmake/core.cmake
index 59139908..4b0782cf 100644
--- a/src/cmake/core.cmake
+++ b/src/cmake/core.cmake
@@ -14,6 +14,7 @@ IF(APPLE)
core/basetypes/MCAutoreleasePoolMac.mm
core/basetypes/MCMainThread.mm
core/basetypes/MCObjectMac.mm
+ core/basetypes/MCDataMac.mm
core/rfc822/MCMessageParserMac.mm
)
ENDIF()
diff --git a/src/core/basetypes/MCData.h b/src/core/basetypes/MCData.h
index e7363644..131cb722 100644
--- a/src/core/basetypes/MCData.h
+++ b/src/core/basetypes/MCData.h
@@ -5,6 +5,10 @@
#include <MailCore/MCObject.h>
#include <MailCore/MCMessageConstants.h>
+#ifdef __APPLE__
+#import <CoreFoundation/CoreFoundation.h>
+#endif
+
#ifdef __cplusplus
namespace mailcore {
@@ -41,6 +45,9 @@ namespace mailcore {
public: // private
virtual String * charsetWithFilteredHTML(bool filterHTML, String * hintCharset = NULL);
+#ifdef __APPLE__
+ virtual CFDataRef destructiveNSData();
+#endif
public: // subclass behavior
Data(Data * otherData);
diff --git a/src/core/basetypes/MCDataMac.mm b/src/core/basetypes/MCDataMac.mm
new file mode 100644
index 00000000..8081b1f9
--- /dev/null
+++ b/src/core/basetypes/MCDataMac.mm
@@ -0,0 +1,22 @@
+//
+// MCDataMac.m
+// mailcore2
+//
+// Created by Hoa V. DINH on 10/24/14.
+// Copyright (c) 2014 MailCore. All rights reserved.
+//
+
+#include "MCData.h"
+
+#import <Foundation/Foundation.h>
+
+using namespace mailcore;
+
+CFDataRef Data::destructiveNSData()
+{
+ NSData * result = [NSData dataWithBytesNoCopy:(void *) mBytes length:mLength];
+ mBytes = NULL;
+ mAllocated = 0;
+ mLength = 0;
+ return (CFDataRef) result;
+}
diff --git a/src/core/rfc822/MCMessageParser.cc b/src/core/rfc822/MCMessageParser.cc
index f8a25bda..404bc862 100644
--- a/src/core/rfc822/MCMessageParser.cc
+++ b/src/core/rfc822/MCMessageParser.cc
@@ -105,12 +105,12 @@ AbstractPart * MessageParser::mainPart()
Data * MessageParser::data()
{
+#if __APPLE__
if (mNSData != NULL) {
return dataFromNSData();
}
- else {
- return mData;
- }
+#endif
+ return mData;
}
String * MessageParser::description()
diff --git a/src/core/rfc822/MCMessageParser.h b/src/core/rfc822/MCMessageParser.h
index 3b34ab9e..eba0e052 100644
--- a/src/core/rfc822/MCMessageParser.h
+++ b/src/core/rfc822/MCMessageParser.h
@@ -5,8 +5,8 @@
#include <MailCore/MCBaseTypes.h>
#include <MailCore/MCAbstractMessage.h>
#include <MailCore/MCAbstractPart.h>
-#ifdef __OBJC__
-#import <Foundation/Foundation.h>
+#ifdef __APPLE__
+#import <CoreFoundation/CoreFoundation.h>
#endif
#ifdef __cplusplus
@@ -42,10 +42,10 @@ namespace mailcore {
virtual HashMap * serializable();
-#ifdef __OBJC__
+#ifdef __APPLE__
public:
- static MessageParser * messageParserWithData(NSData * data);
- MessageParser(NSData * data);
+ static MessageParser * messageParserWithData(CFDataRef data);
+ MessageParser(CFDataRef data);
#endif
private:
diff --git a/src/core/rfc822/MCMessageParserMac.mm b/src/core/rfc822/MCMessageParserMac.mm
new file mode 100644
index 00000000..6748ed1a
--- /dev/null
+++ b/src/core/rfc822/MCMessageParserMac.mm
@@ -0,0 +1,34 @@
+//
+// MCMessageParserMac.m
+// mailcore2
+//
+// Created by Hoa V. DINH on 10/24/14.
+// Copyright (c) 2014 MailCore. All rights reserved.
+//
+
+#include "MCMessageParser.h"
+
+#import <Foundation/Foundation.h>
+
+#import "NSData+MCO.h"
+
+using namespace mailcore;
+
+MessageParser * MessageParser::messageParserWithData(CFDataRef data)
+{
+ MessageParser * parser = new MessageParser(data);
+ return (MessageParser *) parser->autorelease();
+}
+
+MessageParser::MessageParser(CFDataRef data)
+{
+ init();
+
+ setBytes((char *) [(NSData *) data bytes], (unsigned int) [(NSData *) data length]);
+ mNSData = [(NSData *) data retain];
+}
+
+Data * MessageParser::dataFromNSData()
+{
+ return [(NSData *) mNSData mco_mcData];
+}
diff --git a/src/objc/imap/MCOIMAPFetchContentOperation.mm b/src/objc/imap/MCOIMAPFetchContentOperation.mm
index 791307ca..9ca4c1c4 100644
--- a/src/objc/imap/MCOIMAPFetchContentOperation.mm
+++ b/src/objc/imap/MCOIMAPFetchContentOperation.mm
@@ -61,7 +61,7 @@ typedef void (^CompletionType)(NSError *error, NSData * data);
nativeType *op = MCO_NATIVE_INSTANCE;
if (op->error() == mailcore::ErrorNone) {
- _completionBlock(nil, MCO_TO_OBJC(op->data()));
+ _completionBlock(nil, (NSData *) op->data()->destructiveNSData());
} else {
_completionBlock([NSError mco_errorWithErrorCode:op->error()], nil);
}