private void CropArea(long offset, long allocatedSize)
{
// Get the header info
var headerInfo = new long[2];
ReadAreaHeader(offset, headerInfo);
var header = headerInfo[0];
var freeAreaSize = header;
var sizeDifference = freeAreaSize - allocatedSize;
var isWilderness = (offset == WildernessOffset);
// If the difference is greater than 512 bytes, add the excess space to
// a free bin.
if ((isWilderness && sizeDifference >= 32) || sizeDifference >= 512) {
// Split the area into two areas.
SplitArea(offset, allocatedSize);
long leftOverPointer = offset + allocatedSize;
// Add this area to the bin chain
AddToBinChain(leftOverPointer, sizeDifference);
// If offset is the wilderness area, set this as the new wilderness
if (isWilderness ||
(leftOverPointer + sizeDifference) >= DataAreaEndOffset) {
WildernessOffset = leftOverPointer;
}
} else {
// If offset is the wilderness area, set wilderness to -1
if (isWilderness) {
WildernessOffset = -1;
}
}
}