public override void WriteBytes(byte[] b, int offset, int len)
{
long freeSpace = dir.maxSize - dir.SizeInBytes();
long realUsage = 0;
// If MockRAMDir crashed since we were opened, then
// don't write anything:
if (dir.crashed)
{
throw new System.IO.IOException("MockRAMDirectory was crashed; cannot write to " + name);
}
// Enforce disk full:
if (dir.maxSize != 0 && freeSpace <= len)
{
// Compute the real disk free. This will greatly slow
// down our test but makes it more accurate:
realUsage = dir.GetRecomputedActualSizeInBytes();
freeSpace = dir.maxSize - realUsage;
}
if (dir.maxSize != 0 && freeSpace <= len)
{
if (freeSpace > 0 && freeSpace < len)
{
realUsage += freeSpace;
base.WriteBytes(b, offset, (int)freeSpace);
}
if (realUsage > dir.maxUsedSize)
{
dir.maxUsedSize = realUsage;
}
throw new System.IO.IOException("fake disk full at " + dir.GetRecomputedActualSizeInBytes() + " bytes when writing " + name);
}
else
{
base.WriteBytes(b, offset, len);
}
dir.MaybeThrowDeterministicException();
if (first)
{
// Maybe throw random exception; only do this on first
// write to a new file:
first = false;
dir.MaybeThrowIOException();
}
}