Moved errno_location support to sysdeps.c.
This commit is contained in:
parent
9037f4bbfe
commit
b59bf98b93
|
@ -147,6 +147,7 @@ extern TEB *THREAD_IdToTEB( DWORD id );
|
|||
/* scheduler/sysdeps.c */
|
||||
extern int SYSDEPS_SpawnThread( TEB *teb );
|
||||
extern void SYSDEPS_SetCurThread( TEB *teb );
|
||||
extern void SYSDEPS_InitErrno(void);
|
||||
extern void DECLSPEC_NORETURN SYSDEPS_ExitThread( int status );
|
||||
extern void DECLSPEC_NORETURN SYSDEPS_AbortThread( int status );
|
||||
extern void DECLSPEC_NORETURN SYSDEPS_SwitchToThreadStack( void (*func)(void) );
|
||||
|
|
|
@ -22,45 +22,6 @@
|
|||
|
||||
#include <assert.h>
|
||||
|
||||
/* default errno before threading is initialized */
|
||||
static int *default_errno_location(void)
|
||||
{
|
||||
static int errno;
|
||||
return &errno;
|
||||
}
|
||||
|
||||
/* default h_errno before threading is initialized */
|
||||
static int *default_h_errno_location(void)
|
||||
{
|
||||
static int h_errno;
|
||||
return &h_errno;
|
||||
}
|
||||
|
||||
int* (*wine_errno_location)(void) = default_errno_location;
|
||||
int* (*wine_h_errno_location)(void) = default_h_errno_location;
|
||||
|
||||
/***********************************************************************
|
||||
* __errno_location/__error/___errno
|
||||
*
|
||||
* Get the per-thread errno location.
|
||||
*/
|
||||
#ifdef ERRNO_LOCATION
|
||||
int *ERRNO_LOCATION(void)
|
||||
{
|
||||
return wine_errno_location();
|
||||
}
|
||||
#endif /* ERRNO_LOCATION */
|
||||
|
||||
/***********************************************************************
|
||||
* __h_errno_location
|
||||
*
|
||||
* Get the per-thread h_errno location.
|
||||
*/
|
||||
int *__h_errno_location(void)
|
||||
{
|
||||
return wine_h_errno_location();
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* pthread functions
|
||||
*/
|
||||
|
|
|
@ -318,6 +318,70 @@ void SYSDEPS_AbortThread( int status )
|
|||
}
|
||||
|
||||
|
||||
/* default errno before threading is initialized */
|
||||
static int *default_errno_location(void)
|
||||
{
|
||||
static int errno;
|
||||
return &errno;
|
||||
}
|
||||
|
||||
/* default h_errno before threading is initialized */
|
||||
static int *default_h_errno_location(void)
|
||||
{
|
||||
static int h_errno;
|
||||
return &h_errno;
|
||||
}
|
||||
|
||||
/* errno once threading is working */
|
||||
static int *thread_errno_location(void)
|
||||
{
|
||||
return &NtCurrentTeb()->thread_errno;
|
||||
}
|
||||
|
||||
/* h_errno once threading is working */
|
||||
static int *thread_h_errno_location(void)
|
||||
{
|
||||
return &NtCurrentTeb()->thread_h_errno;
|
||||
}
|
||||
|
||||
static int* (*errno_location_ptr)(void) = default_errno_location;
|
||||
static int* (*h_errno_location_ptr)(void) = default_h_errno_location;
|
||||
|
||||
/***********************************************************************
|
||||
* __errno_location/__error/___errno
|
||||
*
|
||||
* Get the per-thread errno location.
|
||||
*/
|
||||
#ifdef ERRNO_LOCATION
|
||||
int *ERRNO_LOCATION(void)
|
||||
{
|
||||
return errno_location_ptr();
|
||||
}
|
||||
#endif /* ERRNO_LOCATION */
|
||||
|
||||
/***********************************************************************
|
||||
* __h_errno_location
|
||||
*
|
||||
* Get the per-thread h_errno location.
|
||||
*/
|
||||
int *__h_errno_location(void)
|
||||
{
|
||||
return h_errno_location_ptr();
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* SYSDEPS_InitErrno
|
||||
*
|
||||
* Initialize errno handling.
|
||||
*/
|
||||
void SYSDEPS_InitErrno(void)
|
||||
{
|
||||
errno_location_ptr = thread_errno_location;
|
||||
h_errno_location_ptr = thread_h_errno_location;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* NtCurrentTeb (NTDLL.@)
|
||||
*
|
||||
|
|
|
@ -210,26 +210,6 @@ error:
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* thread_errno_location
|
||||
*
|
||||
* Get the per-thread errno location.
|
||||
*/
|
||||
static int *thread_errno_location(void)
|
||||
{
|
||||
return &NtCurrentTeb()->thread_errno;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* thread_h_errno_location
|
||||
*
|
||||
* Get the per-thread h_errno location.
|
||||
*/
|
||||
static int *thread_h_errno_location(void)
|
||||
{
|
||||
return &NtCurrentTeb()->thread_h_errno;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* THREAD_Init
|
||||
*
|
||||
|
@ -245,8 +225,7 @@ void THREAD_Init(void)
|
|||
assert( initial_teb.teb_sel );
|
||||
initial_teb.process = ¤t_process;
|
||||
SYSDEPS_SetCurThread( &initial_teb );
|
||||
wine_errno_location = thread_errno_location;
|
||||
wine_h_errno_location = thread_h_errno_location;
|
||||
SYSDEPS_InitErrno();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue