Use the calculated cluster/offset pair if we extend a file.

svn path=/trunk/; revision=19690
This commit is contained in:
Hartmut Birr 2005-11-27 15:53:46 +00:00
parent 2229e54a12
commit 0c068e7775

View file

@ -581,13 +581,19 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject,
} }
else else
{ {
if (Fcb->LastCluster > 0 && if (Fcb->LastCluster > 0)
(Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize) > Fcb->LastOffset)
{ {
Status = OffsetToCluster(DeviceExt, Fcb->LastCluster, if (Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize == Fcb->LastOffset)
Fcb->RFCB.AllocationSize.u.LowPart - {
ClusterSize - Fcb->LastOffset, Cluster = Fcb->LastCluster;
&Cluster, FALSE); Status = STATUS_SUCCESS;
}
else
{
Status = OffsetToCluster(DeviceExt, Fcb->LastCluster,
Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize - Fcb->LastOffset,
&Cluster, FALSE);
}
} }
else else
{ {
@ -595,15 +601,22 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject,
Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize, Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize,
&Cluster, FALSE); &Cluster, FALSE);
} }
if (!NT_SUCCESS(Status))
{
return Status;
}
Fcb->LastCluster = Cluster; if (Fcb->LastCluster == 0)
Fcb->LastOffset = Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize; {
Fcb->LastCluster = Cluster;
Fcb->LastOffset = Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize;
}
/* FIXME: Check status */ /* FIXME: Check status */
/* Cluster points now to the last cluster within the chain */ /* Cluster points now to the last cluster within the chain */
Status = OffsetToCluster(DeviceExt, FirstCluster, Status = OffsetToCluster(DeviceExt, Cluster,
ROUND_DOWN(NewSize - 1, ClusterSize), ROUND_DOWN(NewSize - 1, ClusterSize) - Fcb->LastOffset,
&NCluster, TRUE); &NCluster, TRUE);
if (NCluster == 0xffffffff || !NT_SUCCESS(Status)) if (NCluster == 0xffffffff || !NT_SUCCESS(Status))
{ {
/* disk is full */ /* disk is full */