MCPcopy Create free account
hub / github.com/Tencent/MMKV / loadFromFile

Method loadFromFile

Core/MMKV_IO.cpp:65–154  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63extern MMKVPath_t g_realRootDir;
64
65MMKV_NAMESPACE_BEGIN
66
67void MMKV::loadFromFile() {
68 loadMetaInfoAndCheck();
69#ifndef MMKV_DISABLE_CRYPT
70 if (m_crypter) {
71 if (m_metaInfo->m_version >= MMKVVersionRandomIV) {
72 m_crypter->resetIV(m_metaInfo->m_vector, sizeof(m_metaInfo->m_vector));
73 }
74 }
75#endif
76 if (!m_file->isFileValid()) {
77 m_file->reloadFromFile(m_expectedCapacity);
78 } else if (isMultiProcess()) {
79 // the file size may change by other process between instance creation and loadFromFile
80 // because we have lazy load
81 auto actualFileSize = m_file->getActualFileSize();
82 if (actualFileSize != m_file->getFileSize()) {
83 m_file->reloadFromFile(m_expectedCapacity);
84 }
85 }
86 if (!m_file->isFileValid()) {
87 MMKVError("file [%s] not valid", m_path.c_str());
88 } else {
89 // error checking
90 bool loadFromFile = false, needFullWriteback = false;
91 checkDataValid(loadFromFile, needFullWriteback);
92 MMKVInfo("loading [%s] with %zu actual size, file size %zu, InterProcess %d, meta info "
93 "version:%u",
94 m_mmapID.c_str(), m_actualSize, m_file->getFileSize(), isMultiProcess(), m_metaInfo->m_version);
95 auto ptr = (uint8_t *) m_file->getMemory();
96 // loading
97 if (loadFromFile && m_actualSize > 0) {
98 MMKVInfo("loading [%s] with crc %u sequence %u version %u", m_mmapID.c_str(), m_metaInfo->m_crcDigest,
99 m_metaInfo->m_sequence, m_metaInfo->m_version);
100 MMBuffer inputBuffer(ptr + Fixed32Size, m_actualSize, MMBufferNoCopy);
101 if (m_crypter) {
102 clearDictionary(m_dicCrypt);
103 } else {
104 clearDictionary(m_dic);
105 }
106 if (needFullWriteback) {
107#ifndef MMKV_DISABLE_CRYPT
108 if (m_crypter) {
109 MiniPBCoder::greedyDecodeMap(*m_dicCrypt, inputBuffer, m_crypter);
110 } else
111#endif
112 {
113 MiniPBCoder::greedyDecodeMap(*m_dic, inputBuffer);
114 }
115 } else {
116#ifndef MMKV_DISABLE_CRYPT
117 if (m_crypter) {
118 MiniPBCoder::decodeMap(*m_dicCrypt, inputBuffer, m_crypter);
119 } else
120#endif
121 {
122 MiniPBCoder::decodeMap(*m_dic, inputBuffer);

Callers 1

Calls 11

clearDictionaryFunction · 0.85
resetIVMethod · 0.80
getFileSizeMethod · 0.80
getMemoryMethod · 0.80
isMultiProcessFunction · 0.70
isReadOnlyFunction · 0.70
syncFunction · 0.50
isFileValidMethod · 0.45
reloadFromFileMethod · 0.45
getActualFileSizeMethod · 0.45
seekMethod · 0.45

Tested by

no test coverage detected