2002-07-30 Roland McGrath <roland@redhat.com>
authorroland <roland>
Fri, 2 Aug 2002 03:31:15 +0000 (03:31 +0000)
committerroland <roland>
Fri, 2 Aug 2002 03:31:15 +0000 (03:31 +0000)
* inet/herrno.c [USE_TLS && HAVE___THREAD] (h_errno): Define as a
thread-local variable.
* resolv/netdb.h (h_errno): Define macro unconditionally.
[_LIBC] (__set_h_errno): Macro moved to ...
* include/netdb.h: ... here.
[USE_TLS && HAVE___THREAD] (h_errno): Declare __thread variable.
[USE_TLS && HAVE___THREAD] (__set_h_errno): Define using that.
[! _LIBC_REENTRANT]: #undef h_errno here.

include/netdb.h
inet/herrno.c
resolv/netdb.h

index 0a97c01..1f2ab03 100644 (file)
@@ -1,6 +1,26 @@
 #ifndef        _NETDB_H
 #include <resolv/netdb.h>
 
+/* Macros for accessing h_errno from inside libc.  */
+# ifdef _LIBC_REENTRANT
+#  include <tls.h>
+#  if USE_TLS && HAVE___THREAD
+#   undef  h_errno
+#   define h_errno h_errno     /* For #ifndef h_errno tests.  */
+extern __thread int h_errno;
+#   define __set_h_errno(x)    (h_errno = (x))
+#  else
+static inline int
+__set_h_errno (int __err)
+{
+  return *__h_errno_location () = __err;
+}
+#  endif
+# else
+#  undef  h_errno
+#  define __set_h_errno(x) (h_errno = (x))
+# endif        /* _LIBC_REENTRANT */
+
 /* Document internal interfaces.  */
 extern int __gethostent_r (struct hostent *__restrict __result_buf,
                           char *__restrict __buf, size_t __buflen,
index 1a30ce9..165762b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1996,97,98,2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #include <netdb.h>
 #undef h_errno
 
+#include <tls.h>
+
 /* We need to have the error status variable of the resolver
    accessible in the libc.  */
+
+#if USE_TLS && HAVE___THREAD
+__thread int h_errno;
+#else
 int h_errno = 0;
 weak_alias (h_errno, _h_errno)
+#endif
 
-/* When threaded, h_errno may be a per-process variable.  */
+/* When threaded, h_errno may be a per-thread variable.  */
 int *
 weak_const_function
 __h_errno_location (void)
index c3e0772..d041163 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1996,97,98,99,2000,01,02 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -59,23 +59,8 @@ extern int h_errno;
 /* Function to get address of global `h_errno' variable.  */
 extern int *__h_errno_location (void) __THROW __attribute__ ((__const__));
 
-#ifdef _LIBC
-# ifdef _LIBC_REENTRANT
-static inline int
-__set_h_errno (int __err)
-{
-  return *__h_errno_location () = __err;
-}
-# else
-#  define __set_h_errno(x) (h_errno = (x))
-# endif        /* _LIBC_REENTRANT */
-#endif /* _LIBC */
-
-
-#if !defined _LIBC || defined _LIBC_REENTRANT
 /* Use a macro to access always the thread specific `h_errno' variable.  */
-# define h_errno (*__h_errno_location ())
-#endif
+#define h_errno (*__h_errno_location ())
 
 
 /* Possible values left in `h_errno'.  */