Commit b59bf98b authored by Alexandre Julliard's avatar Alexandre Julliard

Moved errno_location support to sysdeps.c.

parent 9037f4bb
...@@ -147,6 +147,7 @@ extern TEB *THREAD_IdToTEB( DWORD id ); ...@@ -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 @@ ...@@ -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 ) ...@@ -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.@)
* *
......
...@@ -211,26 +211,6 @@ error: ...@@ -211,26 +211,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
* *
* Setup the initial thread. * Setup the initial thread.
...@@ -245,8 +225,7 @@ void THREAD_Init(void) ...@@ -245,8 +225,7 @@ void THREAD_Init(void)
assert( initial_teb.teb_sel ); assert( initial_teb.teb_sel );
initial_teb.process = &current_process; initial_teb.process = &current_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;
} }
} }
......
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