From 59fbd86f0f044d1744a40966eeab06c1adfde66e Mon Sep 17 00:00:00 2001 From: xwy Date: Mon, 18 Mar 2019 13:33:51 +0800 Subject: [PATCH 01/15] fix decodebytes bug --- Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp index 44a8c067..11b3f379 100644 --- a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp @@ -477,8 +477,8 @@ extern "C" JNIEXPORT JNICALL jbyteArray Java_com_tencent_mmkv_MMKV_decodeBytes(J if (kv && oKey) { string key = jstring2string(env, oKey); MMBuffer value = kv->getBytesForKey(key); - jbyteArray result = env->NewByteArray(value.length()); - if (result) { + if (value.length() > 0){ + jbyteArray result = env->NewByteArray(value.length()); env->SetByteArrayRegion(result, 0, value.length(), (const jbyte *) value.getPtr()); return result; } From 3b2ecbe26ccb1c47fe5383060df537d4891f5ba4 Mon Sep 17 00:00:00 2001 From: guoling Date: Thu, 21 Mar 2019 10:54:49 +0800 Subject: [PATCH 02/15] pod_target_xcconfig --- MMKV.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MMKV.podspec b/MMKV.podspec index 0771ea4e..785285a1 100644 --- a/MMKV.podspec +++ b/MMKV.podspec @@ -25,7 +25,7 @@ Pod::Spec.new do |s| s.ios.frameworks = "UIKit" s.libraries = "z", "c++" s.requires_arc = true - s.xcconfig = { + s.pod_target_xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => "gnu++17", "CLANG_CXX_LIBRARY" => "libc++", "CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF" => "NO", From ef4be36b1faf842a9a093aa0db3fc9c7bab36251 Mon Sep 17 00:00:00 2001 From: guoling Date: Fri, 22 Mar 2019 14:53:05 +0800 Subject: [PATCH 03/15] make sure DEFAULT_MMAP_SIZE is inited --- Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp | 2 +- iOS/MMKV/MMKV/MMKV.mm | 3 +++ iOS/MMKV/MMKV/MemoryFile.h | 2 +- iOS/MMKV/MMKV/MemoryFile.mm | 1 - 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp index 11b3f379..9d2dc654 100644 --- a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp @@ -477,7 +477,7 @@ extern "C" JNIEXPORT JNICALL jbyteArray Java_com_tencent_mmkv_MMKV_decodeBytes(J if (kv && oKey) { string key = jstring2string(env, oKey); MMBuffer value = kv->getBytesForKey(key); - if (value.length() > 0){ + if (value.length() > 0) { jbyteArray result = env->NewByteArray(value.length()); env->SetByteArrayRegion(result, 0, value.length(), (const jbyte *) value.getPtr()); return result; diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index 20de7b92..b35a38c3 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -44,6 +44,8 @@ id g_callbackHandler; bool g_isLogRedirecting = false; +int DEFAULT_MMAP_SIZE; + #define DEFAULT_MMAP_ID @"mmkv.default" #define CRC_FILE_SIZE DEFAULT_MMAP_SIZE #define SPECIAL_CHARACTER_DIRECTORY_NAME @"specialCharacter" @@ -80,6 +82,7 @@ + (void)initialize { g_instanceDic = [NSMutableDictionary dictionary]; g_instanceLock = [[NSRecursiveLock alloc] init]; + DEFAULT_MMAP_SIZE = getpagesize(); MMKVInfo(@"pagesize:%d", DEFAULT_MMAP_SIZE); } } diff --git a/iOS/MMKV/MMKV/MemoryFile.h b/iOS/MMKV/MMKV/MemoryFile.h index ff7018c0..32f7a98d 100644 --- a/iOS/MMKV/MMKV/MemoryFile.h +++ b/iOS/MMKV/MMKV/MemoryFile.h @@ -24,7 +24,7 @@ #import "LRUCache.hpp" #import -extern const int DEFAULT_MMAP_SIZE; +extern int DEFAULT_MMAP_SIZE; class MemoryFile { NSString *m_name; diff --git a/iOS/MMKV/MMKV/MemoryFile.mm b/iOS/MMKV/MMKV/MemoryFile.mm index e055808d..f0d192f4 100644 --- a/iOS/MMKV/MMKV/MemoryFile.mm +++ b/iOS/MMKV/MMKV/MemoryFile.mm @@ -30,7 +30,6 @@ using namespace std; -const int DEFAULT_MMAP_SIZE = getpagesize(); // 1MB per segment constexpr uint32_t SegmentSize = 1024 * 1024; // count of segments in memory From 7f2949d81cc4cdcb6023be89ae75f87d8d72d08c Mon Sep 17 00:00:00 2001 From: guoling Date: Fri, 22 Mar 2019 16:17:25 +0800 Subject: [PATCH 04/15] rename openssl files --- iOS/MMKV/MMKV.xcodeproj/project.pbxproj | 116 +++++++++--------- iOS/MMKV/MMKV/MMKV.mm | 2 +- iOS/MMKV/MMKV/aes/AESCrypt.h | 2 +- iOS/MMKV/MMKV/aes/AESCrypt.mm | 2 +- .../MMKV/aes/openssl/{aes.h => openssl_aes.h} | 2 +- .../{aes_cfb.cpp => openssl_aes_cfb.cpp} | 4 +- .../{aes_core.cpp => openssl_aes_core.cpp} | 4 +- .../{aes_locl.h => openssl_aes_locl.h} | 2 +- .../{cfb128.cpp => openssl_cfb128.cpp} | 4 +- .../{md32_common.h => openssl_md32_common.h} | 0 .../MMKV/aes/openssl/{md5.h => openssl_md5.h} | 2 +- .../{md5_dgst.cpp => openssl_md5_dgst.cpp} | 2 +- .../{md5_locl.h => openssl_md5_locl.h} | 4 +- .../{md5_one.cpp => openssl_md5_one.cpp} | 2 +- .../aes/openssl/{modes.h => openssl_modes.h} | 0 .../{opensslconf.h => openssl_opensslconf.h} | 0 16 files changed, 74 insertions(+), 74 deletions(-) rename iOS/MMKV/MMKV/aes/openssl/{aes.h => openssl_aes.h} (97%) rename iOS/MMKV/MMKV/aes/openssl/{aes_cfb.cpp => openssl_aes_cfb.cpp} (94%) rename iOS/MMKV/MMKV/aes/openssl/{aes_core.cpp => openssl_aes_core.cpp} (99%) rename iOS/MMKV/MMKV/aes/openssl/{aes_locl.h => openssl_aes_locl.h} (97%) rename iOS/MMKV/MMKV/aes/openssl/{cfb128.cpp => openssl_cfb128.cpp} (98%) rename iOS/MMKV/MMKV/aes/openssl/{md32_common.h => openssl_md32_common.h} (100%) rename iOS/MMKV/MMKV/aes/openssl/{md5.h => openssl_md5.h} (97%) rename iOS/MMKV/MMKV/aes/openssl/{md5_dgst.cpp => openssl_md5_dgst.cpp} (99%) rename iOS/MMKV/MMKV/aes/openssl/{md5_locl.h => openssl_md5_locl.h} (97%) rename iOS/MMKV/MMKV/aes/openssl/{md5_one.cpp => openssl_md5_one.cpp} (96%) rename iOS/MMKV/MMKV/aes/openssl/{modes.h => openssl_modes.h} (100%) rename iOS/MMKV/MMKV/aes/openssl/{opensslconf.h => openssl_opensslconf.h} (100%) diff --git a/iOS/MMKV/MMKV.xcodeproj/project.pbxproj b/iOS/MMKV/MMKV.xcodeproj/project.pbxproj index 0e3699ed..5ee413a8 100644 --- a/iOS/MMKV/MMKV.xcodeproj/project.pbxproj +++ b/iOS/MMKV/MMKV.xcodeproj/project.pbxproj @@ -15,16 +15,6 @@ CB1FD4C620469B8800931B5F /* MiniPBCoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB1FD4C220469B8800931B5F /* MiniPBCoder.mm */; }; CB1FD4CD2046ACBC00931B5F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB1FD4CC2046ACBC00931B5F /* Foundation.framework */; }; CB6DEFA9212E6F010024F0E8 /* AESCrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6DEF9F212E6F010024F0E8 /* AESCrypt.h */; }; - CB6DEFAA212E6F010024F0E8 /* opensslconf.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6DEFA1212E6F010024F0E8 /* opensslconf.h */; }; - CB6DEFAB212E6F010024F0E8 /* cfb128.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA2212E6F010024F0E8 /* cfb128.cpp */; }; - CB6DEFAC212E6F010024F0E8 /* cfb128.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA2212E6F010024F0E8 /* cfb128.cpp */; }; - CB6DEFAD212E6F010024F0E8 /* aes_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA3212E6F010024F0E8 /* aes_core.cpp */; }; - CB6DEFAE212E6F010024F0E8 /* aes_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA3212E6F010024F0E8 /* aes_core.cpp */; }; - CB6DEFAF212E6F010024F0E8 /* aes_cfb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA4212E6F010024F0E8 /* aes_cfb.cpp */; }; - CB6DEFB0212E6F010024F0E8 /* aes_cfb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA4212E6F010024F0E8 /* aes_cfb.cpp */; }; - CB6DEFB1212E6F010024F0E8 /* aes.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6DEFA5212E6F010024F0E8 /* aes.h */; }; - CB6DEFB2212E6F010024F0E8 /* modes.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6DEFA6212E6F010024F0E8 /* modes.h */; }; - CB6DEFB3212E6F010024F0E8 /* aes_locl.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6DEFA7212E6F010024F0E8 /* aes_locl.h */; }; CB6DEFB4212E6F010024F0E8 /* AESCrypt.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA8212E6F010024F0E8 /* AESCrypt.mm */; }; CB6DEFB5212E6F010024F0E8 /* AESCrypt.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB6DEFA8212E6F010024F0E8 /* AESCrypt.mm */; }; CB865F5620FF33F600427B9D /* MemoryFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB865F5420FF33F600427B9D /* MemoryFile.mm */; }; @@ -41,15 +31,25 @@ CBC1A90420DA94A000AD5087 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = CBC1A90320DA94A000AD5087 /* libz.tbd */; }; CBC1A90620DA94B900AD5087 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB1FD4CC2046ACBC00931B5F /* Foundation.framework */; }; CBC1A90C20DA97DF00AD5087 /* MMKV.h in Headers */ = {isa = PBXBuildFile; fileRef = CB1FD4942046984F00931B5F /* MMKV.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBD1A8F72244CE6B00BCC0F3 /* openssl_aes_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8EB2244CE6B00BCC0F3 /* openssl_aes_core.cpp */; }; + CBD1A8F82244CE6B00BCC0F3 /* openssl_aes_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8EB2244CE6B00BCC0F3 /* openssl_aes_core.cpp */; }; + CBD1A8F92244CE6B00BCC0F3 /* openssl_aes_cfb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8EC2244CE6B00BCC0F3 /* openssl_aes_cfb.cpp */; }; + CBD1A8FA2244CE6B00BCC0F3 /* openssl_aes_cfb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8EC2244CE6B00BCC0F3 /* openssl_aes_cfb.cpp */; }; + CBD1A8FB2244CE6B00BCC0F3 /* openssl_md5_one.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8ED2244CE6B00BCC0F3 /* openssl_md5_one.cpp */; }; + CBD1A8FC2244CE6B00BCC0F3 /* openssl_md5_one.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8ED2244CE6B00BCC0F3 /* openssl_md5_one.cpp */; }; + CBD1A8FD2244CE6B00BCC0F3 /* openssl_opensslconf.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD1A8EE2244CE6B00BCC0F3 /* openssl_opensslconf.h */; }; + CBD1A8FE2244CE6B00BCC0F3 /* openssl_cfb128.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8EF2244CE6B00BCC0F3 /* openssl_cfb128.cpp */; }; + CBD1A8FF2244CE6B00BCC0F3 /* openssl_cfb128.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8EF2244CE6B00BCC0F3 /* openssl_cfb128.cpp */; }; + CBD1A9002244CE6B00BCC0F3 /* openssl_modes.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD1A8F02244CE6B00BCC0F3 /* openssl_modes.h */; }; + CBD1A9012244CE6B00BCC0F3 /* openssl_aes_locl.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD1A8F12244CE6B00BCC0F3 /* openssl_aes_locl.h */; }; + CBD1A9022244CE6B00BCC0F3 /* openssl_md5.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD1A8F22244CE6B00BCC0F3 /* openssl_md5.h */; }; + CBD1A9032244CE6B00BCC0F3 /* openssl_md5_dgst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8F32244CE6B00BCC0F3 /* openssl_md5_dgst.cpp */; }; + CBD1A9042244CE6B00BCC0F3 /* openssl_md5_dgst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBD1A8F32244CE6B00BCC0F3 /* openssl_md5_dgst.cpp */; }; + CBD1A9052244CE6B00BCC0F3 /* openssl_md5_locl.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD1A8F42244CE6B00BCC0F3 /* openssl_md5_locl.h */; }; + CBD1A9062244CE6B00BCC0F3 /* openssl_md32_common.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD1A8F52244CE6B00BCC0F3 /* openssl_md32_common.h */; }; + CBD1A9072244CE6B00BCC0F3 /* openssl_aes.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD1A8F62244CE6B00BCC0F3 /* openssl_aes.h */; }; CBDF32902192C0000028DB4D /* MMKVHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = CBDF328F2192C0000028DB4D /* MMKVHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; CBDF32912192C0340028DB4D /* MMKVHandler.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CBDF328F2192C0000028DB4D /* MMKVHandler.h */; }; - CBF00476217DD7D0001BB3ED /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = CBF00471217DD7D0001BB3ED /* md5.h */; }; - CBF00477217DD7D0001BB3ED /* md32_common.h in Headers */ = {isa = PBXBuildFile; fileRef = CBF00472217DD7D0001BB3ED /* md32_common.h */; }; - CBF00478217DD7D0001BB3ED /* md5_dgst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBF00473217DD7D0001BB3ED /* md5_dgst.cpp */; }; - CBF00479217DD7D0001BB3ED /* md5_dgst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBF00473217DD7D0001BB3ED /* md5_dgst.cpp */; }; - CBF0047A217DD7D0001BB3ED /* md5_one.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBF00474217DD7D0001BB3ED /* md5_one.cpp */; }; - CBF0047B217DD7D0001BB3ED /* md5_one.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBF00474217DD7D0001BB3ED /* md5_one.cpp */; }; - CBF0047C217DD7D0001BB3ED /* md5_locl.h in Headers */ = {isa = PBXBuildFile; fileRef = CBF00475217DD7D0001BB3ED /* md5_locl.h */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -83,13 +83,6 @@ CB1FD4CE2046ACC100931B5F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; CB1FD5152049382F00931B5F /* ScopedLock.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ScopedLock.hpp; sourceTree = ""; }; CB6DEF9F212E6F010024F0E8 /* AESCrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AESCrypt.h; sourceTree = ""; }; - CB6DEFA1212E6F010024F0E8 /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = ""; }; - CB6DEFA2212E6F010024F0E8 /* cfb128.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfb128.cpp; sourceTree = ""; }; - CB6DEFA3212E6F010024F0E8 /* aes_core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aes_core.cpp; sourceTree = ""; }; - CB6DEFA4212E6F010024F0E8 /* aes_cfb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aes_cfb.cpp; sourceTree = ""; }; - CB6DEFA5212E6F010024F0E8 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; - CB6DEFA6212E6F010024F0E8 /* modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modes.h; sourceTree = ""; }; - CB6DEFA7212E6F010024F0E8 /* aes_locl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes_locl.h; sourceTree = ""; }; CB6DEFA8212E6F010024F0E8 /* AESCrypt.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AESCrypt.mm; sourceTree = ""; }; CB865F5420FF33F600427B9D /* MemoryFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MemoryFile.mm; sourceTree = ""; }; CB865F5520FF33F600427B9D /* MemoryFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MemoryFile.h; sourceTree = ""; }; @@ -99,12 +92,19 @@ CBC1A8F620DA946200AD5087 /* MMKV.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MMKV.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CBC1A90320DA94A000AD5087 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; CBC1A90A20DA95E100AD5087 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CBD1A8EB2244CE6B00BCC0F3 /* openssl_aes_core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = openssl_aes_core.cpp; sourceTree = ""; }; + CBD1A8EC2244CE6B00BCC0F3 /* openssl_aes_cfb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = openssl_aes_cfb.cpp; sourceTree = ""; }; + CBD1A8ED2244CE6B00BCC0F3 /* openssl_md5_one.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = openssl_md5_one.cpp; sourceTree = ""; }; + CBD1A8EE2244CE6B00BCC0F3 /* openssl_opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = openssl_opensslconf.h; sourceTree = ""; }; + CBD1A8EF2244CE6B00BCC0F3 /* openssl_cfb128.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = openssl_cfb128.cpp; sourceTree = ""; }; + CBD1A8F02244CE6B00BCC0F3 /* openssl_modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = openssl_modes.h; sourceTree = ""; }; + CBD1A8F12244CE6B00BCC0F3 /* openssl_aes_locl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = openssl_aes_locl.h; sourceTree = ""; }; + CBD1A8F22244CE6B00BCC0F3 /* openssl_md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = openssl_md5.h; sourceTree = ""; }; + CBD1A8F32244CE6B00BCC0F3 /* openssl_md5_dgst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = openssl_md5_dgst.cpp; sourceTree = ""; }; + CBD1A8F42244CE6B00BCC0F3 /* openssl_md5_locl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = openssl_md5_locl.h; sourceTree = ""; }; + CBD1A8F52244CE6B00BCC0F3 /* openssl_md32_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = openssl_md32_common.h; sourceTree = ""; }; + CBD1A8F62244CE6B00BCC0F3 /* openssl_aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = openssl_aes.h; sourceTree = ""; }; CBDF328F2192C0000028DB4D /* MMKVHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MMKVHandler.h; sourceTree = ""; }; - CBF00471217DD7D0001BB3ED /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; - CBF00472217DD7D0001BB3ED /* md32_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md32_common.h; sourceTree = ""; }; - CBF00473217DD7D0001BB3ED /* md5_dgst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = md5_dgst.cpp; sourceTree = ""; }; - CBF00474217DD7D0001BB3ED /* md5_one.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = md5_one.cpp; sourceTree = ""; }; - CBF00475217DD7D0001BB3ED /* md5_locl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5_locl.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -196,18 +196,18 @@ CB6DEFA0212E6F010024F0E8 /* openssl */ = { isa = PBXGroup; children = ( - CB6DEFA4212E6F010024F0E8 /* aes_cfb.cpp */, - CB6DEFA3212E6F010024F0E8 /* aes_core.cpp */, - CB6DEFA7212E6F010024F0E8 /* aes_locl.h */, - CB6DEFA5212E6F010024F0E8 /* aes.h */, - CB6DEFA2212E6F010024F0E8 /* cfb128.cpp */, - CBF00473217DD7D0001BB3ED /* md5_dgst.cpp */, - CBF00475217DD7D0001BB3ED /* md5_locl.h */, - CBF00474217DD7D0001BB3ED /* md5_one.cpp */, - CBF00471217DD7D0001BB3ED /* md5.h */, - CBF00472217DD7D0001BB3ED /* md32_common.h */, - CB6DEFA6212E6F010024F0E8 /* modes.h */, - CB6DEFA1212E6F010024F0E8 /* opensslconf.h */, + CBD1A8EC2244CE6B00BCC0F3 /* openssl_aes_cfb.cpp */, + CBD1A8EB2244CE6B00BCC0F3 /* openssl_aes_core.cpp */, + CBD1A8F12244CE6B00BCC0F3 /* openssl_aes_locl.h */, + CBD1A8F62244CE6B00BCC0F3 /* openssl_aes.h */, + CBD1A8EF2244CE6B00BCC0F3 /* openssl_cfb128.cpp */, + CBD1A8F32244CE6B00BCC0F3 /* openssl_md5_dgst.cpp */, + CBD1A8F42244CE6B00BCC0F3 /* openssl_md5_locl.h */, + CBD1A8ED2244CE6B00BCC0F3 /* openssl_md5_one.cpp */, + CBD1A8F22244CE6B00BCC0F3 /* openssl_md5.h */, + CBD1A8F52244CE6B00BCC0F3 /* openssl_md32_common.h */, + CBD1A8F02244CE6B00BCC0F3 /* openssl_modes.h */, + CBD1A8EE2244CE6B00BCC0F3 /* openssl_opensslconf.h */, ); path = openssl; sourceTree = ""; @@ -227,18 +227,18 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + CBD1A9052244CE6B00BCC0F3 /* openssl_md5_locl.h in Headers */, CBDF32902192C0000028DB4D /* MMKVHandler.h in Headers */, - CBF0047C217DD7D0001BB3ED /* md5_locl.h in Headers */, - CBF00476217DD7D0001BB3ED /* md5.h in Headers */, - CB6DEFB1212E6F010024F0E8 /* aes.h in Headers */, - CB6DEFB2212E6F010024F0E8 /* modes.h in Headers */, - CB6DEFB3212E6F010024F0E8 /* aes_locl.h in Headers */, CB8FB92E2100C52F00CC523D /* LRUCache.hpp in Headers */, + CBD1A9022244CE6B00BCC0F3 /* openssl_md5.h in Headers */, + CBD1A8FD2244CE6B00BCC0F3 /* openssl_opensslconf.h in Headers */, CBC1A90C20DA97DF00AD5087 /* MMKV.h in Headers */, - CB6DEFAA212E6F010024F0E8 /* opensslconf.h in Headers */, - CBF00477217DD7D0001BB3ED /* md32_common.h in Headers */, CB865F5820FF33F600427B9D /* MemoryFile.h in Headers */, + CBD1A9012244CE6B00BCC0F3 /* openssl_aes_locl.h in Headers */, CB6DEFA9212E6F010024F0E8 /* AESCrypt.h in Headers */, + CBD1A9062244CE6B00BCC0F3 /* openssl_md32_common.h in Headers */, + CBD1A9002244CE6B00BCC0F3 /* openssl_modes.h in Headers */, + CBD1A9072244CE6B00BCC0F3 /* openssl_aes.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -332,18 +332,18 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + CBD1A8FE2244CE6B00BCC0F3 /* openssl_cfb128.cpp in Sources */, CB1FD4C320469B8800931B5F /* MiniCodedOutputData.mm in Sources */, CB8FD91C21F1B8C10005EE8F /* MMKVLog.mm in Sources */, - CB6DEFAB212E6F010024F0E8 /* cfb128.cpp in Sources */, - CB6DEFAF212E6F010024F0E8 /* aes_cfb.cpp in Sources */, CB1FD4962046984F00931B5F /* MMKV.mm in Sources */, CB1FD4C520469B8800931B5F /* MiniPBUtility.mm in Sources */, - CB6DEFAD212E6F010024F0E8 /* aes_core.cpp in Sources */, + CBD1A8F92244CE6B00BCC0F3 /* openssl_aes_cfb.cpp in Sources */, CB1FD4C420469B8800931B5F /* MiniCodedInputData.mm in Sources */, + CBD1A9032244CE6B00BCC0F3 /* openssl_md5_dgst.cpp in Sources */, CB865F5620FF33F600427B9D /* MemoryFile.mm in Sources */, - CBF00478217DD7D0001BB3ED /* md5_dgst.cpp in Sources */, - CBF0047A217DD7D0001BB3ED /* md5_one.cpp in Sources */, + CBD1A8FB2244CE6B00BCC0F3 /* openssl_md5_one.cpp in Sources */, CB6DEFB4212E6F010024F0E8 /* AESCrypt.mm in Sources */, + CBD1A8F72244CE6B00BCC0F3 /* openssl_aes_core.cpp in Sources */, CB1FD4C620469B8800931B5F /* MiniPBCoder.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -352,18 +352,18 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + CBD1A8FF2244CE6B00BCC0F3 /* openssl_cfb128.cpp in Sources */, CBC1A8FE20DA948A00AD5087 /* MiniCodedInputData.mm in Sources */, CB8FD91D21F1B8C10005EE8F /* MMKVLog.mm in Sources */, - CB6DEFAC212E6F010024F0E8 /* cfb128.cpp in Sources */, - CB6DEFB0212E6F010024F0E8 /* aes_cfb.cpp in Sources */, CBC1A8FF20DA948A00AD5087 /* MiniCodedOutputData.mm in Sources */, CBC1A90020DA948A00AD5087 /* MiniPBCoder.mm in Sources */, - CB6DEFAE212E6F010024F0E8 /* aes_core.cpp in Sources */, + CBD1A8FA2244CE6B00BCC0F3 /* openssl_aes_cfb.cpp in Sources */, CBC1A90120DA948A00AD5087 /* MiniPBUtility.mm in Sources */, + CBD1A9042244CE6B00BCC0F3 /* openssl_md5_dgst.cpp in Sources */, CB865F5720FF33F600427B9D /* MemoryFile.mm in Sources */, - CBF00479217DD7D0001BB3ED /* md5_dgst.cpp in Sources */, - CBF0047B217DD7D0001BB3ED /* md5_one.cpp in Sources */, + CBD1A8FC2244CE6B00BCC0F3 /* openssl_md5_one.cpp in Sources */, CB6DEFB5212E6F010024F0E8 /* AESCrypt.mm in Sources */, + CBD1A8F82244CE6B00BCC0F3 /* openssl_aes_core.cpp in Sources */, CBC1A90220DA948A00AD5087 /* MMKV.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index b35a38c3..f74bbfb7 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -32,7 +32,7 @@ #import #endif -#include "aes/openssl/md5.h" +#include "aes/openssl/openssl_md5.h" #import #import #import diff --git a/iOS/MMKV/MMKV/aes/AESCrypt.h b/iOS/MMKV/MMKV/aes/AESCrypt.h index ea481f6c..ac10a221 100644 --- a/iOS/MMKV/MMKV/aes/AESCrypt.h +++ b/iOS/MMKV/MMKV/aes/AESCrypt.h @@ -21,7 +21,7 @@ #ifndef AES_CRYPT_H_ #define AES_CRYPT_H_ -#include "openssl/aes.h" +#include "openssl/openssl_aes.h" #include constexpr size_t AES_KEY_LEN = 16; diff --git a/iOS/MMKV/MMKV/aes/AESCrypt.mm b/iOS/MMKV/MMKV/aes/AESCrypt.mm index 5e857fee..4d62140a 100644 --- a/iOS/MMKV/MMKV/aes/AESCrypt.mm +++ b/iOS/MMKV/MMKV/aes/AESCrypt.mm @@ -20,7 +20,7 @@ #include "AESCrypt.h" #include "MMKVLog.h" -#include "openssl/aes.h" +#include "openssl/openssl_aes.h" #include #include diff --git a/iOS/MMKV/MMKV/aes/openssl/aes.h b/iOS/MMKV/MMKV/aes/openssl/openssl_aes.h similarity index 97% rename from iOS/MMKV/MMKV/aes/openssl/aes.h rename to iOS/MMKV/MMKV/aes/openssl/openssl_aes.h index b671f614..eccad90c 100644 --- a/iOS/MMKV/MMKV/aes/openssl/aes.h +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_aes.h @@ -10,7 +10,7 @@ #ifndef HEADER_AES_H # define HEADER_AES_H -# include "opensslconf.h" +# include "openssl_opensslconf.h" # include diff --git a/iOS/MMKV/MMKV/aes/openssl/aes_cfb.cpp b/iOS/MMKV/MMKV/aes/openssl/openssl_aes_cfb.cpp similarity index 94% rename from iOS/MMKV/MMKV/aes/openssl/aes_cfb.cpp rename to iOS/MMKV/MMKV/aes/openssl/openssl_aes_cfb.cpp index 23fe8019..bdf8601e 100644 --- a/iOS/MMKV/MMKV/aes/openssl/aes_cfb.cpp +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_aes_cfb.cpp @@ -7,8 +7,8 @@ * https://www.openssl.org/source/license.html */ -#include "aes.h" -#include "modes.h" +#include "openssl_aes.h" +#include "openssl_modes.h" /* * The input and output encrypted as though 128bit cfb mode is being used. diff --git a/iOS/MMKV/MMKV/aes/openssl/aes_core.cpp b/iOS/MMKV/MMKV/aes/openssl/openssl_aes_core.cpp similarity index 99% rename from iOS/MMKV/MMKV/aes/openssl/aes_core.cpp rename to iOS/MMKV/MMKV/aes/openssl/openssl_aes_core.cpp index 4505aada..777dab29 100644 --- a/iOS/MMKV/MMKV/aes/openssl/aes_core.cpp +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_aes_core.cpp @@ -39,8 +39,8 @@ #include #include -#include "aes.h" -#include "aes_locl.h" +#include "openssl_aes.h" +#include "openssl_aes_locl.h" namespace openssl { diff --git a/iOS/MMKV/MMKV/aes/openssl/aes_locl.h b/iOS/MMKV/MMKV/aes/openssl/openssl_aes_locl.h similarity index 97% rename from iOS/MMKV/MMKV/aes/openssl/aes_locl.h rename to iOS/MMKV/MMKV/aes/openssl/openssl_aes_locl.h index 38b98ed7..1f259612 100644 --- a/iOS/MMKV/MMKV/aes/openssl/aes_locl.h +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_aes_locl.h @@ -10,7 +10,7 @@ #ifndef HEADER_AES_LOCL_H # define HEADER_AES_LOCL_H -# include "opensslconf.h" +# include "openssl_opensslconf.h" # include # include # include diff --git a/iOS/MMKV/MMKV/aes/openssl/cfb128.cpp b/iOS/MMKV/MMKV/aes/openssl/openssl_cfb128.cpp similarity index 98% rename from iOS/MMKV/MMKV/aes/openssl/cfb128.cpp rename to iOS/MMKV/MMKV/aes/openssl/openssl_cfb128.cpp index 019e28bf..0b0192fb 100644 --- a/iOS/MMKV/MMKV/aes/openssl/cfb128.cpp +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_cfb128.cpp @@ -7,8 +7,8 @@ * https://www.openssl.org/source/license.html */ -#include "aes.h" -#include "modes.h" +#include "openssl_aes.h" +#include "openssl_modes.h" #include namespace openssl { diff --git a/iOS/MMKV/MMKV/aes/openssl/md32_common.h b/iOS/MMKV/MMKV/aes/openssl/openssl_md32_common.h similarity index 100% rename from iOS/MMKV/MMKV/aes/openssl/md32_common.h rename to iOS/MMKV/MMKV/aes/openssl/openssl_md32_common.h diff --git a/iOS/MMKV/MMKV/aes/openssl/md5.h b/iOS/MMKV/MMKV/aes/openssl/openssl_md5.h similarity index 97% rename from iOS/MMKV/MMKV/aes/openssl/md5.h rename to iOS/MMKV/MMKV/aes/openssl/openssl_md5.h index a94893f6..687fa78a 100755 --- a/iOS/MMKV/MMKV/aes/openssl/md5.h +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_md5.h @@ -10,7 +10,7 @@ #ifndef HEADER_MD5_H # define HEADER_MD5_H -# include "opensslconf.h" +# include "openssl_opensslconf.h" # ifndef OPENSSL_NO_MD5 # include diff --git a/iOS/MMKV/MMKV/aes/openssl/md5_dgst.cpp b/iOS/MMKV/MMKV/aes/openssl/openssl_md5_dgst.cpp similarity index 99% rename from iOS/MMKV/MMKV/aes/openssl/md5_dgst.cpp rename to iOS/MMKV/MMKV/aes/openssl/openssl_md5_dgst.cpp index c76d41a1..ba5bf309 100755 --- a/iOS/MMKV/MMKV/aes/openssl/md5_dgst.cpp +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_md5_dgst.cpp @@ -8,7 +8,7 @@ */ #include -#include "md5_locl.h" +#include "openssl_md5_locl.h" namespace openssl { /* diff --git a/iOS/MMKV/MMKV/aes/openssl/md5_locl.h b/iOS/MMKV/MMKV/aes/openssl/openssl_md5_locl.h similarity index 97% rename from iOS/MMKV/MMKV/aes/openssl/md5_locl.h rename to iOS/MMKV/MMKV/aes/openssl/openssl_md5_locl.h index d20eaed7..73f7fc11 100755 --- a/iOS/MMKV/MMKV/aes/openssl/md5_locl.h +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_md5_locl.h @@ -9,7 +9,7 @@ #include #include -#include "md5.h" +#include "openssl_md5.h" namespace openssl { @@ -32,7 +32,7 @@ void md5_block_data_order(MD5_CTX *c, const void *p, size_t num); } while (0) #define HASH_BLOCK_DATA_ORDER md5_block_data_order -#include "md32_common.h" +#include "openssl_md32_common.h" /*- #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z))) diff --git a/iOS/MMKV/MMKV/aes/openssl/md5_one.cpp b/iOS/MMKV/MMKV/aes/openssl/openssl_md5_one.cpp similarity index 96% rename from iOS/MMKV/MMKV/aes/openssl/md5_one.cpp rename to iOS/MMKV/MMKV/aes/openssl/openssl_md5_one.cpp index 12278ef5..e986fb3a 100755 --- a/iOS/MMKV/MMKV/aes/openssl/md5_one.cpp +++ b/iOS/MMKV/MMKV/aes/openssl/openssl_md5_one.cpp @@ -9,7 +9,7 @@ #include #include -#include "md5.h" +#include "openssl_md5.h" namespace openssl { diff --git a/iOS/MMKV/MMKV/aes/openssl/modes.h b/iOS/MMKV/MMKV/aes/openssl/openssl_modes.h similarity index 100% rename from iOS/MMKV/MMKV/aes/openssl/modes.h rename to iOS/MMKV/MMKV/aes/openssl/openssl_modes.h diff --git a/iOS/MMKV/MMKV/aes/openssl/opensslconf.h b/iOS/MMKV/MMKV/aes/openssl/openssl_opensslconf.h similarity index 100% rename from iOS/MMKV/MMKV/aes/openssl/opensslconf.h rename to iOS/MMKV/MMKV/aes/openssl/openssl_opensslconf.h From 00584852df20853317fa4f4c40e578597d6e61c3 Mon Sep 17 00:00:00 2001 From: guoling Date: Mon, 25 Mar 2019 16:02:33 +0800 Subject: [PATCH 05/15] fix warning --- Android/MMKV/mmkv/src/main/cpp/MMKVLog.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Android/MMKV/mmkv/src/main/cpp/MMKVLog.cpp b/Android/MMKV/mmkv/src/main/cpp/MMKVLog.cpp index 85550e80..084238bb 100644 --- a/Android/MMKV/mmkv/src/main/cpp/MMKVLog.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/MMKVLog.cpp @@ -65,11 +65,12 @@ void _MMKVLogWithLevel( if (length < 0) { // something wrong message = {}; } else if (length < sizeof(buffer)) { - message = string(buffer, length); + message = string(buffer, static_cast(length)); } else { - message.resize(length, '\0'); + message.resize(static_cast(length), '\0'); va_start(args, format); - std::vsnprintf(message.data(), length + 1, format, args); + std::vsnprintf(const_cast(message.data()), static_cast(length) + 1, + format, args); va_end(args); } From 34a769b17bbcd95fd1814baaa556c27b3ec1e7b6 Mon Sep 17 00:00:00 2001 From: guoling Date: Thu, 28 Mar 2019 10:44:06 +0800 Subject: [PATCH 06/15] Swift 5 --- iOS/MMKV/MMKV.xcodeproj/project.pbxproj | 1 + iOS/MMKVDemo/MMKVDemo.xcodeproj/project.pbxproj | 8 +++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/iOS/MMKV/MMKV.xcodeproj/project.pbxproj b/iOS/MMKV/MMKV.xcodeproj/project.pbxproj index 5ee413a8..c8dcd4fd 100644 --- a/iOS/MMKV/MMKV.xcodeproj/project.pbxproj +++ b/iOS/MMKV/MMKV.xcodeproj/project.pbxproj @@ -305,6 +305,7 @@ hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = CB1FD4882046984F00931B5F; productRefGroup = CB1FD4922046984F00931B5F /* Products */; diff --git a/iOS/MMKVDemo/MMKVDemo.xcodeproj/project.pbxproj b/iOS/MMKVDemo/MMKVDemo.xcodeproj/project.pbxproj index ccfb2237..2de036c5 100644 --- a/iOS/MMKVDemo/MMKVDemo.xcodeproj/project.pbxproj +++ b/iOS/MMKVDemo/MMKVDemo.xcodeproj/project.pbxproj @@ -278,7 +278,7 @@ TargetAttributes = { CB1FD41F20455E2D00931B5F = { CreatedOnToolsVersion = 9.2; - LastSwiftMigration = ""; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; CB36F24820F8A20C009AF46F = { @@ -566,8 +566,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "MMKVDemo/MMKVDemo-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = arm64; }; @@ -587,8 +586,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.lingol.MMKVDemo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "MMKVDemo/MMKVDemo-Bridging-Header.h"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = arm64; }; From f12c654c8a6fb8ddb5a3f80d2fd2a15c0484c4f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adriel=20Caf=C3=A9?= Date: Fri, 5 Apr 2019 18:37:30 -0300 Subject: [PATCH 07/15] Fix small typo --- Android/MMKV/mmkv/src/main/cpp/MMKV.cpp | 2 +- Win32/MMKV/MMKV.cpp | 2 +- iOS/MMKV/MMKV/MMKV.mm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp b/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp index 92a9d56b..6d85e76d 100644 --- a/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp @@ -695,7 +695,7 @@ bool MMKV::ensureMemorySize(size_t newSize) { m_size *= 2; } while (lenNeeded + futureUsage >= m_size); MMKVInfo( - "extending [%s] file size from %zu to %zu, incoming size:%zu, futrue usage:%zu", + "extending [%s] file size from %zu to %zu, incoming size:%zu, future usage:%zu", m_mmapID.c_str(), oldSize, m_size, newSize, futureUsage); // if we can't extend size, rollback to old state diff --git a/Win32/MMKV/MMKV.cpp b/Win32/MMKV/MMKV.cpp index 8c7e8c6e..a8a0f25f 100644 --- a/Win32/MMKV/MMKV.cpp +++ b/Win32/MMKV/MMKV.cpp @@ -526,7 +526,7 @@ bool MMKV::ensureMemorySize(size_t newSize) { m_size *= 2; } while (lenNeeded + futureUsage >= m_size); MMKVInfo( - "extending [%s] file size from %zu to %zu, incoming size:%zu, futrue usage:%zu", + "extending [%s] file size from %zu to %zu, incoming size:%zu, future usage:%zu", m_mmapID.c_str(), oldSize, m_size, newSize, futureUsage); // if we can't extend size, rollback to old state diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index 20de7b92..f0a14509 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -539,7 +539,7 @@ - (BOOL)ensureMemorySize:(size_t)newSize { do { m_size *= 2; } while (lenNeeded + futureUsage >= m_size); - MMKVInfo(@"extending [%@] file size from %zu to %zu, incoming size:%zu, futrue usage:%zu", + MMKVInfo(@"extending [%@] file size from %zu to %zu, incoming size:%zu, future usage:%zu", m_mmapID, oldSize, m_size, newSize, futureUsage); // if we can't extend size, rollback to old state From bc92546ff811c181d068b059a5f97714407453d7 Mon Sep 17 00:00:00 2001 From: guoling Date: Tue, 9 Apr 2019 16:53:07 +0800 Subject: [PATCH 08/15] allKeys --- iOS/MMKV/MMKV/MMKV.h | 1 + iOS/MMKV/MMKV/MMKV.mm | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/iOS/MMKV/MMKV/MMKV.h b/iOS/MMKV/MMKV/MMKV.h index 93fd952e..d46b2581 100644 --- a/iOS/MMKV/MMKV/MMKV.h +++ b/iOS/MMKV/MMKV/MMKV.h @@ -128,6 +128,7 @@ NS_ASSUME_NONNULL_BEGIN - (size_t)actualSize; - (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block; +- (NSArray *)allKeys; - (void)removeValueForKey:(NSString *)key NS_SWIFT_NAME(removeValue(forKey:)); diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index 9743bdce..1d002c5b 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -1266,6 +1266,13 @@ - (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block { MMKVInfo(@"enumerate [%@] finish", m_mmapID); } +- (NSArray *)allKeys { + CScopedLock lock(m_lock); + [self checkLoadData]; + + return [m_dic allKeys]; +} + - (void)removeValueForKey:(NSString *)key { if (key.length <= 0) { return; From 662e68bb4d713d87e918a70807afba9ce5742b44 Mon Sep 17 00:00:00 2001 From: TL Date: Thu, 11 Apr 2019 16:00:17 +0800 Subject: [PATCH 09/15] fix typo --- iOS/MMKV/MMKV/MMKV.mm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index 1d002c5b..dc794011 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -285,7 +285,7 @@ - (void)loadFromFile { if (strategic == MMKVOnErrorRecover) { loadFromFile = true; needFullWriteback = true; - [self writeAcutalSize:m_size - offset]; + [self writeActualSize:m_size - offset]; } } } @@ -300,7 +300,7 @@ - (void)loadFromFile { [self fullWriteback]; } } else { - [self writeAcutalSize:0]; + [self writeActualSize:0]; m_output = new MiniCodedOutputData(m_ptr + offset, m_size - offset); [self recaculateCRCDigest]; } @@ -577,7 +577,7 @@ - (BOOL)ensureMemorySize:(size_t)newSize { m_cryptor->encrypt(ptr, ptr, data.length); } - if ([self writeAcutalSize:data.length] == NO) { + if ([self writeActualSize:data.length] == NO) { return NO; } @@ -595,7 +595,7 @@ - (BOOL)ensureMemorySize:(size_t)newSize { return YES; } -- (BOOL)writeAcutalSize:(size_t)actualSize { +- (BOOL)writeActualSize:(size_t)actualSize { assert(m_ptr != 0); assert(m_ptr != MAP_FAILED); @@ -657,7 +657,7 @@ - (BOOL)appendData:(NSData *)data forKey:(NSString *)key { auto ptr = (unsigned char *) allData.bytes; m_cryptor->encrypt(ptr, ptr, allData.length); } - BOOL ret = [self writeAcutalSize:allData.length]; + BOOL ret = [self writeActualSize:allData.length]; if (ret) { ret = [self protectFromBackgroundWritting:m_actualSize writeBlock:^(MiniCodedOutputData *output) { @@ -671,7 +671,7 @@ - (BOOL)appendData:(NSData *)data forKey:(NSString *)key { } return NO; } else { - BOOL ret = [self writeAcutalSize:m_actualSize + size]; + BOOL ret = [self writeActualSize:m_actualSize + size]; if (ret) { static const int offset = pbFixed32Size(0); ret = [self protectFromBackgroundWritting:size @@ -724,7 +724,7 @@ - (BOOL)fullWriteback { auto ptr = (unsigned char *) allData.bytes; m_cryptor->encrypt(ptr, ptr, allData.length); } - BOOL ret = [self writeAcutalSize:allData.length]; + BOOL ret = [self writeActualSize:allData.length]; if (ret) { delete m_output; m_output = new MiniCodedOutputData(m_ptr + offset, m_size - offset); From ccd476ed655ec4eadc94d832b0d1917b2dc2e5c7 Mon Sep 17 00:00:00 2001 From: TL Date: Thu, 11 Apr 2019 18:38:16 +0800 Subject: [PATCH 10/15] fix typo --- iOS/MMKV/MMKV/MMKV.mm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index dc794011..576fb75f 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -297,7 +297,7 @@ - (void)loadFromFile { m_dic = [MiniPBCoder decodeContainerOfClass:NSMutableDictionary.class withValueClass:NSData.class fromData:inputBuffer]; m_output = new MiniCodedOutputData(m_ptr + offset + m_actualSize, m_size - offset - m_actualSize); if (needFullWriteback) { - [self fullWriteback]; + [self fullWriteBack]; } } else { [self writeActualSize:0]; @@ -453,7 +453,7 @@ - (void)trim { return; } - [self fullWriteback]; + [self fullWriteBack]; auto oldSize = m_size; while (m_size > (m_actualSize * 2)) { m_size /= 2; @@ -485,7 +485,7 @@ - (void)trim { MMKVInfo(@"finish trim %@ to size %zu", m_mmapID, m_size); } -- (BOOL)protectFromBackgroundWritting:(size_t)size writeBlock:(void (^)(MiniCodedOutputData *output))block { +- (BOOL)protectFromBackgroundWriting:(size_t)size writeBlock:(void (^)(MiniCodedOutputData *output))block { if (m_isInBackground) { static const int offset = pbFixed32Size(0); static const int pagesize = getpagesize(); @@ -583,7 +583,7 @@ - (BOOL)ensureMemorySize:(size_t)newSize { delete m_output; m_output = new MiniCodedOutputData(m_ptr + offset, m_size - offset); - BOOL ret = [self protectFromBackgroundWritting:m_actualSize + BOOL ret = [self protectFromBackgroundWriting:m_actualSize writeBlock:^(MiniCodedOutputData *output) { output->writeRawData(data); }]; @@ -659,7 +659,7 @@ - (BOOL)appendData:(NSData *)data forKey:(NSString *)key { } BOOL ret = [self writeActualSize:allData.length]; if (ret) { - ret = [self protectFromBackgroundWritting:m_actualSize + ret = [self protectFromBackgroundWriting:m_actualSize writeBlock:^(MiniCodedOutputData *output) { output->writeRawData(allData); // note: don't write size of data }]; @@ -674,7 +674,7 @@ - (BOOL)appendData:(NSData *)data forKey:(NSString *)key { BOOL ret = [self writeActualSize:m_actualSize + size]; if (ret) { static const int offset = pbFixed32Size(0); - ret = [self protectFromBackgroundWritting:size + ret = [self protectFromBackgroundWriting:size writeBlock:^(MiniCodedOutputData *output) { output->writeString(key); output->writeData(data); // note: write size of data @@ -697,7 +697,7 @@ - (NSData *)getRawDataForKey:(NSString *)key { return [m_dic objectForKey:key]; } -- (BOOL)fullWriteback { +- (BOOL)fullWriteBack { CScopedLock lock(m_lock); if (m_needLoadFromFile) { return YES; @@ -728,7 +728,7 @@ - (BOOL)fullWriteback { if (ret) { delete m_output; m_output = new MiniCodedOutputData(m_ptr + offset, m_size - offset); - ret = [self protectFromBackgroundWritting:m_actualSize + ret = [self protectFromBackgroundWriting:m_actualSize writeBlock:^(MiniCodedOutputData *output) { output->writeRawData(allData); // note: don't write size of data }]; @@ -884,14 +884,14 @@ - (BOOL)reKey:(NSData *)newKey { delete m_cryptor; auto ptr = (const unsigned char *) newKey.bytes; m_cryptor = new AESCrypt(ptr, newKey.length); - return [self fullWriteback]; + return [self fullWriteBack]; } } else { // decryption to plain text MMKVInfo(@"reKey with no aes key"); delete m_cryptor; m_cryptor = nullptr; - return [self fullWriteback]; + return [self fullWriteBack]; } } else { if (newKey.length > 0) { @@ -899,7 +899,7 @@ - (BOOL)reKey:(NSData *)newKey { MMKVInfo(@"reKey with aes key"); auto ptr = (const unsigned char *) newKey.bytes; m_cryptor = new AESCrypt(ptr, newKey.length); - return [self fullWriteback]; + return [self fullWriteBack]; } else { return YES; } @@ -1299,7 +1299,7 @@ - (void)removeValuesForKeys:(NSArray *)arrKeys { MMKVInfo(@"remove [%@] %lu keys, %lu remain", m_mmapID, (unsigned long) arrKeys.count, (unsigned long) m_dic.count); - [self fullWriteback]; + [self fullWriteBack]; } #pragma mark - Boring stuff From 38d0b5deaff69642fdfc50377030ca39c699316f Mon Sep 17 00:00:00 2001 From: TL Date: Tue, 16 Apr 2019 15:41:30 +0800 Subject: [PATCH 11/15] update mmkv tests --- iOS/MMKVDemo/MMKVDemoTests/MMKVDemoTests.mm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/iOS/MMKVDemo/MMKVDemoTests/MMKVDemoTests.mm b/iOS/MMKVDemo/MMKVDemoTests/MMKVDemoTests.mm index 47fa1ba0..88828c58 100644 --- a/iOS/MMKVDemo/MMKVDemoTests/MMKVDemoTests.mm +++ b/iOS/MMKVDemo/MMKVDemoTests/MMKVDemoTests.mm @@ -535,4 +535,20 @@ - (void)testImportFromNSUserDefaults { XCTAssertEqual([mmkv getUInt64ForKey:@"number_NSUInteger"], number.unsignedIntegerValue); } +- (void)testMultiTimesOverwriteValue { + NSData *data; + int loops = 1000000; + for (int index = 0; index < loops; index++) { + NSString *str = [NSString stringWithFormat:@"%s-%d", __FILE__, rand()]; + data = [str dataUsingEncoding:NSUTF8StringEncoding]; + BOOL ret = [mmkv setData:data forKey:@"data"]; + XCTAssertEqual(ret, YES); + } + NSData *value = [mmkv getObjectOfClass:NSData.class forKey:@"data"]; + XCTAssertEqualObjects(value, data); + + value = [mmkv getObjectOfClass:NSData.class forKey:KeyNotExist]; + XCTAssertEqualObjects(value, nil); +} + @end From 25098088381d6b7d9724cfc771ccb0e6098d69e0 Mon Sep 17 00:00:00 2001 From: guoling Date: Wed, 17 Apr 2019 20:38:06 +0800 Subject: [PATCH 12/15] async for Android --- Android/MMKV/mmkv/src/main/cpp/MMKV.cpp | 7 ++--- Android/MMKV/mmkv/src/main/cpp/MMKV.h | 2 +- .../MMKV/mmkv/src/main/cpp/native-bridge.cpp | 5 ++-- .../src/main/java/com/tencent/mmkv/MMKV.java | 15 ++++++++--- Android/MMKV/mmkvdemo/build.gradle | 4 +-- .../com/tencent/mmkvdemo/MainActivity.java | 2 ++ iOS/MMKV/MMKV/MMKV.mm | 26 +++++++++---------- 7 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp b/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp index 6d85e76d..526699d1 100644 --- a/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp @@ -1316,14 +1316,15 @@ void MMKV::removeValuesForKeys(const std::vector &arrKeys) { #pragma mark - file -void MMKV::sync() { +void MMKV::sync(bool sync) { SCOPEDLOCK(m_lock); if (m_needLoadFromFile || !isFileValid()) { return; } SCOPEDLOCK(m_exclusiveProcessLock); - if (msync(m_ptr, m_size, MS_SYNC) != 0) { - MMKVError("fail to msync [%s]:%s", m_mmapID.c_str(), strerror(errno)); + auto flag = sync ? MS_SYNC : MS_ASYNC; + if (msync(m_ptr, m_size, flag) != 0) { + MMKVError("fail to msync[%d] [%s]:%s", sync, m_mmapID.c_str(), strerror(errno)); } } diff --git a/Android/MMKV/mmkv/src/main/cpp/MMKV.h b/Android/MMKV/mmkv/src/main/cpp/MMKV.h index fb25a9a3..e84a92b2 100644 --- a/Android/MMKV/mmkv/src/main/cpp/MMKV.h +++ b/Android/MMKV/mmkv/src/main/cpp/MMKV.h @@ -225,7 +225,7 @@ class MMKV { // you don't need to call this, really, I mean it // unless you care about out of battery - void sync(); + void sync(bool sync = true); static bool isFileValid(const std::string &mmapID); diff --git a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp index 9d2dc654..f6034393 100644 --- a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp @@ -560,10 +560,11 @@ extern "C" JNIEXPORT JNICALL void Java_com_tencent_mmkv_MMKV_clearAll(JNIEnv *en } } -extern "C" JNIEXPORT JNICALL void Java_com_tencent_mmkv_MMKV_sync(JNIEnv *env, jobject instance) { +extern "C" JNIEXPORT JNICALL void +Java_com_tencent_mmkv_MMKV_sync(JNIEnv *env, jobject instance, jboolean sync) { MMKV *kv = getMMKV(env, instance); if (kv) { - kv->sync(); + kv->sync((bool) sync); } } diff --git a/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java b/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java index 4f1e842b..46bfe6db 100644 --- a/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java +++ b/Android/MMKV/mmkv/src/main/java/com/tencent/mmkv/MMKV.java @@ -486,7 +486,15 @@ public void removeValueForKey(String key) { // you don't need to call this, really, I mean it // unless you care about out of battery - public native void sync(); + public void sync() { + sync(true); + } + + public void async() { + sync(false); + } + + private native void sync(boolean sync); public static native boolean isFileValid(String mmapID); @@ -614,14 +622,13 @@ public Editor clear() { @Override public boolean commit() { - sync(); + sync(true); return true; } @Override public void apply() { - // TODO: create a thread? - //sync(); + sync(false); } @Override diff --git a/Android/MMKV/mmkvdemo/build.gradle b/Android/MMKV/mmkvdemo/build.gradle index 51ee0a2c..553c5100 100644 --- a/Android/MMKV/mmkvdemo/build.gradle +++ b/Android/MMKV/mmkvdemo/build.gradle @@ -62,8 +62,8 @@ repositories { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') -// implementation project(':mmkv') - implementation 'com.tencent:mmkv:1.0.18' + implementation project(':mmkv') +// implementation 'com.tencent:mmkv:1.0.18' // implementation 'com.tencent:mmkv-static:1.0.18' implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' diff --git a/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MainActivity.java b/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MainActivity.java index d5af58e8..41862727 100644 --- a/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MainActivity.java +++ b/Android/MMKV/mmkvdemo/src/main/java/com/tencent/mmkvdemo/MainActivity.java @@ -237,6 +237,8 @@ private MMKV testMMKV(String mmapID, String cryptKey, boolean decodeOnly, String Log.i("MMKV", "string after set null: " + kv.decodeString("null string") + ", containsKey:" + kv.contains("null string")); + //kv.sync(); + //kv.async(); //kv.clearAll(); kv.clearMemoryCache(); Log.i("MMKV", "allKeys: " + Arrays.toString(kv.allKeys())); diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index 576fb75f..6d3a69b9 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -584,9 +584,9 @@ - (BOOL)ensureMemorySize:(size_t)newSize { delete m_output; m_output = new MiniCodedOutputData(m_ptr + offset, m_size - offset); BOOL ret = [self protectFromBackgroundWriting:m_actualSize - writeBlock:^(MiniCodedOutputData *output) { - output->writeRawData(data); - }]; + writeBlock:^(MiniCodedOutputData *output) { + output->writeRawData(data); + }]; if (ret) { [self recaculateCRCDigest]; } @@ -660,9 +660,9 @@ - (BOOL)appendData:(NSData *)data forKey:(NSString *)key { BOOL ret = [self writeActualSize:allData.length]; if (ret) { ret = [self protectFromBackgroundWriting:m_actualSize - writeBlock:^(MiniCodedOutputData *output) { - output->writeRawData(allData); // note: don't write size of data - }]; + writeBlock:^(MiniCodedOutputData *output) { + output->writeRawData(allData); // note: don't write size of data + }]; if (ret) { [self recaculateCRCDigest]; } @@ -675,10 +675,10 @@ - (BOOL)appendData:(NSData *)data forKey:(NSString *)key { if (ret) { static const int offset = pbFixed32Size(0); ret = [self protectFromBackgroundWriting:size - writeBlock:^(MiniCodedOutputData *output) { - output->writeString(key); - output->writeData(data); // note: write size of data - }]; + writeBlock:^(MiniCodedOutputData *output) { + output->writeString(key); + output->writeData(data); // note: write size of data + }]; if (ret) { auto ptr = (uint8_t *) m_ptr + offset + m_actualSize - size; if (m_cryptor) { @@ -729,9 +729,9 @@ - (BOOL)fullWriteBack { delete m_output; m_output = new MiniCodedOutputData(m_ptr + offset, m_size - offset); ret = [self protectFromBackgroundWriting:m_actualSize - writeBlock:^(MiniCodedOutputData *output) { - output->writeRawData(allData); // note: don't write size of data - }]; + writeBlock:^(MiniCodedOutputData *output) { + output->writeRawData(allData); // note: don't write size of data + }]; if (ret) { [self recaculateCRCDigest]; m_hasFullWriteBack = YES; From de644c66a43032e2b63487fe2b9a04c84048d15e Mon Sep 17 00:00:00 2001 From: guoling Date: Wed, 17 Apr 2019 20:46:05 +0800 Subject: [PATCH 13/15] async for iOS --- Android/MMKV/mmkv/src/main/cpp/MMKV.cpp | 2 +- iOS/MMKV/MMKV/MMKV.h | 1 + iOS/MMKV/MMKV/MMKV.mm | 18 ++++++++++++++---- iOS/MMKV/MMKV/MemoryFile.mm | 2 ++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp b/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp index 526699d1..9aa330db 100644 --- a/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/MMKV.cpp @@ -1324,7 +1324,7 @@ void MMKV::sync(bool sync) { SCOPEDLOCK(m_exclusiveProcessLock); auto flag = sync ? MS_SYNC : MS_ASYNC; if (msync(m_ptr, m_size, flag) != 0) { - MMKVError("fail to msync[%d] [%s]:%s", sync, m_mmapID.c_str(), strerror(errno)); + MMKVError("fail to msync[%d] [%s]:%s", flag, m_mmapID.c_str(), strerror(errno)); } } diff --git a/iOS/MMKV/MMKV/MMKV.h b/iOS/MMKV/MMKV/MMKV.h index d46b2581..f1ff1f41 100644 --- a/iOS/MMKV/MMKV/MMKV.h +++ b/iOS/MMKV/MMKV/MMKV.h @@ -152,6 +152,7 @@ NS_ASSUME_NONNULL_BEGIN // you don't need to call this, really, I mean it // unless you care about out of battery - (void)sync; +- (void)async; // for CrashProtected Only!! + (BOOL)isFileValid:(NSString *)mmapID NS_SWIFT_NAME(isFileValid(for:)); diff --git a/iOS/MMKV/MMKV/MMKV.mm b/iOS/MMKV/MMKV/MMKV.mm index 6d3a69b9..d9be8156 100644 --- a/iOS/MMKV/MMKV/MMKV.mm +++ b/iOS/MMKV/MMKV/MMKV.mm @@ -1305,15 +1305,25 @@ - (void)removeValuesForKeys:(NSArray *)arrKeys { #pragma mark - Boring stuff - (void)sync { + [self doSync:true]; +} + +- (void)async { + [self doSync:false]; +} + +- (void)doSync:(bool)sync { CScopedLock lock(m_lock); if (m_needLoadFromFile || ![self isFileValid] || m_crcPtr == nullptr) { return; } - if (msync(m_ptr, m_actualSize, MS_SYNC) != 0) { - MMKVError(@"fail to msync data file of [%@]:%s", m_mmapID, strerror(errno)); + + auto flag = sync ? MS_SYNC : MS_ASYNC; + if (msync(m_ptr, m_actualSize, flag) != 0) { + MMKVError(@"fail to msync[%d] data file of [%@]:%s", flag, m_mmapID, strerror(errno)); } - if (msync(m_crcPtr, CRC_FILE_SIZE, MS_SYNC) != 0) { - MMKVError(@"fail to msync crc-32 file of [%@]:%s", m_mmapID, strerror(errno)); + if (msync(m_crcPtr, CRC_FILE_SIZE, flag) != 0) { + MMKVError(@"fail to msync[%d] crc-32 file of [%@]:%s", flag, m_mmapID, strerror(errno)); } } diff --git a/iOS/MMKV/MMKV/MemoryFile.mm b/iOS/MMKV/MMKV/MemoryFile.mm index f0d192f4..4fe788d9 100644 --- a/iOS/MMKV/MMKV/MemoryFile.mm +++ b/iOS/MMKV/MMKV/MemoryFile.mm @@ -95,6 +95,8 @@ // I'm felling lucky if (m_size <= SegmentSize && m_segmentCache.size() == 1) { m_ptr = *m_segmentCache.get(0); + } else { + m_ptr = nullptr; } } From fabce0a3ff1d707de6b82c3291b8599f89766c7d Mon Sep 17 00:00:00 2001 From: guoling Date: Fri, 19 Apr 2019 17:13:49 +0800 Subject: [PATCH 14/15] support Android Q limiting ashmem accessing --- Android/MMKV/mmkv/build.gradle | 2 + Android/MMKV/mmkv/src/main/cpp/MmapedFile.cpp | 156 +++++++++++++----- Android/MMKV/mmkv/src/main/cpp/MmapedFile.h | 12 +- .../MMKV/mmkv/src/main/cpp/native-bridge.cpp | 15 ++ .../MMKV/mmkv/src/main/cpp/native-bridge.h | 2 + 5 files changed, 141 insertions(+), 46 deletions(-) diff --git a/Android/MMKV/mmkv/build.gradle b/Android/MMKV/mmkv/build.gradle index ef4b832b..a392a6ab 100644 --- a/Android/MMKV/mmkv/build.gradle +++ b/Android/MMKV/mmkv/build.gradle @@ -11,6 +11,8 @@ android { abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } + // ndk doesn't have targetSDK support + //minSdkVersion = 26 } buildTypes { release { diff --git a/Android/MMKV/mmkv/src/main/cpp/MmapedFile.cpp b/Android/MMKV/mmkv/src/main/cpp/MmapedFile.cpp index 279de1db..fa1a58b9 100644 --- a/Android/MMKV/mmkv/src/main/cpp/MmapedFile.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/MmapedFile.cpp @@ -71,28 +71,15 @@ MmapedFile::MmapedFile(const std::string &path, size_t size, bool fileType) } } } else { - m_fd = open(ASHMEM_NAME_DEF, O_RDWR); - if (m_fd < 0) { - MMKVError("fail to open ashmem:%s, %s", m_name.c_str(), strerror(errno)); - } else { - if (ioctl(m_fd, ASHMEM_SET_NAME, m_name.c_str()) != 0) { - MMKVError("fail to set ashmem name:%s, %s", m_name.c_str(), strerror(errno)); - } else if (ioctl(m_fd, ASHMEM_SET_SIZE, size) != 0) { - MMKVError("fail to set ashmem:%s, size %zu, %s", m_name.c_str(), size, - strerror(errno)); - } else { - m_segmentSize = static_cast(size); - m_segmentPtr = (char *) mmap(nullptr, m_segmentSize, PROT_READ | PROT_WRITE, - MAP_SHARED, m_fd, 0); - if (m_segmentPtr == MAP_FAILED) { - MMKVError("fail to mmap [%s], %s", m_name.c_str(), strerror(errno)); - m_segmentPtr = nullptr; - } else { - return; - } + m_fd = ASharedMemory_create(m_name.c_str(), size); + if (m_fd >= 0) { + m_segmentSize = static_cast(size); + m_segmentPtr = + (char *) mmap(nullptr, m_segmentSize, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd, 0); + if (m_segmentPtr == MAP_FAILED) { + MMKVError("fail to mmap [%s], %s", m_name.c_str(), strerror(errno)); + m_segmentPtr = nullptr; } - close(m_fd); - m_fd = -1; } } } @@ -102,24 +89,14 @@ MmapedFile::MmapedFile(int ashmemFD) if (m_fd < 0) { MMKVError("fd %d invalid", m_fd); } else { - char name[ASHMEM_NAME_LEN] = {0}; - if (ioctl(m_fd, ASHMEM_GET_NAME, name) != 0) { - MMKVError("fail to get ashmem name:%d, %s", m_fd, strerror(errno)); - } else { - m_name = string(name); - int size = ioctl(m_fd, ASHMEM_GET_SIZE, nullptr); - if (size < 0) { - MMKVError("fail to get ashmem size:%s, %s", m_name.c_str(), strerror(errno)); - } else { - m_segmentSize = static_cast(size); - MMKVInfo("ashmem verified, name:%s, size:%zu", m_name.c_str(), m_segmentSize); - m_segmentPtr = (char *) mmap(nullptr, m_segmentSize, PROT_READ | PROT_WRITE, - MAP_SHARED, m_fd, 0); - if (m_segmentPtr == MAP_FAILED) { - MMKVError("fail to mmap [%s], %s", m_name.c_str(), strerror(errno)); - m_segmentPtr = nullptr; - } - } + m_name = ASharedMemory_getName(m_fd); + m_segmentSize = ASharedMemory_getSize(m_fd); + MMKVInfo("ashmem name:%s, size:%zu", m_name.c_str(), m_segmentSize); + m_segmentPtr = + (char *) mmap(nullptr, m_segmentSize, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd, 0); + if (m_segmentPtr == MAP_FAILED) { + MMKVError("fail to mmap [%s], %s", m_name.c_str(), strerror(errno)); + m_segmentPtr = nullptr; } } } @@ -267,3 +244,104 @@ bool zeroFillFile(int fd, size_t startPos, size_t size) { } return true; } + +#pragma mark - ashmem +#include "native-bridge.h" +#include + +#define ASHMEM_NAME_LEN 256 +#define __ASHMEMIOC 0x77 +#define ASHMEM_SET_NAME _IOW(__ASHMEMIOC, 1, char[ASHMEM_NAME_LEN]) +#define ASHMEM_GET_NAME _IOR(__ASHMEMIOC, 2, char[ASHMEM_NAME_LEN]) +#define ASHMEM_SET_SIZE _IOW(__ASHMEMIOC, 3, size_t) +#define ASHMEM_GET_SIZE _IO(__ASHMEMIOC, 4) + +void *loadLibrary() { + auto name = "libandroid.so"; + static auto handle = dlopen(name, RTLD_LAZY | RTLD_LOCAL); + if (handle == RTLD_DEFAULT) { + MMKVError("unable to load library %s", name); + } + return handle; +} + +typedef int (*AShmem_create_t)(const char *name, size_t size); + +int ASharedMemory_create(const char *name, size_t size) { + int fd = -1; + if (g_android_api >= __ANDROID_API_O__) { + static auto handle = loadLibrary(); + static AShmem_create_t funcPtr = + (handle != nullptr) + ? reinterpret_cast(dlsym(handle, "ASharedMemory_create")) + : nullptr; + if (funcPtr) { + fd = funcPtr(name, size); + if (fd < 0) { + MMKVError("fail to ASharedMemory_create %s with size %z, errno:%s", name, size, + strerror(errno)); + } + } else { + MMKVWarning("fail to locate ASharedMemory_create() from loading libandroid.so"); + } + } + if (fd < 0) { + fd = open(ASHMEM_NAME_DEF, O_RDWR); + if (fd < 0) { + MMKVError("fail to open ashmem:%s, %s", name, strerror(errno)); + } else { + if (ioctl(fd, ASHMEM_SET_NAME, name) != 0) { + MMKVError("fail to set ashmem name:%s, %s", name, strerror(errno)); + } else if (ioctl(fd, ASHMEM_SET_SIZE, size) != 0) { + MMKVError("fail to set ashmem:%s, size %zu, %s", name, size, strerror(errno)); + } + } + } + return fd; +} + +typedef size_t (*AShmem_getSize_t)(int fd); + +size_t ASharedMemory_getSize(int fd) { + size_t size = 0; + if (g_android_api >= __ANDROID_API_O__) { + static auto handle = loadLibrary(); + static AShmem_getSize_t funcPtr = + (handle != nullptr) + ? reinterpret_cast(dlsym(handle, "ASharedMemory_getSize")) + : nullptr; + if (funcPtr) { + size = funcPtr(fd); + if (size == 0) { + MMKVError("fail to ASharedMemory_getSize:%d, %s", fd, strerror(errno)); + } + } else { + MMKVWarning("fail to locate ASharedMemory_create() from loading libandroid.so"); + } + } + if (size == 0) { + int tmp = ioctl(fd, ASHMEM_GET_SIZE, nullptr); + if (tmp < 0) { + MMKVError("fail to get ashmem size:%d, %s", fd, strerror(errno)); + } else { + size = static_cast(tmp); + } + } + return size; +} + +std::string ASharedMemory_getName(int fd) { + // Android Q doesn't have ASharedMemory_getName() + // I've make a request to Google, https://issuetracker.google.com/issues/130741665 + // There's nothing we can do before it's supported officially by Google + if (g_android_api >= 29) { + return ""; + } + + char name[ASHMEM_NAME_LEN] = {0}; + if (ioctl(fd, ASHMEM_GET_NAME, name) != 0) { + MMKVError("fail to get ashmem name:%d, %s", fd, strerror(errno)); + return ""; + } + return string(name); +} diff --git a/Android/MMKV/mmkv/src/main/cpp/MmapedFile.h b/Android/MMKV/mmkv/src/main/cpp/MmapedFile.h index 9339b1c2..610b383e 100644 --- a/Android/MMKV/mmkv/src/main/cpp/MmapedFile.h +++ b/Android/MMKV/mmkv/src/main/cpp/MmapedFile.h @@ -25,15 +25,8 @@ #include #include -#define ASHMEM_NAME_LEN 256 #define ASHMEM_NAME_DEF "/dev/ashmem" -#define __ASHMEMIOC 0x77 -#define ASHMEM_SET_NAME _IOW(__ASHMEMIOC, 1, char[ASHMEM_NAME_LEN]) -#define ASHMEM_GET_NAME _IOR(__ASHMEMIOC, 2, char[ASHMEM_NAME_LEN]) -#define ASHMEM_SET_SIZE _IOW(__ASHMEMIOC, 3, size_t) -#define ASHMEM_GET_SIZE _IO(__ASHMEMIOC, 4) - enum : bool { MMAP_FILE = false, MMAP_ASHMEM = true }; extern const int DEFAULT_MMAP_SIZE; @@ -79,4 +72,9 @@ extern MMBuffer *readWholeFile(const char *path); extern bool zeroFillFile(int fd, size_t startPos, size_t size); extern bool createFile(const std::string &filePath); +// for Android Q limiting ashmem access +extern int ASharedMemory_create(const char *name, size_t size); +extern size_t ASharedMemory_getSize(int fd); +extern std::string ASharedMemory_getName(int fd); + #endif //MMKV_MMAPEDFILE_H diff --git a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp index f6034393..3cfbf1a3 100644 --- a/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp +++ b/Android/MMKV/mmkv/src/main/cpp/native-bridge.cpp @@ -34,6 +34,7 @@ static jmethodID g_callbackOnCRCFailID = nullptr; static jmethodID g_callbackOnFileLengthErrorID = nullptr; static jmethodID g_mmkvLogID = nullptr; static JavaVM *g_currentJVM = nullptr; +int g_android_api = __ANDROID_API_L__; extern "C" JNIEXPORT JNICALL jint JNI_OnLoad(JavaVM *vm, void *reserved) { g_currentJVM = vm; @@ -73,6 +74,20 @@ extern "C" JNIEXPORT JNICALL jint JNI_OnLoad(JavaVM *vm, void *reserved) { MMKVError("fail to get method id for mmkvLogImp"); } + // get current API level by accessing android.os.Build.VERSION.SDK_INT + jclass versionClass = env->FindClass("android/os/Build$VERSION"); + if (versionClass) { + jfieldID sdkIntFieldID = env->GetStaticFieldID(versionClass, "SDK_INT", "I"); + if (sdkIntFieldID) { + g_android_api = env->GetStaticIntField(versionClass, sdkIntFieldID); + MMKVInfo("current API level = %d", g_android_api); + } else { + MMKVError("fail to get field id android.os.Build.VERSION.SDK_INT"); + } + } else { + MMKVError("fail to get class android.os.Build.VERSION"); + } + return JNI_VERSION_1_6; } diff --git a/Android/MMKV/mmkv/src/main/cpp/native-bridge.h b/Android/MMKV/mmkv/src/main/cpp/native-bridge.h index 4c2f3754..0b26111f 100644 --- a/Android/MMKV/mmkv/src/main/cpp/native-bridge.h +++ b/Android/MMKV/mmkv/src/main/cpp/native-bridge.h @@ -38,4 +38,6 @@ void mmkvLog(int level, const std::string &function, const std::string &message); +extern int g_android_api; + #endif //MMKV_NATIVE_BRIDGE_H From 0a58f89509247fd05bc9ce63a8ff12d8c03d5f76 Mon Sep 17 00:00:00 2001 From: guoling Date: Mon, 22 Apr 2019 20:46:10 +0800 Subject: [PATCH 15/15] prepare for v1.0.19 --- Android/MMKV/gradle.properties | 2 +- Android/MMKV/mmkvdemo/build.gradle | 6 +++--- CHANGELOG.md | 20 ++++++++++++++++++++ MMKV.podspec | 2 +- README.md | 6 +++--- iOS/MMKV/MMKV/Resources/Info.plist | 2 +- readme_cn.md | 4 ++-- 7 files changed, 31 insertions(+), 11 deletions(-) diff --git a/Android/MMKV/gradle.properties b/Android/MMKV/gradle.properties index 6357fba3..d9401d11 100644 --- a/Android/MMKV/gradle.properties +++ b/Android/MMKV/gradle.properties @@ -12,6 +12,6 @@ org.gradle.jvmargs=-Xmx1536m # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -VERSION_NAME_PREFIX=1.0.18 +VERSION_NAME_PREFIX=1.0.19 #VERSION_NAME_SUFFIX=-SNAPSHOT VERSION_NAME_SUFFIX= \ No newline at end of file diff --git a/Android/MMKV/mmkvdemo/build.gradle b/Android/MMKV/mmkvdemo/build.gradle index 553c5100..6381eca4 100644 --- a/Android/MMKV/mmkvdemo/build.gradle +++ b/Android/MMKV/mmkvdemo/build.gradle @@ -62,9 +62,9 @@ repositories { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation project(':mmkv') -// implementation 'com.tencent:mmkv:1.0.18' -// implementation 'com.tencent:mmkv-static:1.0.18' +// implementation project(':mmkv') + implementation 'com.tencent:mmkv:1.0.19' +// implementation 'com.tencent:mmkv-static:1.0.19' implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' diff --git a/CHANGELOG.md b/CHANGELOG.md index 73645823..620c4b5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # MMKV Change Log +## v1.0.19 / 2019-04-22 +### iOS / macOS +What's new + +* Support Swif 5. +* Add method to get all keys `-[MMKV allKeys]`; +* Add method to synchronize to file asynchronously `-[MMKV async]`. +* Fix a pod configuration bug that might override target project's C++ setting on `CLANG_CXX_LANGUAGE_STANDARD`. +* Fix a bug that `DEFAULT_MMAP_SIZE` might not be initialized before getting any MMKV instance. +* Fix a bug that openssl's header files included inside MMKV might mess with target project's own openssl implementation. + +### Android +What's new + +* Support Android Q. +* Add method to synchronize to file asynchronously `void sync()`, or `void apply()` that comes with `SharedPreferences.Editor` interface. +* Fix a bug that a buffer with length of zero might be returned when the key is not existed. +* Fix a bug that `DEFAULT_MMAP_SIZE` might not be initialized before getting any MMKV instance. + + ## v1.0.18 / 2019-03-14 ### iOS / macOS What's new diff --git a/MMKV.podspec b/MMKV.podspec index 785285a1..5f01cd92 100644 --- a/MMKV.podspec +++ b/MMKV.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "MMKV" - s.version = "1.0.18" + s.version = "1.0.19" s.summary = "MMKV is a cross-platform key-value storage framework developed by WeChat." s.description = <<-DESC diff --git a/README.md b/README.md index 4a9d41d7..f53a76f6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![license](https://img.shields.io/badge/license-BSD_3-brightgreen.svg?style=flat)](https://github.com/Tencent/MMKV/blob/master/LICENSE.TXT) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Tencent/MMKV/pulls) -[![Release Version](https://img.shields.io/badge/release-1.0.18-brightgreen.svg)](https://github.com/Tencent/MMKV/releases) +[![Release Version](https://img.shields.io/badge/release-1.0.19-brightgreen.svg)](https://github.com/Tencent/MMKV/releases) [![Platform](https://img.shields.io/badge/Platform-%20iOS%20%7C%20Android-brightgreen.svg)](https://github.com/Tencent/MMKV/wiki/home) 中文版本请参看[这里](./readme_cn.md) @@ -75,8 +75,8 @@ Add the following lines to `build.gradle` on your app module: ```gradle dependencies { - implementation 'com.tencent:mmkv:1.0.18' - // replace "1.0.18" with any available version + implementation 'com.tencent:mmkv:1.0.19' + // replace "1.0.19" with any available version } ``` diff --git a/iOS/MMKV/MMKV/Resources/Info.plist b/iOS/MMKV/MMKV/Resources/Info.plist index cd9d0cce..9b3d5e39 100644 --- a/iOS/MMKV/MMKV/Resources/Info.plist +++ b/iOS/MMKV/MMKV/Resources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.0.18 + 1.0.19 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/readme_cn.md b/readme_cn.md index e727ef49..0c01a9bd 100644 --- a/readme_cn.md +++ b/readme_cn.md @@ -59,8 +59,8 @@ NSString *str = [mmkv getStringForKey:@"string"]; ```gradle dependencies { - implementation 'com.tencent:mmkv:1.0.18' - // replace "1.0.18" with any available version + implementation 'com.tencent:mmkv:1.0.19' + // replace "1.0.19" with any available version } ```