fix all cabinet fdi winetests (except the ones marked as (todo_wine)

svn path=/trunk/; revision=35973
This commit is contained in:
Christoph von Wittich 2008-09-06 06:35:07 +00:00
parent 9e8367f15e
commit b0a663b4a6

View file

@ -376,9 +376,9 @@ FlushFileBuffers(HANDLE hFile)
*/ */
DWORD STDCALL DWORD STDCALL
SetFilePointer(HANDLE hFile, SetFilePointer(HANDLE hFile,
LONG lDistanceToMove, LONG lDistanceToMove,
PLONG lpDistanceToMoveHigh, PLONG lpDistanceToMoveHigh,
DWORD dwMoveMethod) DWORD dwMoveMethod)
{ {
FILE_POSITION_INFORMATION FilePosition; FILE_POSITION_INFORMATION FilePosition;
FILE_STANDARD_INFORMATION FileStandard; FILE_STANDARD_INFORMATION FileStandard;
@ -387,12 +387,12 @@ SetFilePointer(HANDLE hFile,
LARGE_INTEGER Distance; LARGE_INTEGER Distance;
TRACE("SetFilePointer(hFile %x, lDistanceToMove %d, dwMoveMethod %d)\n", TRACE("SetFilePointer(hFile %x, lDistanceToMove %d, dwMoveMethod %d)\n",
hFile,lDistanceToMove,dwMoveMethod); hFile,lDistanceToMove,dwMoveMethod);
if(IsConsoleHandle(hFile)) if(IsConsoleHandle(hFile))
{ {
SetLastError(ERROR_INVALID_HANDLE); SetLastError(ERROR_INVALID_HANDLE);
return -1; return INVALID_SET_FILE_POINTER;
} }
if (lpDistanceToMoveHigh) if (lpDistanceToMoveHigh)
@ -408,34 +408,48 @@ SetFilePointer(HANDLE hFile,
switch(dwMoveMethod) switch(dwMoveMethod)
{ {
case FILE_CURRENT: case FILE_CURRENT:
NtQueryInformationFile(hFile, errCode = NtQueryInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FilePosition, &FilePosition,
sizeof(FILE_POSITION_INFORMATION), sizeof(FILE_POSITION_INFORMATION),
FilePositionInformation); FilePositionInformation);
FilePosition.CurrentByteOffset.QuadPart += Distance.QuadPart; FilePosition.CurrentByteOffset.QuadPart += Distance.QuadPart;
break; if (!NT_SUCCESS(errCode))
{
if (lpDistanceToMoveHigh != NULL)
*lpDistanceToMoveHigh = -1;
SetLastErrorByStatus(errCode);
return INVALID_SET_FILE_POINTER;
}
break;
case FILE_END: case FILE_END:
NtQueryInformationFile(hFile, errCode = NtQueryInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FileStandard, &FileStandard,
sizeof(FILE_STANDARD_INFORMATION), sizeof(FILE_STANDARD_INFORMATION),
FileStandardInformation); FileStandardInformation);
FilePosition.CurrentByteOffset.QuadPart = FilePosition.CurrentByteOffset.QuadPart =
FileStandard.EndOfFile.QuadPart + Distance.QuadPart; FileStandard.EndOfFile.QuadPart + Distance.QuadPart;
break; if (!NT_SUCCESS(errCode))
{
if (lpDistanceToMoveHigh != NULL)
*lpDistanceToMoveHigh = -1;
SetLastErrorByStatus(errCode);
return INVALID_SET_FILE_POINTER;
}
break;
case FILE_BEGIN: case FILE_BEGIN:
FilePosition.CurrentByteOffset.QuadPart = Distance.QuadPart; FilePosition.CurrentByteOffset.QuadPart = Distance.QuadPart;
break; break;
default: default:
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return -1; return INVALID_SET_FILE_POINTER;
} }
if(FilePosition.CurrentByteOffset.QuadPart < 0) if(FilePosition.CurrentByteOffset.QuadPart < 0)
{ {
SetLastError(ERROR_NEGATIVE_SEEK); SetLastError(ERROR_NEGATIVE_SEEK);
return -1; return INVALID_SET_FILE_POINTER;
} }
if (lpDistanceToMoveHigh == NULL && FilePosition.CurrentByteOffset.HighPart != 0) if (lpDistanceToMoveHigh == NULL && FilePosition.CurrentByteOffset.HighPart != 0)
@ -443,21 +457,21 @@ SetFilePointer(HANDLE hFile,
/* If we're moving the pointer outside of the 32 bit boundaries but /* If we're moving the pointer outside of the 32 bit boundaries but
the application only passed a 32 bit value we need to bail out! */ the application only passed a 32 bit value we need to bail out! */
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return -1; return INVALID_SET_FILE_POINTER;
} }
errCode = NtSetInformationFile(hFile, errCode = NtSetInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FilePosition, &FilePosition,
sizeof(FILE_POSITION_INFORMATION), sizeof(FILE_POSITION_INFORMATION),
FilePositionInformation); FilePositionInformation);
if (!NT_SUCCESS(errCode)) if (!NT_SUCCESS(errCode))
{ {
if (lpDistanceToMoveHigh != NULL) if (lpDistanceToMoveHigh != NULL)
*lpDistanceToMoveHigh = -1; *lpDistanceToMoveHigh = -1;
SetLastErrorByStatus(errCode); SetLastErrorByStatus(errCode);
return -1; return INVALID_SET_FILE_POINTER;
} }
if (lpDistanceToMoveHigh != NULL) if (lpDistanceToMoveHigh != NULL)