mirror of
https://github.com/reactos/reactos.git
synced 2024-07-02 02:34:53 +00:00
- Make this shit readable -- oh wait this is a commit message... Clean up indentation a bit.
svn path=/trunk/; revision=37779
This commit is contained in:
parent
f3818b0b92
commit
eaac85ec75
|
@ -36,7 +36,9 @@ vfatDirEntryGetFirstCluster (PDEVICE_EXTENSION pDeviceExt,
|
||||||
return cluster;
|
return cluster;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOLEAN FATIsDirectoryEmpty(PVFATFCB Fcb)
|
static
|
||||||
|
BOOLEAN
|
||||||
|
FATIsDirectoryEmpty(PVFATFCB Fcb)
|
||||||
{
|
{
|
||||||
LARGE_INTEGER FileOffset;
|
LARGE_INTEGER FileOffset;
|
||||||
PVOID Context = NULL;
|
PVOID Context = NULL;
|
||||||
|
@ -63,40 +65,47 @@ static BOOLEAN FATIsDirectoryEmpty(PVFATFCB Fcb)
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CcMapData(Fcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&FatDirEntry))
|
if (!CcMapData(Fcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&FatDirEntry))
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FatDirEntry += Index % FAT_ENTRIES_PER_PAGE;
|
FatDirEntry += Index % FAT_ENTRIES_PER_PAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAT_ENTRY_END(FatDirEntry))
|
if (FAT_ENTRY_END(FatDirEntry))
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!FAT_ENTRY_DELETED(FatDirEntry))
|
if (!FAT_ENTRY_DELETED(FatDirEntry))
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Index++;
|
Index++;
|
||||||
FatDirEntry++;
|
FatDirEntry++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Context)
|
if (Context)
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOLEAN FATXIsDirectoryEmpty(PVFATFCB Fcb)
|
static
|
||||||
|
BOOLEAN
|
||||||
|
FATXIsDirectoryEmpty(PVFATFCB Fcb)
|
||||||
{
|
{
|
||||||
LARGE_INTEGER FileOffset;
|
LARGE_INTEGER FileOffset;
|
||||||
PVOID Context = NULL;
|
PVOID Context = NULL;
|
||||||
PFATX_DIR_ENTRY FatXDirEntry;
|
PFATX_DIR_ENTRY FatXDirEntry;
|
||||||
ULONG Index, MaxIndex;
|
ULONG Index = 0, MaxIndex;
|
||||||
|
|
||||||
Index = 0;
|
|
||||||
|
|
||||||
FileOffset.QuadPart = 0;
|
FileOffset.QuadPart = 0;
|
||||||
MaxIndex = Fcb->RFCB.FileSize.u.LowPart / sizeof(FATX_DIR_ENTRY);
|
MaxIndex = Fcb->RFCB.FileSize.u.LowPart / sizeof(FATX_DIR_ENTRY);
|
||||||
|
@ -109,33 +118,41 @@ static BOOLEAN FATXIsDirectoryEmpty(PVFATFCB Fcb)
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CcMapData(Fcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&FatXDirEntry))
|
if (!CcMapData(Fcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&FatXDirEntry))
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FatXDirEntry += Index % FATX_ENTRIES_PER_PAGE;
|
FatXDirEntry += Index % FATX_ENTRIES_PER_PAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FATX_ENTRY_END(FatXDirEntry))
|
if (FATX_ENTRY_END(FatXDirEntry))
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!FATX_ENTRY_DELETED(FatXDirEntry))
|
if (!FATX_ENTRY_DELETED(FatXDirEntry))
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Index++;
|
Index++;
|
||||||
FatXDirEntry++;
|
FatXDirEntry++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Context)
|
if (Context)
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN VfatIsDirectoryEmpty(PVFATFCB Fcb)
|
BOOLEAN
|
||||||
|
VfatIsDirectoryEmpty(PVFATFCB Fcb)
|
||||||
{
|
{
|
||||||
if (Fcb->Flags & FCB_IS_FATX_ENTRY)
|
if (Fcb->Flags & FCB_IS_FATX_ENTRY)
|
||||||
return FATXIsDirectoryEmpty(Fcb);
|
return FATXIsDirectoryEmpty(Fcb);
|
||||||
|
@ -143,8 +160,9 @@ BOOLEAN VfatIsDirectoryEmpty(PVFATFCB Fcb)
|
||||||
return FATIsDirectoryEmpty(Fcb);
|
return FATIsDirectoryEmpty(Fcb);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
NTSTATUS
|
||||||
PVOID * pPage,
|
FATGetNextDirEntry(PVOID *pContext,
|
||||||
|
PVOID *pPage,
|
||||||
IN PVFATFCB pDirFcb,
|
IN PVFATFCB pDirFcb,
|
||||||
PVFAT_DIRENTRY_CONTEXT DirContext,
|
PVFAT_DIRENTRY_CONTEXT DirContext,
|
||||||
BOOLEAN First)
|
BOOLEAN First)
|
||||||
|
@ -172,6 +190,7 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
{
|
{
|
||||||
CcUnpinData(*pContext);
|
CcUnpinData(*pContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||||
{
|
{
|
||||||
|
@ -180,7 +199,6 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fatDirEntry = (PFAT_DIR_ENTRY)(*pPage) + DirContext->DirIndex % FAT_ENTRIES_PER_PAGE;
|
fatDirEntry = (PFAT_DIR_ENTRY)(*pPage) + DirContext->DirIndex % FAT_ENTRIES_PER_PAGE;
|
||||||
longNameEntry = (slot*) fatDirEntry;
|
longNameEntry = (slot*) fatDirEntry;
|
||||||
dirMap = 0;
|
dirMap = 0;
|
||||||
|
@ -198,16 +216,19 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
{
|
{
|
||||||
DirContext->DirIndex--;
|
DirContext->DirIndex--;
|
||||||
Back = TRUE;
|
Back = TRUE;
|
||||||
|
|
||||||
if ((DirContext->DirIndex % FAT_ENTRIES_PER_PAGE) == FAT_ENTRIES_PER_PAGE - 1)
|
if ((DirContext->DirIndex % FAT_ENTRIES_PER_PAGE) == FAT_ENTRIES_PER_PAGE - 1)
|
||||||
{
|
{
|
||||||
CcUnpinData(*pContext);
|
CcUnpinData(*pContext);
|
||||||
FileOffset.u.LowPart -= PAGE_SIZE;
|
FileOffset.u.LowPart -= PAGE_SIZE;
|
||||||
|
|
||||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||||
{
|
{
|
||||||
*pContext = NULL;
|
*pContext = NULL;
|
||||||
return STATUS_NO_MORE_ENTRIES;
|
return STATUS_NO_MORE_ENTRIES;
|
||||||
}
|
}
|
||||||
|
|
||||||
fatDirEntry = (PFAT_DIR_ENTRY)(*pPage) + DirContext->DirIndex % FAT_ENTRIES_PER_PAGE;
|
fatDirEntry = (PFAT_DIR_ENTRY)(*pPage) + DirContext->DirIndex % FAT_ENTRIES_PER_PAGE;
|
||||||
longNameEntry = (slot*) fatDirEntry;
|
longNameEntry = (slot*) fatDirEntry;
|
||||||
}
|
}
|
||||||
|
@ -222,16 +243,19 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
(FAT_ENTRY_DELETED(fatDirEntry) || !FAT_ENTRY_LONG(fatDirEntry)))
|
(FAT_ENTRY_DELETED(fatDirEntry) || !FAT_ENTRY_LONG(fatDirEntry)))
|
||||||
{
|
{
|
||||||
DirContext->DirIndex++;
|
DirContext->DirIndex++;
|
||||||
|
|
||||||
if ((DirContext->DirIndex % FAT_ENTRIES_PER_PAGE) == 0)
|
if ((DirContext->DirIndex % FAT_ENTRIES_PER_PAGE) == 0)
|
||||||
{
|
{
|
||||||
CcUnpinData(*pContext);
|
CcUnpinData(*pContext);
|
||||||
FileOffset.u.LowPart += PAGE_SIZE;
|
FileOffset.u.LowPart += PAGE_SIZE;
|
||||||
|
|
||||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||||
{
|
{
|
||||||
*pContext = NULL;
|
*pContext = NULL;
|
||||||
return STATUS_NO_MORE_ENTRIES;
|
return STATUS_NO_MORE_ENTRIES;
|
||||||
}
|
}
|
||||||
|
|
||||||
fatDirEntry = (PFAT_DIR_ENTRY)*pPage;
|
fatDirEntry = (PFAT_DIR_ENTRY)*pPage;
|
||||||
longNameEntry = (slot*) *pPage;
|
longNameEntry = (slot*) *pPage;
|
||||||
}
|
}
|
||||||
|
@ -273,7 +297,7 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
Valid = TRUE;
|
Valid = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT (" name chunk1:[%.*S] chunk2:[%.*S] chunk3:[%.*S]\n",
|
DPRINT(" name chunk1:[%.*S] chunk2:[%.*S] chunk3:[%.*S]\n",
|
||||||
5, longNameEntry->name0_4,
|
5, longNameEntry->name0_4,
|
||||||
6, longNameEntry->name5_10,
|
6, longNameEntry->name5_10,
|
||||||
2, longNameEntry->name11_12);
|
2, longNameEntry->name11_12);
|
||||||
|
@ -287,6 +311,7 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
RtlCopyMemory(pName + 11, longNameEntry->name11_12, 2 * sizeof(WCHAR));
|
RtlCopyMemory(pName + 11, longNameEntry->name11_12, 2 * sizeof(WCHAR));
|
||||||
|
|
||||||
DPRINT (" longName: [%S]\n", DirContext->LongNameU.Buffer);
|
DPRINT (" longName: [%S]\n", DirContext->LongNameU.Buffer);
|
||||||
|
|
||||||
if (CheckSum != longNameEntry->alias_checksum)
|
if (CheckSum != longNameEntry->alias_checksum)
|
||||||
{
|
{
|
||||||
DPRINT1("Found wrong alias checksum in long name entry (first %x, current %x, %S)\n",
|
DPRINT1("Found wrong alias checksum in long name entry (first %x, current %x, %S)\n",
|
||||||
|
@ -303,12 +328,14 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
| ((shortCheckSum & 0xfe) >> 1))
|
| ((shortCheckSum & 0xfe) >> 1))
|
||||||
+ fatDirEntry->ShortName[i];
|
+ fatDirEntry->ShortName[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shortCheckSum != CheckSum && DirContext->LongNameU.Buffer[0])
|
if (shortCheckSum != CheckSum && DirContext->LongNameU.Buffer[0])
|
||||||
{
|
{
|
||||||
DPRINT1("Checksum from long and short name is not equal (short: %x, long: %x, %S)\n",
|
DPRINT1("Checksum from long and short name is not equal (short: %x, long: %x, %S)\n",
|
||||||
shortCheckSum, CheckSum, DirContext->LongNameU.Buffer);
|
shortCheckSum, CheckSum, DirContext->LongNameU.Buffer);
|
||||||
DirContext->LongNameU.Buffer[0] = 0;
|
DirContext->LongNameU.Buffer[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Valid == FALSE)
|
if (Valid == FALSE)
|
||||||
{
|
{
|
||||||
DirContext->LongNameU.Buffer[0] = 0;
|
DirContext->LongNameU.Buffer[0] = 0;
|
||||||
|
@ -318,17 +345,21 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DirContext->DirIndex++;
|
DirContext->DirIndex++;
|
||||||
|
|
||||||
if ((DirContext->DirIndex % FAT_ENTRIES_PER_PAGE) == 0)
|
if ((DirContext->DirIndex % FAT_ENTRIES_PER_PAGE) == 0)
|
||||||
{
|
{
|
||||||
CcUnpinData(*pContext);
|
CcUnpinData(*pContext);
|
||||||
FileOffset.u.LowPart += PAGE_SIZE;
|
FileOffset.u.LowPart += PAGE_SIZE;
|
||||||
|
|
||||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||||
{
|
{
|
||||||
*pContext = NULL;
|
*pContext = NULL;
|
||||||
return STATUS_NO_MORE_ENTRIES;
|
return STATUS_NO_MORE_ENTRIES;
|
||||||
}
|
}
|
||||||
|
|
||||||
fatDirEntry = (PFAT_DIR_ENTRY)*pPage;
|
fatDirEntry = (PFAT_DIR_ENTRY)*pPage;
|
||||||
longNameEntry = (slot*) *pPage;
|
longNameEntry = (slot*) *pPage;
|
||||||
}
|
}
|
||||||
|
@ -338,12 +369,15 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
||||||
longNameEntry++;
|
longNameEntry++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DirContext->LongNameU.Length = wcslen(DirContext->LongNameU.Buffer) * sizeof(WCHAR);
|
DirContext->LongNameU.Length = wcslen(DirContext->LongNameU.Buffer) * sizeof(WCHAR);
|
||||||
vfat8Dot3ToString(&DirContext->DirEntry.Fat, &DirContext->ShortNameU);
|
vfat8Dot3ToString(&DirContext->DirEntry.Fat, &DirContext->ShortNameU);
|
||||||
|
|
||||||
if (DirContext->LongNameU.Length == 0)
|
if (DirContext->LongNameU.Length == 0)
|
||||||
{
|
{
|
||||||
RtlCopyUnicodeString(&DirContext->LongNameU, &DirContext->ShortNameU);
|
RtlCopyUnicodeString(&DirContext->LongNameU, &DirContext->ShortNameU);
|
||||||
}
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue