Commit 6122eeb5 authored by Mike McCormack's avatar Mike McCormack Committed by Alexandre Julliard

Implemented SetFilePointerEx.

parent 8f9d07f1
...@@ -861,6 +861,52 @@ DWORD WINAPI SetFilePointer( HANDLE hFile, LONG distance, LONG *highword, ...@@ -861,6 +861,52 @@ DWORD WINAPI SetFilePointer( HANDLE hFile, LONG distance, LONG *highword,
/*********************************************************************** /***********************************************************************
* SetFilePointerEx (KERNEL32.@)
*/
BOOL WINAPI SetFilePointerEx( HANDLE hFile, LARGE_INTEGER distance,
LARGE_INTEGER *newpos, DWORD method )
{
static const int whence[3] = { SEEK_SET, SEEK_CUR, SEEK_END };
BOOL ret = FALSE;
NTSTATUS status;
int fd;
TRACE("handle %p offset %s newpos %p origin %ld\n",
hFile, wine_dbgstr_longlong(distance.QuadPart), newpos, method );
if (method > FILE_END)
{
SetLastError( ERROR_INVALID_PARAMETER );
return ret;
}
if (!(status = wine_server_handle_to_fd( hFile, 0, &fd, NULL, NULL )))
{
off_t pos, res;
pos = distance.QuadPart;
if ((res = lseek( fd, pos, whence[method] )) == (off_t)-1)
{
/* also check EPERM due to SuSE7 2.2.16 lseek() EPERM kernel bug */
if (((errno == EINVAL) || (errno == EPERM)) && (method != FILE_BEGIN) && (pos < 0))
SetLastError( ERROR_NEGATIVE_SEEK );
else
FILE_SetDosError();
}
else
{
ret = TRUE;
if( newpos )
newpos->QuadPart = res;
}
wine_server_release_fd( hFile, fd );
}
else SetLastError( RtlNtStatusToDosError(status) );
return ret;
}
/***********************************************************************
* GetFileTime (KERNEL32.@) * GetFileTime (KERNEL32.@)
*/ */
BOOL WINAPI GetFileTime( HANDLE hFile, FILETIME *lpCreationTime, BOOL WINAPI GetFileTime( HANDLE hFile, FILETIME *lpCreationTime,
......
...@@ -777,7 +777,7 @@ ...@@ -777,7 +777,7 @@
@ stdcall SetFileAttributesA(str long) @ stdcall SetFileAttributesA(str long)
@ stdcall SetFileAttributesW(wstr long) @ stdcall SetFileAttributesW(wstr long)
@ stdcall SetFilePointer(long long ptr long) @ stdcall SetFilePointer(long long ptr long)
@ stub SetFilePointerEx @ stdcall SetFilePointerEx(long long long ptr long)
@ stdcall SetFileTime(long ptr ptr ptr) @ stdcall SetFileTime(long ptr ptr ptr)
@ stdcall SetHandleContext(long long) @ stdcall SetHandleContext(long long)
@ stdcall SetHandleCount(long) @ stdcall SetHandleCount(long)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment