From ff0651e4417313d0a90d1d72f401a92285638eba Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Mon, 7 Mar 2011 20:28:42 +0000 Subject: [PATCH] [FASTFAT] Do not set file attributes in case they are set to 0 or -1 svn path=/trunk/; revision=50995 --- reactos/drivers/filesystems/fastfat/finfo.c | 89 +++++++++++++-------- 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/reactos/drivers/filesystems/fastfat/finfo.c b/reactos/drivers/filesystems/fastfat/finfo.c index 5b18261d6d9..cdadc87e4fa 100644 --- a/reactos/drivers/filesystems/fastfat/finfo.c +++ b/reactos/drivers/filesystems/fastfat/finfo.c @@ -156,43 +156,68 @@ VfatSetBasicInformation(PFILE_OBJECT FileObject, if (FCB->Flags & FCB_IS_FATX_ENTRY) { - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->CreationTime, - &FCB->entry.FatX.CreationDate, - &FCB->entry.FatX.CreationTime); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastAccessTime, - &FCB->entry.FatX.AccessDate, - &FCB->entry.FatX.AccessTime); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastWriteTime, - &FCB->entry.FatX.UpdateDate, - &FCB->entry.FatX.UpdateTime); + if (BasicInfo->CreationTime.QuadPart != 0 && BasicInfo->CreationTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->CreationTime, + &FCB->entry.FatX.CreationDate, + &FCB->entry.FatX.CreationTime); + } + + if (BasicInfo->LastAccessTime.QuadPart != 0 && BasicInfo->LastAccessTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastAccessTime, + &FCB->entry.FatX.AccessDate, + &FCB->entry.FatX.AccessTime); + } + + if (BasicInfo->LastWriteTime.QuadPart != 0 && BasicInfo->LastWriteTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastWriteTime, + &FCB->entry.FatX.UpdateDate, + &FCB->entry.FatX.UpdateTime); + } } else { - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->CreationTime, - &FCB->entry.Fat.CreationDate, - &FCB->entry.Fat.CreationTime); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastAccessTime, - &FCB->entry.Fat.AccessDate, - NULL); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastWriteTime, - &FCB->entry.Fat.UpdateDate, - &FCB->entry.Fat.UpdateTime); + if (BasicInfo->CreationTime.QuadPart != 0 && BasicInfo->CreationTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->CreationTime, + &FCB->entry.Fat.CreationDate, + &FCB->entry.Fat.CreationTime); + } + + if (BasicInfo->LastAccessTime.QuadPart != 0 && BasicInfo->LastAccessTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastAccessTime, + &FCB->entry.Fat.AccessDate, + NULL); + } + + if (BasicInfo->LastWriteTime.QuadPart != 0 && BasicInfo->LastWriteTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastWriteTime, + &FCB->entry.Fat.UpdateDate, + &FCB->entry.Fat.UpdateTime); + } } - *FCB->Attributes = (unsigned char)((*FCB->Attributes & - (FILE_ATTRIBUTE_DIRECTORY | 0x48)) | - (BasicInfo->FileAttributes & - (FILE_ATTRIBUTE_ARCHIVE | - FILE_ATTRIBUTE_SYSTEM | - FILE_ATTRIBUTE_HIDDEN | - FILE_ATTRIBUTE_READONLY))); - DPRINT("Setting attributes 0x%02x\n", *FCB->Attributes); + if (BasicInfo->FileAttributes) + { + *FCB->Attributes = (unsigned char)((*FCB->Attributes & + (FILE_ATTRIBUTE_DIRECTORY | 0x48)) | + (BasicInfo->FileAttributes & + (FILE_ATTRIBUTE_ARCHIVE | + FILE_ATTRIBUTE_SYSTEM | + FILE_ATTRIBUTE_HIDDEN | + FILE_ATTRIBUTE_READONLY))); + DPRINT("Setting attributes 0x%02x\n", *FCB->Attributes); + } VfatUpdateEntry(FCB); -- 2.17.1