mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 664090 - Store offset inside segment instead of pointer for nsStorageInputStream. r=bsmedberg
This commit is contained in:
parent
174e9ff0a0
commit
8c1cd94d71
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user