Bug 664090 - Store offset inside segment instead of pointer for nsStorageInputStream. r=bsmedberg

This commit is contained in:
Mike Hommey 2011-09-08 09:12:42 +02:00
parent 174e9ff0a0
commit 8c1cd94d71

View File

@ -362,8 +362,8 @@ protected:
private:
nsStorageStream* mStorageStream;
const char* mReadCursor; // Next memory location to read byte, or NULL
const char* mSegmentEnd; // One byte past end of current buffer segment
PRUint32 mReadCursor; // Next memory location to read byte, or NULL
PRUint32 mSegmentEnd; // One byte past end of current buffer segment
PRUint32 mSegmentNum; // Segment number containing read cursor
PRUint32 mSegmentSize; // All segments, except the last, are of this size
PRUint32 mLogicalCursor; // Logical offset into stream
@ -441,13 +441,15 @@ nsStorageInputStream::ReadSegments(nsWriteSegmentFun writer, void * closure, PRU
if (!available)
goto out;
mReadCursor = mStorageStream->mSegmentedBuffer->GetSegment(++mSegmentNum);
mSegmentEnd = mReadCursor + NS_MIN(mSegmentSize, available);
availableInSegment = mSegmentEnd - mReadCursor;
mSegmentNum++;
mReadCursor = 0;
mSegmentEnd = NS_MIN(mSegmentSize, available);
availableInSegment = mSegmentEnd;
}
const char *cur = mStorageStream->mSegmentedBuffer->GetSegment(mSegmentNum);
count = NS_MIN(availableInSegment, remainingCapacity);
rv = writer(this, closure, mReadCursor, aCount - remainingCapacity,
rv = writer(this, closure, cur + mReadCursor, aCount - remainingCapacity,
count, &bytesConsumed);
if (NS_FAILED(rv) || (bytesConsumed == 0))
break;
@ -534,11 +536,9 @@ nsStorageInputStream::Seek(PRUint32 aPosition)
return NS_OK;
mSegmentNum = SegNum(aPosition);
PRUint32 segmentOffset = SegOffset(aPosition);
mReadCursor = mStorageStream->mSegmentedBuffer->GetSegment(mSegmentNum) +
segmentOffset;
mReadCursor = SegOffset(aPosition);
PRUint32 available = length - aPosition;
mSegmentEnd = mReadCursor + NS_MIN(mSegmentSize - segmentOffset, available);
mSegmentEnd = mReadCursor + NS_MIN(mSegmentSize - mReadCursor, available);
mLogicalCursor = aPosition;
return NS_OK;
}