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,28 +581,41 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject,
} }
else else
{ {
if (Fcb->LastCluster > 0 && if (Fcb->LastCluster > 0)
(Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize) > Fcb->LastOffset) {
if (Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize == Fcb->LastOffset)
{
Cluster = Fcb->LastCluster;
Status = STATUS_SUCCESS;
}
else
{ {
Status = OffsetToCluster(DeviceExt, Fcb->LastCluster, Status = OffsetToCluster(DeviceExt, Fcb->LastCluster,
Fcb->RFCB.AllocationSize.u.LowPart - Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize - Fcb->LastOffset,
ClusterSize - Fcb->LastOffset,
&Cluster, FALSE); &Cluster, FALSE);
} }
}
else else
{ {
Status = OffsetToCluster(DeviceExt, FirstCluster, Status = OffsetToCluster(DeviceExt, FirstCluster,
Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize, Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize,
&Cluster, FALSE); &Cluster, FALSE);
} }
if (!NT_SUCCESS(Status))
{
return Status;
}
if (Fcb->LastCluster == 0)
{
Fcb->LastCluster = Cluster; Fcb->LastCluster = Cluster;
Fcb->LastOffset = Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize; 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))
{ {