nsresult ChunkSet::Read(nsIInputStream* aIn, uint32_t aNumElements) { nsTArray<uint32_t> chunks(IO_BUFFER_SIZE); while (aNumElements != 0) { chunks.Clear(); uint32_t numToRead = aNumElements > IO_BUFFER_SIZE ? IO_BUFFER_SIZE : aNumElements; nsresult rv = ReadTArray(aIn, &chunks, numToRead); if (NS_FAILED(rv)) { return rv; } aNumElements -= numToRead; for (uint32_t c : chunks) { rv = Set(c); if (NS_FAILED(rv)) { return rv; } } } return NS_OK; }
nsresult LookupCache::ReadCompletions(nsIInputStream* aInputStream) { if (!mHeader.numCompletions) { mCompletions.Clear(); return NS_OK; } nsCOMPtr<nsISeekableStream> seekable = do_QueryInterface(aInputStream); nsresult rv = seekable->Seek(nsISeekableStream::NS_SEEK_SET, sizeof(Header)); NS_ENSURE_SUCCESS(rv, rv); rv = ReadTArray(aInputStream, &mCompletions, mHeader.numCompletions); NS_ENSURE_SUCCESS(rv, rv); LOG(("Read %d completions", mCompletions.Length())); return NS_OK; }