mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 09:50:07 +00:00
- Fixed the directory index of a file for FATX.
- Check for the file size before eache call to CcMapData. W2K doesnt like to map over the end of a directory. svn path=/trunk/; revision=13284
This commit is contained in:
parent
0d6305b3bc
commit
0bc04189e7
|
@ -175,7 +175,8 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
|||
{
|
||||
CcUnpinData(*pContext);
|
||||
}
|
||||
if (!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
{
|
||||
*pContext = NULL;
|
||||
return STATUS_NO_MORE_ENTRIES;
|
||||
|
@ -204,7 +205,8 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
|||
{
|
||||
CcUnpinData(*pContext);
|
||||
FileOffset.u.LowPart -= PAGE_SIZE;
|
||||
if (!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
{
|
||||
CHECKPOINT;
|
||||
*pContext = NULL;
|
||||
|
@ -228,7 +230,8 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
|||
{
|
||||
CcUnpinData(*pContext);
|
||||
FileOffset.u.LowPart += PAGE_SIZE;
|
||||
if (!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
{
|
||||
CHECKPOINT;
|
||||
*pContext = NULL;
|
||||
|
@ -325,7 +328,8 @@ NTSTATUS FATGetNextDirEntry(PVOID * pContext,
|
|||
{
|
||||
CcUnpinData(*pContext);
|
||||
FileOffset.u.LowPart += PAGE_SIZE;
|
||||
if (!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
{
|
||||
CHECKPOINT;
|
||||
*pContext = NULL;
|
||||
|
@ -361,7 +365,6 @@ NTSTATUS FATXGetNextDirEntry(PVOID * pContext,
|
|||
ULONG DirIndex = DirContext->DirIndex;
|
||||
|
||||
FileOffset.u.HighPart = 0;
|
||||
FileOffset.u.LowPart = ROUND_DOWN(DirContext->DirIndex * sizeof(FATX_DIR_ENTRY), PAGE_SIZE);
|
||||
|
||||
if (!vfatFCBIsRoot(pDirFcb))
|
||||
{
|
||||
|
@ -403,7 +406,9 @@ NTSTATUS FATXGetNextDirEntry(PVOID * pContext,
|
|||
{
|
||||
CcUnpinData(*pContext);
|
||||
}
|
||||
if (!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
FileOffset.u.LowPart = ROUND_DOWN(DirIndex * sizeof(FATX_DIR_ENTRY), PAGE_SIZE);
|
||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
{
|
||||
*pContext = NULL;
|
||||
return STATUS_NO_MORE_ENTRIES;
|
||||
|
@ -412,7 +417,7 @@ NTSTATUS FATXGetNextDirEntry(PVOID * pContext,
|
|||
|
||||
fatxDirEntry = (PFATX_DIR_ENTRY)(*pPage) + DirIndex % FATX_ENTRIES_PER_PAGE;
|
||||
|
||||
DirContext->StartIndex = DirIndex;
|
||||
DirContext->StartIndex = DirContext->DirIndex;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
|
@ -430,11 +435,13 @@ NTSTATUS FATXGetNextDirEntry(PVOID * pContext,
|
|||
}
|
||||
DirContext->DirIndex++;
|
||||
DirContext->StartIndex++;
|
||||
if ((DirContext->DirIndex % FATX_ENTRIES_PER_PAGE) == 0)
|
||||
DirIndex++;
|
||||
if ((DirIndex % FATX_ENTRIES_PER_PAGE) == 0)
|
||||
{
|
||||
CcUnpinData(*pContext);
|
||||
FileOffset.u.LowPart += PAGE_SIZE;
|
||||
if (!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
if (FileOffset.u.LowPart >= pDirFcb->RFCB.FileSize.u.LowPart ||
|
||||
!CcMapData(pDirFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, pContext, pPage))
|
||||
{
|
||||
CHECKPOINT;
|
||||
*pContext = NULL;
|
||||
|
|
Loading…
Reference in a new issue