/* Check volume label bit */
ASSERT(0 == (*FCB->Attributes & _A_VOLID));
- if (BooleanFlagOn(FCB->Flags, FCB_IS_FATX_ENTRY))
+ if (vfatVolumeIsFatX(DeviceExt))
{
if (BasicInfo->CreationTime.QuadPart != 0 && BasicInfo->CreationTime.QuadPart != -1)
{
DPRINT("Setting attributes 0x%02x\n", *FCB->Attributes);
}
- VfatUpdateEntry(FCB);
+ VfatUpdateEntry(FCB, vfatVolumeIsFatX(DeviceExt));
return STATUS_SUCCESS;
}
if (*BufferLength < sizeof(FILE_BASIC_INFORMATION))
return STATUS_BUFFER_OVERFLOW;
- if (BooleanFlagOn(FCB->Flags, FCB_IS_FATX_ENTRY))
+ if (vfatVolumeIsFatX(DeviceExt))
{
FsdDosDateTimeToSystemTime(DeviceExt,
FCB->entry.FatX.CreationDate,
PDEVICE_OBJECT DeviceObject,
PFILE_DISPOSITION_INFORMATION DispositionInfo)
{
-#if DBG
PDEVICE_EXTENSION DeviceExt = DeviceObject->DeviceExtension;
-#endif
DPRINT("FsdSetDispositionInformation(<%wZ>, Delete %u)\n", &FCB->PathNameU, DispositionInfo->DeleteFile);
return STATUS_CANNOT_DELETE;
}
- if (vfatFCBIsDirectory(FCB) && !VfatIsDirectoryEmpty(FCB))
+ if (vfatFCBIsDirectory(FCB) && !VfatIsDirectoryEmpty(FCB, vfatVolumeIsFatX(DeviceExt)))
{
/* can't delete a non-empty directory */
if (*BufferLength < sizeof(FILE_NETWORK_OPEN_INFORMATION))
return(STATUS_BUFFER_OVERFLOW);
- if (BooleanFlagOn(Fcb->Flags, FCB_IS_FATX_ENTRY))
+ if (vfatVolumeIsFatX(DeviceExt))
{
FsdDosDateTimeToSystemTime(DeviceExt,
Fcb->entry.FatX.CreationDate,
PFILE_OBJECT FileObject,
PVFATFCB Fcb,
ULONG Size,
- ULONG ClusterSize)
+ ULONG ClusterSize,
+ BOOLEAN IsFatX)
{
if (Size > 0)
{
}
if (!vfatFCBIsDirectory(Fcb))
{
- if (BooleanFlagOn(Fcb->Flags, FCB_IS_FATX_ENTRY))
+ if (IsFatX)
Fcb->entry.FatX.FileSize = Size;
else
Fcb->entry.Fat.FileSize = Size;
ULONG ClusterSize = DeviceExt->FatInfo.BytesPerCluster;
ULONG NewSize = AllocationSize->u.LowPart;
ULONG NCluster;
- BOOLEAN AllocSizeChanged = FALSE, IsFatX = BooleanFlagOn(Fcb->Flags, FCB_IS_FATX_ENTRY);
+ BOOLEAN AllocSizeChanged = FALSE, IsFatX = vfatVolumeIsFatX(DeviceExt);
DPRINT("VfatSetAllocationSizeInformation(File <%wZ>, AllocationSize %d %u)\n",
&Fcb->PathNameU, AllocationSize->HighPart, AllocationSize->LowPart);
return STATUS_DISK_FULL;
}
}
- UpdateFileSize(FileObject, Fcb, NewSize, ClusterSize);
+ UpdateFileSize(FileObject, Fcb, NewSize, ClusterSize, vfatVolumeIsFatX(DeviceExt));
}
else if (NewSize + ClusterSize <= Fcb->RFCB.AllocationSize.u.LowPart)
{
AllocSizeChanged = TRUE;
/* FIXME: Use the cached cluster/offset better way. */
Fcb->LastCluster = Fcb->LastOffset = 0;
- UpdateFileSize(FileObject, Fcb, NewSize, ClusterSize);
+ UpdateFileSize(FileObject, Fcb, NewSize, ClusterSize, vfatVolumeIsFatX(DeviceExt));
if (NewSize > 0)
{
Status = OffsetToCluster(DeviceExt, FirstCluster,
}
else
{
- UpdateFileSize(FileObject, Fcb, NewSize, ClusterSize);
+ UpdateFileSize(FileObject, Fcb, NewSize, ClusterSize, vfatVolumeIsFatX(DeviceExt));
}
/* Update the on-disk directory entry */
Fcb->Flags |= FCB_IS_DIRTY;
if (AllocSizeChanged)
{
- VfatUpdateEntry(Fcb);
+ VfatUpdateEntry(Fcb, vfatVolumeIsFatX(DeviceExt));
}
return STATUS_SUCCESS;
}