Cleaned up the various errno location tests in configure.

Added (h_)errno_location pointers in the library that allow remapping
the calls in higher level dlls.
Moved X11DRV_CritSection out of sysdeps.c and into x11drv.dll.
This commit is contained in:
Alexandre Julliard 2001-01-17 20:22:22 +00:00
parent 4bed8266e0
commit 598412ed6a
11 changed files with 276 additions and 286 deletions

253
configure vendored
View File

@ -5218,31 +5218,34 @@ fi
wine_cv_libc_reentrant=no
echo $ac_n "checking "for reentrant libc: __errno_location"""... $ac_c" 1>&6
echo "configure:5224: checking "for reentrant libc: __errno_location"" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r__errno_location'+set}'`\" = set"; then
echo $ac_n "checking for reentrant libc: __errno_location""... $ac_c" 1>&6
echo "configure:5227: checking for reentrant libc: __errno_location" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r___errno_location'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
wine_cv_libc_r__errno_location=yes
wine_cv_libc_r___errno_location=yes
else
cat > conftest.$ac_ext <<EOF
#line 5232 "configure"
#line 5235 "configure"
#include "confdefs.h"
int myerrno = 0;
char buf[256];
int *__errno_location(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}
EOF
if { (eval echo configure:5239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:5242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
wine_cv_libc_r__errno_location=yes
wine_cv_libc_r___errno_location=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
wine_cv_libc_r__errno_location=no
wine_cv_libc_r___errno_location=no
fi
rm -fr conftest*
fi
@ -5250,39 +5253,37 @@ fi
fi
echo "$ac_t""$wine_cv_libc_r__errno_location" 1>&6
if test "$wine_cv_libc_r__errno_location" = "yes"
echo "$ac_t""$wine_cv_libc_r___errno_location" 1>&6
if test "$wine_cv_libc_r___errno_location" = "yes"
then
cat >> confdefs.h <<\EOF
#define HAVE__ERRNO_LOCATION 1
EOF
wine_cv_libc_reentrant=__errno_location
fi
echo $ac_n "checking "for reentrant libc: __error"""... $ac_c" 1>&6
echo "configure:5264: checking "for reentrant libc: __error"" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r__error'+set}'`\" = set"; then
echo $ac_n "checking for reentrant libc: __error""... $ac_c" 1>&6
echo "configure:5265: checking for reentrant libc: __error" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r___error'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
wine_cv_libc_r__error=yes
wine_cv_libc_r___error=yes
else
cat > conftest.$ac_ext <<EOF
#line 5272 "configure"
#line 5273 "configure"
#include "confdefs.h"
int myerrno = 0;
char buf[256];
int *__error(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}
EOF
if { (eval echo configure:5279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:5280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
wine_cv_libc_r__error=yes
wine_cv_libc_r___error=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
wine_cv_libc_r__error=no
wine_cv_libc_r___error=no
fi
rm -fr conftest*
fi
@ -5290,39 +5291,37 @@ fi
fi
echo "$ac_t""$wine_cv_libc_r__error" 1>&6
if test "$wine_cv_libc_r__error" = "yes"
echo "$ac_t""$wine_cv_libc_r___error" 1>&6
if test "$wine_cv_libc_r___error" = "yes"
then
cat >> confdefs.h <<\EOF
#define HAVE__ERROR 1
EOF
wine_cv_libc_reentrant=__error
fi
echo $ac_n "checking "for reentrant libc: ___errno"""... $ac_c" 1>&6
echo "configure:5304: checking "for reentrant libc: ___errno"" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r___errno'+set}'`\" = set"; then
echo $ac_n "checking for reentrant libc: ___errno""... $ac_c" 1>&6
echo "configure:5303: checking for reentrant libc: ___errno" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r____errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
wine_cv_libc_r___errno=yes
wine_cv_libc_r____errno=yes
else
cat > conftest.$ac_ext <<EOF
#line 5312 "configure"
#line 5311 "configure"
#include "confdefs.h"
int myerrno = 0;
char buf[256];
int *___errno(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}
EOF
if { (eval echo configure:5319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:5318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
wine_cv_libc_r___errno=yes
wine_cv_libc_r____errno=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
wine_cv_libc_r___errno=no
wine_cv_libc_r____errno=no
fi
rm -fr conftest*
fi
@ -5330,39 +5329,37 @@ fi
fi
echo "$ac_t""$wine_cv_libc_r___errno" 1>&6
if test "$wine_cv_libc_r___errno" = "yes"
echo "$ac_t""$wine_cv_libc_r____errno" 1>&6
if test "$wine_cv_libc_r____errno" = "yes"
then
cat >> confdefs.h <<\EOF
#define HAVE___ERRNO 1
EOF
wine_cv_libc_reentrant=___errno
fi
echo $ac_n "checking "for reentrant libc: __thr_errno"""... $ac_c" 1>&6
echo "configure:5344: checking "for reentrant libc: __thr_errno"" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r__thr_errno'+set}'`\" = set"; then
echo $ac_n "checking for reentrant libc: __thr_errno""... $ac_c" 1>&6
echo "configure:5341: checking for reentrant libc: __thr_errno" >&5
if eval "test \"`echo '$''{'wine_cv_libc_r___thr_errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
wine_cv_libc_r__thr_errno=yes
wine_cv_libc_r___thr_errno=yes
else
cat > conftest.$ac_ext <<EOF
#line 5352 "configure"
#line 5349 "configure"
#include "confdefs.h"
int myerrno = 0;
char buf[256];
int *__thr_errno(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}
EOF
if { (eval echo configure:5359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:5356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
wine_cv_libc_r__thr_errno=yes
wine_cv_libc_r___thr_errno=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
wine_cv_libc_r__thr_errno=no
wine_cv_libc_r___thr_errno=no
fi
rm -fr conftest*
fi
@ -5370,19 +5367,17 @@ fi
fi
echo "$ac_t""$wine_cv_libc_r__thr_errno" 1>&6
if test "$wine_cv_libc_r__thr_errno" = "yes"
echo "$ac_t""$wine_cv_libc_r___thr_errno" 1>&6
if test "$wine_cv_libc_r___thr_errno" = "yes"
then
cat >> confdefs.h <<\EOF
#define HAVE__THR_ERRNO 1
EOF
wine_cv_libc_reentrant=__thr_errno
fi
if test "$wine_cv_libc_reentrant" = "no"
if test "$wine_cv_libc_reentrant" != "no"
then
cat >> confdefs.h <<\EOF
#define NO_REENTRANT_LIBC 1
cat >> confdefs.h <<EOF
#define ERRNO_LOCATION $wine_cv_libc_reentrant
EOF
fi
@ -5391,7 +5386,7 @@ fi
if test "$have_x" = "yes" -a "$wine_cv_libc_reentrant" != "no"
then
echo $ac_n "checking "for reentrant X libraries"""... $ac_c" 1>&6
echo "configure:5395: checking "for reentrant X libraries"" >&5
echo "configure:5390: checking "for reentrant X libraries"" >&5
if eval "test \"`echo '$''{'wine_cv_x_reentrant'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -5440,19 +5435,19 @@ fi
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
echo "configure:5444: checking for working alloca.h" >&5
echo "configure:5439: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5449 "configure"
#line 5444 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
void *p = alloca(2 * sizeof(int));
; return 0; }
EOF
if { (eval echo configure:5456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:5451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
@ -5473,12 +5468,12 @@ EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
echo "configure:5477: checking for alloca" >&5
echo "configure:5472: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5482 "configure"
#line 5477 "configure"
#include "confdefs.h"
#ifdef __GNUC__
@ -5506,7 +5501,7 @@ int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
if { (eval echo configure:5510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:5505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
@ -5538,12 +5533,12 @@ EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
echo "configure:5542: checking whether alloca needs Cray hooks" >&5
echo "configure:5537: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5547 "configure"
#line 5542 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
@ -5568,12 +5563,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:5572: checking for $ac_func" >&5
echo "configure:5567: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5577 "configure"
#line 5572 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -5596,7 +5591,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:5600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:5595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -5623,7 +5618,7 @@ done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
echo "configure:5627: checking stack direction for C alloca" >&5
echo "configure:5622: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -5631,7 +5626,7 @@ else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
#line 5635 "configure"
#line 5630 "configure"
#include "confdefs.h"
find_stack_direction ()
{
@ -5650,7 +5645,7 @@ main ()
exit (find_stack_direction() < 0);
}
EOF
if { (eval echo configure:5654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:5649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
@ -5708,12 +5703,12 @@ for ac_func in \
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:5712: checking for $ac_func" >&5
echo "configure:5707: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5717 "configure"
#line 5712 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -5736,7 +5731,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:5740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:5735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -5818,17 +5813,17 @@ for ac_hdr in \
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:5822: checking for $ac_hdr" >&5
echo "configure:5817: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5827 "configure"
#line 5822 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:5827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -5855,12 +5850,12 @@ fi
done
echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
echo "configure:5859: checking whether stat file-mode macros are broken" >&5
echo "configure:5854: checking whether stat file-mode macros are broken" >&5
if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5864 "configure"
#line 5859 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
@ -5913,12 +5908,12 @@ fi
echo $ac_n "checking for working const""... $ac_c" 1>&6
echo "configure:5917: checking for working const" >&5
echo "configure:5912: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5922 "configure"
#line 5917 "configure"
#include "confdefs.h"
int main() {
@ -5967,7 +5962,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
if { (eval echo configure:5971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:5966: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
@ -5988,21 +5983,21 @@ EOF
fi
echo $ac_n "checking for inline""... $ac_c" 1>&6
echo "configure:5992: checking for inline" >&5
echo "configure:5987: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
#line 5999 "configure"
#line 5994 "configure"
#include "confdefs.h"
int main() {
} int $ac_kw foo() {
; return 0; }
EOF
if { (eval echo configure:6006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
@ -6028,12 +6023,12 @@ EOF
esac
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:6032: checking for ANSI C header files" >&5
echo "configure:6027: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6037 "configure"
#line 6032 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@ -6041,7 +6036,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:6045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:6040: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -6058,7 +6053,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 6062 "configure"
#line 6057 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@ -6076,7 +6071,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 6080 "configure"
#line 6075 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@ -6097,7 +6092,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
#line 6101 "configure"
#line 6096 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@ -6108,7 +6103,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
if { (eval echo configure:6112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:6107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@ -6132,12 +6127,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
echo "configure:6136: checking for size_t" >&5
echo "configure:6131: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6141 "configure"
#line 6136 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@ -6165,7 +6160,7 @@ EOF
fi
echo $ac_n "checking size of long long""... $ac_c" 1>&6
echo "configure:6169: checking size of long long" >&5
echo "configure:6164: checking size of long long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -6173,7 +6168,7 @@ else
ac_cv_sizeof_long_long=0
else
cat > conftest.$ac_ext <<EOF
#line 6177 "configure"
#line 6172 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@ -6184,7 +6179,7 @@ main()
exit(0);
}
EOF
if { (eval echo configure:6188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:6183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_long_long=`cat conftestval`
else
@ -6206,12 +6201,12 @@ EOF
echo $ac_n "checking "whether we can use re-entrant gethostbyname_r Linux style"""... $ac_c" 1>&6
echo "configure:6210: checking "whether we can use re-entrant gethostbyname_r Linux style"" >&5
echo "configure:6205: checking "whether we can use re-entrant gethostbyname_r Linux style"" >&5
if eval "test \"`echo '$''{'wine_cv_linux_gethostbyname_r_6'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6215 "configure"
#line 6210 "configure"
#include "confdefs.h"
#include <netdb.h>
@ -6232,7 +6227,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:6236: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
wine_cv_linux_gethostbyname_r_6=yes
else
@ -6258,12 +6253,12 @@ EOF
if test "$ac_cv_header_linux_joystick_h" = "yes"
then
echo $ac_n "checking "whether linux/joystick.h uses the Linux 2.2+ API"""... $ac_c" 1>&6
echo "configure:6262: checking "whether linux/joystick.h uses the Linux 2.2+ API"" >&5
echo "configure:6257: checking "whether linux/joystick.h uses the Linux 2.2+ API"" >&5
if eval "test \"`echo '$''{'wine_cv_linux_joystick_22_api'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6267 "configure"
#line 6262 "configure"
#include "confdefs.h"
#include <sys/ioctl.h>
@ -6278,7 +6273,7 @@ int main() {
/*empty*/
; return 0; }
EOF
if { (eval echo configure:6282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6277: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
wine_cv_linux_joystick_22_api=yes
else
@ -6305,12 +6300,12 @@ fi
if test "$ac_cv_header_sys_vfs_h" = "yes"
then
echo $ac_n "checking "whether sys/vfs.h defines statfs"""... $ac_c" 1>&6
echo "configure:6309: checking "whether sys/vfs.h defines statfs"" >&5
echo "configure:6304: checking "whether sys/vfs.h defines statfs"" >&5
if eval "test \"`echo '$''{'wine_cv_sys_vfs_has_statfs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6314 "configure"
#line 6309 "configure"
#include "confdefs.h"
#include <sys/types.h>
@ -6327,7 +6322,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:6331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6326: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
wine_cv_sys_vfs_has_statfs=yes
else
@ -6354,12 +6349,12 @@ fi
if test "$ac_cv_header_sys_statfs_h" = "yes"
then
echo $ac_n "checking "whether sys/statfs.h defines statfs"""... $ac_c" 1>&6
echo "configure:6358: checking "whether sys/statfs.h defines statfs"" >&5
echo "configure:6353: checking "whether sys/statfs.h defines statfs"" >&5
if eval "test \"`echo '$''{'wine_cv_sys_statfs_has_statfs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6363 "configure"
#line 6358 "configure"
#include "confdefs.h"
#include <sys/types.h>
@ -6374,7 +6369,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:6378: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
wine_cv_sys_statfs_has_statfs=yes
else
@ -6401,12 +6396,12 @@ fi
if test "$ac_cv_header_sys_mount_h" = "yes"
then
echo $ac_n "checking "whether sys/mount.h defines statfs"""... $ac_c" 1>&6
echo "configure:6405: checking "whether sys/mount.h defines statfs"" >&5
echo "configure:6400: checking "whether sys/mount.h defines statfs"" >&5
if eval "test \"`echo '$''{'wine_cv_sys_mount_has_statfs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6410 "configure"
#line 6405 "configure"
#include "confdefs.h"
#include <sys/types.h>
@ -6421,7 +6416,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:6425: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6420: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
wine_cv_sys_mount_has_statfs=yes
else
@ -6447,7 +6442,7 @@ fi
echo $ac_n "checking "for statfs.f_bfree"""... $ac_c" 1>&6
echo "configure:6451: checking "for statfs.f_bfree"" >&5
echo "configure:6446: checking "for statfs.f_bfree"" >&5
if eval "test \"`echo '$''{'wine_cv_statfs_bfree'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -6456,7 +6451,7 @@ else
wine_cv_statfs_bfree=no
else
cat > conftest.$ac_ext <<EOF
#line 6460 "configure"
#line 6455 "configure"
#include "confdefs.h"
#include <sys/types.h>
@ -6483,7 +6478,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:6487: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6482: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
wine_cv_statfs_bfree=yes
else
@ -6507,7 +6502,7 @@ EOF
fi
echo $ac_n "checking "for statfs.f_bavail"""... $ac_c" 1>&6
echo "configure:6511: checking "for statfs.f_bavail"" >&5
echo "configure:6506: checking "for statfs.f_bavail"" >&5
if eval "test \"`echo '$''{'wine_cv_statfs_bavail'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -6516,7 +6511,7 @@ else
wine_cv_statfs_bavail=no
else
cat > conftest.$ac_ext <<EOF
#line 6520 "configure"
#line 6515 "configure"
#include "confdefs.h"
#include <sys/types.h>
@ -6543,7 +6538,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:6547: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6542: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
wine_cv_statfs_bavail=yes
else
@ -6568,12 +6563,12 @@ fi
echo $ac_n "checking "for msg_accrights in struct msghdr"""... $ac_c" 1>&6
echo "configure:6572: checking "for msg_accrights in struct msghdr"" >&5
echo "configure:6567: checking "for msg_accrights in struct msghdr"" >&5
if eval "test \"`echo '$''{'ac_cv_c_msg_accrights'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6577 "configure"
#line 6572 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
@ -6581,7 +6576,7 @@ int main() {
struct msghdr hdr; hdr.msg_accrights=0
; return 0; }
EOF
if { (eval echo configure:6585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_msg_accrights="yes"
else
@ -6604,12 +6599,12 @@ fi
echo $ac_n "checking "for sun_len in struct sockaddr_un"""... $ac_c" 1>&6
echo "configure:6608: checking "for sun_len in struct sockaddr_un"" >&5
echo "configure:6603: checking "for sun_len in struct sockaddr_un"" >&5
if eval "test \"`echo '$''{'ac_cv_c_sun_len'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6613 "configure"
#line 6608 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
@ -6618,7 +6613,7 @@ int main() {
static struct sockaddr_un addr; addr.sun_len = 1
; return 0; }
EOF
if { (eval echo configure:6622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:6617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_sun_len="yes"
else
@ -6641,12 +6636,12 @@ fi
echo $ac_n "checking "whether we need to define __i386__"""... $ac_c" 1>&6
echo "configure:6645: checking "whether we need to define __i386__"" >&5
echo "configure:6640: checking "whether we need to define __i386__"" >&5
if eval "test \"`echo '$''{'ac_cv_cpp_def_i386'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 6650 "configure"
#line 6645 "configure"
#include "confdefs.h"
#if (defined(i386) || defined(__i386)) && !defined(__i386__)
yes

View File

@ -660,74 +660,35 @@ dnl
dnl For cross-compiling we blindly assume that libc is reentrant. This is
dnl ok since non-reentrant libc is quite rare (mostly old libc5 versions).
AC_DEFUN(WINE_CHECK_ERRNO,
[
AC_CACHE_CHECK(for reentrant libc: $1, wine_cv_libc_r_$1,
[AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *$1(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
wine_cv_libc_r_$1=yes, wine_cv_libc_r_$1=no,
wine_cv_libc_r_$1=yes )
])
if test "$wine_cv_libc_r_$1" = "yes"
then
wine_cv_libc_reentrant=$1
fi
])
wine_cv_libc_reentrant=no
dnl
dnl Linux style errno location
dnl
AC_CACHE_CHECK("for reentrant libc: __errno_location", wine_cv_libc_r__errno_location,
[AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *__errno_location(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
wine_cv_libc_r__errno_location=yes, wine_cv_libc_r__errno_location=no,
wine_cv_libc_r__errno_location=yes )
])
if test "$wine_cv_libc_r__errno_location" = "yes"
then
AC_DEFINE(HAVE__ERRNO_LOCATION)
wine_cv_libc_reentrant=__errno_location
fi
dnl
WINE_CHECK_ERRNO(__errno_location)
dnl FreeBSD style errno location
dnl
AC_CACHE_CHECK("for reentrant libc: __error", wine_cv_libc_r__error,
[AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *__error(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
wine_cv_libc_r__error=yes, wine_cv_libc_r__error=no,
wine_cv_libc_r__error=yes )
])
if test "$wine_cv_libc_r__error" = "yes"
then
AC_DEFINE(HAVE__ERROR)
wine_cv_libc_reentrant=__error
fi
dnl
WINE_CHECK_ERRNO(__error)
dnl Solaris style errno location
dnl
AC_CACHE_CHECK("for reentrant libc: ___errno", wine_cv_libc_r___errno,
[AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *___errno(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
wine_cv_libc_r___errno=yes, wine_cv_libc_r___errno=no,
wine_cv_libc_r___errno=yes )
])
if test "$wine_cv_libc_r___errno" = "yes"
then
AC_DEFINE(HAVE___ERRNO)
wine_cv_libc_reentrant=___errno
fi
dnl
WINE_CHECK_ERRNO(___errno)
dnl UnixWare style errno location
dnl
AC_CACHE_CHECK("for reentrant libc: __thr_errno", wine_cv_libc_r__thr_errno,
[AC_TRY_RUN([int myerrno = 0;
char buf[256];
int *__thr_errno(){return &myerrno;}
main(){connect(0,buf,255); exit(!myerrno);}],
wine_cv_libc_r__thr_errno=yes, wine_cv_libc_r__thr_errno=no,
wine_cv_libc_r__thr_errno=yes )
])
if test "$wine_cv_libc_r__thr_errno" = "yes"
WINE_CHECK_ERRNO(__thr_errno)
if test "$wine_cv_libc_reentrant" != "no"
then
AC_DEFINE(HAVE__THR_ERRNO)
wine_cv_libc_reentrant=__thr_errno
fi
if test "$wine_cv_libc_reentrant" = "no"
then
AC_DEFINE(NO_REENTRANT_LIBC)
AC_DEFINE_UNQUOTED(ERRNO_LOCATION,$wine_cv_libc_reentrant)
fi
dnl **** Check for reentrant X libraries ****

View File

@ -7,6 +7,15 @@
#include "config.h"
#ifdef NO_REENTRANT_X11
/* Get pointers to the static errno and h_errno variables used by Xlib. This
must be done before including <errno.h> makes the variables invisible. */
extern int errno;
static int *perrno = &errno;
extern int h_errno;
static int *ph_errno = &h_errno;
#endif /* NO_REENTRANT_X11 */
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@ -36,6 +45,8 @@ static XKeyboardState keyboard_state;
static void (*old_tsx11_lock)(void);
static void (*old_tsx11_unlock)(void);
static CRITICAL_SECTION X11DRV_CritSection = CRITICAL_SECTION_INIT;
Display *display;
Screen *screen;
Visual *visual;
@ -46,6 +57,35 @@ Window root_window;
unsigned int X11DRV_server_startticks;
#ifdef NO_REENTRANT_X11
static int* (*old_errno_location)(void);
static int* (*old_h_errno_location)(void);
/***********************************************************************
* x11_errno_location
*
* Get the per-thread errno location.
*/
static int *x11_errno_location(void)
{
/* Use static libc errno while running in Xlib. */
if (X11DRV_CritSection.OwningThread == GetCurrentThreadId()) return perrno;
return old_errno_location();
}
/***********************************************************************
* x11_h_errno_location
*
* Get the per-thread h_errno location.
*/
static int *x11_h_errno_location(void)
{
/* Use static libc h_errno while running in Xlib. */
if (X11DRV_CritSection.OwningThread == GetCurrentThreadId()) return ph_errno;
return old_h_errno_location();
}
#endif /* NO_REENTRANT_X11 */
/***********************************************************************
* error_handler
*/
@ -268,6 +308,12 @@ static void process_attach(void)
setup_options();
/* setup TSX11 locking */
#ifdef NO_REENTRANT_X11
old_errno_location = (void *)InterlockedExchange( (PLONG)&wine_errno_location,
(LONG)x11_errno_location );
old_h_errno_location = (void *)InterlockedExchange( (PLONG)&wine_h_errno_location,
(LONG)x11_h_errno_location );
#endif /* NO_REENTRANT_X11 */
old_tsx11_lock = wine_tsx11_lock;
old_tsx11_unlock = wine_tsx11_unlock;
wine_tsx11_lock = lock_tsx11;
@ -359,6 +405,10 @@ static void process_detach(void)
/* restore TSX11 locking */
wine_tsx11_lock = old_tsx11_lock;
wine_tsx11_unlock = old_tsx11_unlock;
#ifdef NO_REENTRANT_X11
wine_errno_location = old_errno_location;
wine_h_errno_location = old_h_errno_location;
#endif /* NO_REENTRANT_X11 */
#if 0 /* FIXME */
/* close the display */

View File

@ -48,20 +48,8 @@
/* Define if X libraries are not reentrant (compiled without -D_REENTRANT). */
#undef NO_REENTRANT_X11
/* Define if libc is not reentrant */
#undef NO_REENTRANT_LIBC
/* Define if libc uses __errno_location for reentrant errno */
#undef HAVE__ERRNO_LOCATION
/* Define if libc uses __error for reentrant errno */
#undef HAVE__ERROR
/* Define if libc uses ___errno for reentrant errno */
#undef HAVE___ERRNO
/* Define if libc uses __thr_errno for reentrant errno */
#undef HAVE__THR_ERRNO
/* Define to the name of the function returning erro for reentrant libc */
#undef ERRNO_LOCATION
/* Define if all debug messages are to be compiled out */
#undef NO_DEBUG_MSGS

View File

@ -88,20 +88,8 @@
/* Define if X libraries are not reentrant (compiled without -D_REENTRANT). */
#undef NO_REENTRANT_X11
/* Define if libc is not reentrant */
#undef NO_REENTRANT_LIBC
/* Define if libc uses __errno_location for reentrant errno */
#undef HAVE__ERRNO_LOCATION
/* Define if libc uses __error for reentrant errno */
#undef HAVE__ERROR
/* Define if libc uses ___errno for reentrant errno */
#undef HAVE___ERRNO
/* Define if libc uses __thr_errno for reentrant errno */
#undef HAVE__THR_ERRNO
/* Define to the name of the function returning erro for reentrant libc */
#undef ERRNO_LOCATION
/* Define if all debug messages are to be compiled out */
#undef NO_DEBUG_MSGS

View File

@ -27,6 +27,10 @@ extern void wine_dbg_add_option( const char *name, unsigned char set, unsigned c
extern void *wine_anon_mmap( void *start, size_t size, int prot, int flags );
/* errno support */
extern int* (*wine_errno_location)(void);
extern int* (*wine_h_errno_location)(void);
/* LDT management */
extern void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry );

View File

@ -191,10 +191,6 @@ extern BOOL X11DRV_SetupGCForText( struct tagDC *dc );
extern const int X11DRV_XROPfunction[];
/* Xlib critical section */
extern CRITICAL_SECTION X11DRV_CritSection;
extern void _XInitImageFuncPtrs(XImage *);
#define XCREATEIMAGE(image,width,height,bpp) \

View File

@ -10,6 +10,7 @@ SONAME = libwine.so
C_SRCS = \
debug.c \
errno.c \
ldt.c \
loader.c \
port.c

46
library/errno.c Normal file
View File

@ -0,0 +1,46 @@
/*
* Wine library reentrant errno support
*
* Copyright 1998 Alexandre Julliard
*/
/* Get pointers to the static errno and h_errno variables used by Xlib. This
must be done before including <errno.h> makes the variables invisible. */
static int *default_errno_location(void)
{
extern int errno;
return &errno;
}
static int *default_h_errno_location(void)
{
extern int h_errno;
return &h_errno;
}
int* (*wine_errno_location)(void) = default_errno_location;
int* (*wine_h_errno_location)(void) = default_h_errno_location;
#include "config.h"
/***********************************************************************
* __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();
}

View File

@ -6,13 +6,6 @@
#include "config.h"
/* Get pointers to the static errno and h_errno variables used by Xlib. This
must be done before including <errno.h> makes the variables invisible. */
extern int errno;
static int *perrno = &errno;
extern int h_errno;
static int *ph_errno = &h_errno;
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
@ -36,9 +29,6 @@ static int *ph_errno = &h_errno;
DEFAULT_DEBUG_CHANNEL(thread);
/* Xlib critical section (FIXME: does not belong here) */
CRITICAL_SECTION X11DRV_CritSection = CRITICAL_SECTION_INIT;
#ifdef linux
# ifdef HAVE_SCHED_H
# include <sched.h>
@ -52,55 +42,6 @@ CRITICAL_SECTION X11DRV_CritSection = CRITICAL_SECTION_INIT;
# endif /* CLONE_VM */
#endif /* linux */
static int init_done;
#ifndef NO_REENTRANT_LIBC
/***********************************************************************
* __errno_location/__error/___errno
*
* Get the per-thread errno location.
*/
#ifdef HAVE__ERRNO_LOCATION
int *__errno_location()
#endif
#ifdef HAVE__ERROR
int *__error()
#endif
#ifdef HAVE___ERRNO
int *___errno()
#endif
#ifdef HAVE__THR_ERRNO
int *__thr_errno()
#endif
{
if (!init_done) return perrno;
#ifdef NO_REENTRANT_X11
/* Use static libc errno while running in Xlib. */
if (X11DRV_CritSection.OwningThread == GetCurrentThreadId())
return perrno;
#endif
return &NtCurrentTeb()->thread_errno;
}
/***********************************************************************
* __h_errno_location
*
* Get the per-thread h_errno location.
*/
int *__h_errno_location()
{
if (!init_done) return ph_errno;
#ifdef NO_REENTRANT_X11
/* Use static libc h_errno while running in Xlib. */
if (X11DRV_CritSection.OwningThread == GetCurrentThreadId())
return ph_errno;
#endif
return &NtCurrentTeb()->thread_h_errno;
}
#endif /* NO_REENTRANT_LIBC */
/***********************************************************************
* SYSDEPS_SetCurThread
*
@ -115,8 +56,6 @@ void SYSDEPS_SetCurThread( TEB *teb )
/* On non-i386 Solaris, we use the LWP private pointer */
_lwp_setprivate( teb );
#endif
init_done = 1; /* now we can use threading routines */
}
/***********************************************************************
@ -150,7 +89,7 @@ static void SYSDEPS_StartThread( TEB *teb )
*/
int SYSDEPS_SpawnThread( TEB *teb )
{
#ifndef NO_REENTRANT_LIBC
#ifdef ERRNO_LOCATION
#ifdef linux
const int flags = CLONE_VM | CLONE_FS | CLONE_FILES | SIGCHLD;
@ -192,7 +131,7 @@ int SYSDEPS_SpawnThread( TEB *teb )
return 0;
#endif
#endif /* NO_REENTRANT_LIBC */
#endif /* ERRNO_LOCATION */
FIXME("CreateThread: stub\n" );
return 0;

View File

@ -213,6 +213,26 @@ 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
*
@ -228,6 +248,8 @@ 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;
}
}