129 lines
3.5 KiB
C
129 lines
3.5 KiB
C
/*
|
|
* Win32 threads
|
|
*
|
|
* Copyright 1996 Alexandre Julliard
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "wine/port.h"
|
|
|
|
#include <assert.h>
|
|
#include <fcntl.h>
|
|
#include <sys/types.h>
|
|
#ifdef HAVE_SYS_MMAN_H
|
|
#include <sys/mman.h>
|
|
#endif
|
|
#ifdef HAVE_SYS_TIMES_H
|
|
#include <sys/times.h>
|
|
#endif
|
|
#ifdef HAVE_UNISTD_H
|
|
# include <unistd.h>
|
|
#endif
|
|
#include "wine/winbase16.h"
|
|
#include "ntstatus.h"
|
|
#include "thread.h"
|
|
#include "winerror.h"
|
|
#include "winnt.h"
|
|
#include "wine/server.h"
|
|
#include "wine/debug.h"
|
|
#include "winnls.h"
|
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(thread);
|
|
|
|
|
|
#ifdef __i386__
|
|
|
|
/***********************************************************************
|
|
* SetLastError (KERNEL.147)
|
|
* SetLastError (KERNEL32.@)
|
|
*/
|
|
/* void WINAPI SetLastError( DWORD error ); */
|
|
__ASM_GLOBAL_FUNC( SetLastError,
|
|
"movl 4(%esp),%eax\n\t"
|
|
".byte 0x64\n\t"
|
|
"movl %eax,0x60\n\t"
|
|
"ret $4" );
|
|
|
|
/***********************************************************************
|
|
* GetLastError (KERNEL.148)
|
|
* GetLastError (KERNEL32.@)
|
|
*/
|
|
/* DWORD WINAPI GetLastError(void); */
|
|
__ASM_GLOBAL_FUNC( GetLastError, ".byte 0x64\n\tmovl 0x60,%eax\n\tret" );
|
|
|
|
/***********************************************************************
|
|
* GetCurrentProcessId (KERNEL.471)
|
|
* GetCurrentProcessId (KERNEL32.@)
|
|
*/
|
|
/* DWORD WINAPI GetCurrentProcessId(void) */
|
|
__ASM_GLOBAL_FUNC( GetCurrentProcessId, ".byte 0x64\n\tmovl 0x20,%eax\n\tret" );
|
|
|
|
/***********************************************************************
|
|
* GetCurrentThreadId (KERNEL.462)
|
|
* GetCurrentThreadId (KERNEL32.@)
|
|
*/
|
|
/* DWORD WINAPI GetCurrentThreadId(void) */
|
|
__ASM_GLOBAL_FUNC( GetCurrentThreadId, ".byte 0x64\n\tmovl 0x24,%eax\n\tret" );
|
|
|
|
#else /* __i386__ */
|
|
|
|
/**********************************************************************
|
|
* SetLastError (KERNEL.147)
|
|
* SetLastError (KERNEL32.@)
|
|
*
|
|
* Sets the last-error code.
|
|
*/
|
|
void WINAPI SetLastError( DWORD error ) /* [in] Per-thread error code */
|
|
{
|
|
NtCurrentTeb()->last_error = error;
|
|
}
|
|
|
|
/**********************************************************************
|
|
* GetLastError (KERNEL.148)
|
|
* GetLastError (KERNEL32.@)
|
|
*
|
|
* Returns last-error code.
|
|
*/
|
|
DWORD WINAPI GetLastError(void)
|
|
{
|
|
return NtCurrentTeb()->last_error;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* GetCurrentProcessId (KERNEL.471)
|
|
* GetCurrentProcessId (KERNEL32.@)
|
|
*
|
|
* Returns process identifier.
|
|
*/
|
|
DWORD WINAPI GetCurrentProcessId(void)
|
|
{
|
|
return (DWORD)NtCurrentTeb()->ClientId.UniqueProcess;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* GetCurrentThreadId (KERNEL.462)
|
|
* GetCurrentThreadId (KERNEL32.@)
|
|
*
|
|
* Returns thread identifier.
|
|
*/
|
|
DWORD WINAPI GetCurrentThreadId(void)
|
|
{
|
|
return (DWORD)NtCurrentTeb()->ClientId.UniqueThread;
|
|
}
|
|
|
|
#endif /* __i386__ */
|