LLVOCacheEntry::LLVOCacheEntry(LLFILE *fp) { S32 size; checkedRead(fp, &mLocalID, sizeof(U32)); checkedRead(fp, &mCRC, sizeof(U32)); checkedRead(fp, &mHitCount, sizeof(S32)); checkedRead(fp, &mDupeCount, sizeof(S32)); checkedRead(fp, &mCRCChangeCount, sizeof(S32)); checkedRead(fp, &size, sizeof(S32)); // Corruption in the cache entries if ((size > 10000) || (size < 1)) { // We've got a bogus size, skip reading it. // We won't bother seeking, because the rest of this file // is likely bogus, and will be tossed anyway. llwarns << "Bogus cache entry, size " << size << ", aborting!" << llendl; mLocalID = 0; mCRC = 0; mBuffer = NULL; return; } mBuffer = new U8[size]; checkedRead(fp, mBuffer, size); mDP.assignBuffer(mBuffer, size); }
bool BinaryInputStreamSerializer::operator()(std::string& value, Common::StringView name) { uint64_t size; readVarint(stream, size); if (size > 0) { std::vector<char> temp; temp.resize(size); checkedRead(&temp[0], size); value.reserve(size); value.assign(&temp[0], size); } else { value.clear(); } return true; }
ISerializer& BinaryInputStreamSerializer::operator()(std::string& value, const std::string& name) { uint64_t size; readVarint(stream, size); if (size > 0) { std::vector<char> temp; temp.resize(size); checkedRead(&temp[0], size); value.reserve(size); value.assign(&temp[0], size); } else { value.clear(); } return *this; }
bool BinaryInputStreamSerializer::binary(void* value, size_t size, Common::StringView name) { checkedRead(static_cast<char*>(value), size); return true; }