mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
Use the calculated cluster/offset pair if we extend a file.
svn path=/trunk/; revision=19690
This commit is contained in:
parent
2229e54a12
commit
0c068e7775
1 changed files with 24 additions and 11 deletions
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue