Moved errno_location support to sysdeps.c.

oldstable
Alexandre Julliard 2003-03-26 01:33:48 +00:00
parent 9037f4bbfe
commit b59bf98b93
4 changed files with 66 additions and 61 deletions

View File

@ -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) );

View File

@ -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
*/

View File

@ -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.@)
*

View File

@ -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 = &current_process;
SYSDEPS_SetCurThread( &initial_teb );
wine_errno_location = thread_errno_location;
wine_h_errno_location = thread_h_errno_location;
SYSDEPS_InitErrno();
}
}