nsresult ChunkSet::Write(nsIOutputStream* aOut) { nsTArray<uint32_t> chunks(IO_BUFFER_SIZE); for (const Range& range : mRanges) { for (uint32_t chunk = range.Begin(); chunk <= range.End(); chunk++) { chunks.AppendElement(chunk); if (chunks.Length() == chunks.Capacity()) { nsresult rv = WriteTArray(aOut, chunks); if (NS_FAILED(rv)) { return rv; } chunks.Clear(); } } } nsresult rv = WriteTArray(aOut, chunks); if (NS_FAILED(rv)) { return rv; } return NS_OK; }
nsresult LookupCache::WriteFile() { nsCOMPtr<nsIFile> storeFile; nsresult rv = mStoreDirectory->Clone(getter_AddRefs(storeFile)); NS_ENSURE_SUCCESS(rv, rv); rv = storeFile->AppendNative(mTableName + NS_LITERAL_CSTRING(CACHE_SUFFIX)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIOutputStream> out; rv = NS_NewSafeLocalFileOutputStream(getter_AddRefs(out), storeFile, PR_WRONLY | PR_TRUNCATE | PR_CREATE_FILE); NS_ENSURE_SUCCESS(rv, rv); UpdateHeader(); LOG(("Writing %d completions", mHeader.numCompletions)); uint32_t written; rv = out->Write(reinterpret_cast<char*>(&mHeader), sizeof(mHeader), &written); NS_ENSURE_SUCCESS(rv, rv); rv = WriteTArray(out, mCompletions); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsISafeOutputStream> safeOut = do_QueryInterface(out); rv = safeOut->Finish(); NS_ENSURE_SUCCESS(rv, rv); rv = EnsureSizeConsistent(); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIFile> psFile; rv = mStoreDirectory->Clone(getter_AddRefs(psFile)); NS_ENSURE_SUCCESS(rv, rv); rv = psFile->AppendNative(mTableName + NS_LITERAL_CSTRING(PREFIXSET_SUFFIX)); NS_ENSURE_SUCCESS(rv, rv); rv = mPrefixSet->StoreToFile(psFile); NS_WARN_IF_FALSE(NS_SUCCEEDED(rv), "failed to store the prefixset"); return NS_OK; }