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 */
|
/* scheduler/sysdeps.c */
|
||||||
extern int SYSDEPS_SpawnThread( TEB *teb );
|
extern int SYSDEPS_SpawnThread( TEB *teb );
|
||||||
extern void SYSDEPS_SetCurThread( 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_ExitThread( int status );
|
||||||
extern void DECLSPEC_NORETURN SYSDEPS_AbortThread( int status );
|
extern void DECLSPEC_NORETURN SYSDEPS_AbortThread( int status );
|
||||||
extern void DECLSPEC_NORETURN SYSDEPS_SwitchToThreadStack( void (*func)(void) );
|
extern void DECLSPEC_NORETURN SYSDEPS_SwitchToThreadStack( void (*func)(void) );
|
||||||
|
@ -22,45 +22,6 @@
|
|||||||
|
|
||||||
#include <assert.h>
|
#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
|
* 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.@)
|
* 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
|
* THREAD_Init
|
||||||
*
|
*
|
||||||
@ -245,8 +225,7 @@ void THREAD_Init(void)
|
|||||||
assert( initial_teb.teb_sel );
|
assert( initial_teb.teb_sel );
|
||||||
initial_teb.process = ¤t_process;
|
initial_teb.process = ¤t_process;
|
||||||
SYSDEPS_SetCurThread( &initial_teb );
|
SYSDEPS_SetCurThread( &initial_teb );
|
||||||
wine_errno_location = thread_errno_location;
|
SYSDEPS_InitErrno();
|
||||||
wine_h_errno_location = thread_h_errno_location;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user