NS_IMETHODIMP nsSupportsStringImpl::SetData(const nsAString& aData) { bool ok = mData.Assign(aData, fallible_t()); if (!ok) return NS_ERROR_OUT_OF_MEMORY; return NS_OK; }
NS_IMETHODIMP nsUnicharStreamLoader::Init(nsIUnicharStreamLoaderObserver *aObserver) { NS_ENSURE_ARG_POINTER(aObserver); mObserver = aObserver; if (!mRawData.SetCapacity(SNIFFING_BUFFER_SIZE, fallible_t())) return NS_ERROR_OUT_OF_MEMORY; return NS_OK; }
NS_METHOD nsUnicharStreamLoader::WriteSegmentFun(nsIInputStream *, void *aClosure, const char *aSegment, PRUint32, PRUint32 aCount, PRUint32 *aWriteCount) { nsUnicharStreamLoader* self = static_cast<nsUnicharStreamLoader*>(aClosure); PRUint32 haveRead = self->mBuffer.Length(); PRUint32 consumed = 0; nsresult rv; do { PRInt32 srcLen = aCount - consumed; PRInt32 dstLen; self->mDecoder->GetMaxLength(aSegment + consumed, srcLen, &dstLen); PRUint32 capacity = haveRead + dstLen; if (!self->mBuffer.SetCapacity(capacity, fallible_t())) { return NS_ERROR_OUT_OF_MEMORY; } rv = self->mDecoder->Convert(aSegment + consumed, &srcLen, self->mBuffer.BeginWriting() + haveRead, &dstLen); haveRead += dstLen; // XXX if srcLen is negative, we want to drop the _first_ byte in // the erroneous byte sequence and try again. This is not quite // possible right now -- see bug 160784 consumed += srcLen; if (NS_FAILED(rv)) { NS_ASSERTION(0 < capacity - haveRead, "Decoder returned an error but filled the output buffer! " "Should not happen."); self->mBuffer.BeginWriting()[haveRead++] = 0xFFFD; ++consumed; // XXX this is needed to make sure we don't underrun our buffer; // bug 160784 again consumed = NS_MAX<PRUint32>(consumed, 0); self->mDecoder->Reset(); } } while (consumed < aCount); self->mBuffer.SetLength(haveRead); *aWriteCount = aCount; return NS_OK; }