1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-24 07:41:54 -07:00

Bug fix. nonsensical case in cbsfindlargest when size is passed as zero.

Added RangeCopy.

Copied from Perforce
 Change: 184496
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Richard Brooksby 2014-02-24 23:02:42 +00:00
parent f16d920a66
commit 392f089a2c
3 changed files with 17 additions and 3 deletions

View file

@ -764,7 +764,7 @@ static void cbsFindDeleteRange(Range rangeReturn, Range oldRangeReturn,
need to allocate a new block. */
AVER(res == ResOK);
} else
mps_lib_memcpy(oldRangeReturn, rangeReturn, sizeof(RangeStruct));
RangeCopy(oldRangeReturn, rangeReturn);
}
@ -873,8 +873,13 @@ Bool CBSFindLargest(Range rangeReturn, Range oldRangeReturn,
AVER(CBSBlockSize(block) >= maxSize);
RangeInit(&range, CBSBlockBase(block), CBSBlockLimit(block));
AVER(RangeSize(&range) >= maxSize);
cbsFindDeleteRange(rangeReturn, oldRangeReturn, cbs, &range,
size, findDelete);
if (size > 0)
cbsFindDeleteRange(rangeReturn, oldRangeReturn, cbs, &range,
size, findDelete);
else {
RangeCopy(rangeReturn, &range); /* FIXME: sense? */
RangeCopy(oldRangeReturn, &range);
}
}
}

View file

@ -43,6 +43,14 @@ void RangeFinish(Range range)
range->base = range->limit = NULL;
}
void RangeCopy(Range toRange, Range fromRange)
{
AVERT(Range, fromRange);
toRange->base = fromRange->base;
toRange->limit = fromRange->limit;
toRange->sig = RangeSig;
}
Res RangeDescribe(Range range, mps_lib_FILE *stream)
{
Res res;

View file

@ -29,6 +29,7 @@ typedef struct RangeStruct *Range;
extern void RangeInit(Range range, Addr base, Addr limit);
extern void RangeFinish(Range range);
extern void RangeCopy(Range toRange, Range fromRange);
extern Res RangeDescribe(Range range, mps_lib_FILE *stream);
extern Bool RangeCheck(Range range);
extern Bool RangeIsAligned(Range range, Align align);