private long ExpandDataArea(long minSize)
{
long endOfDataArea = DataAreaEndOffset;
// Round all sizes up to the nearest 8
// We grow only by a small amount if the area is small, and a large amount
// if the area is large.
long overGrow = endOfDataArea / 64;
long d = (overGrow & 0x07L);
if (d != 0)
overGrow = overGrow + (8 - d);
overGrow = System.Math.Min(overGrow, 262144L);
if (overGrow < 1024)
overGrow = 1024;
long growBy = minSize + overGrow;
long newFileLength = endOfDataArea + growBy;
SetDataAreaSize(newFileLength);
return growBy;
}