- 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:
Stefan Ginsberg 2008-11-30 20:12:04 +00:00
parent f3818b0b92
commit eaac85ec75

View file

@ -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;
} }