about summary refs log tree commit diff
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/errno.h62
1 files changed, 25 insertions, 37 deletions
diff --git a/stdlib/errno.h b/stdlib/errno.h
index c42514b448..fe08365e40 100644
--- a/stdlib/errno.h
+++ b/stdlib/errno.h
@@ -20,53 +20,41 @@
  */
 
 #ifndef	_ERRNO_H
+#define	_ERRNO_H 1
 
-/* The includer defined __need_Emath if he wants only the definitions
-   of EDOM and ERANGE, and not everything else.  */
-#ifndef	__need_Emath
-# define _ERRNO_H	1
-# include <features.h>
-#endif
+#include <features.h>
 
-__BEGIN_DECLS
-
-/* Get the error number constants from the system-specific file.
-   This file will test __need_Emath and _ERRNO_H.  */
+/* The system-specific definitions of the E* constants, as macros.  */
 #include <bits/errno.h>
-#undef	__need_Emath
 
-#ifdef	_ERRNO_H
+/* When included from assembly language, this header only provides the
+   E* constants.  */
+#ifndef __ASSEMBLER__
 
-/* Declare the `errno' variable, unless it's defined as a macro by
-   bits/errno.h.  This is the case in GNU, where it is a per-thread
-   variable.  This redeclaration using the macro still works, but it
-   will be a function declaration without a prototype and may trigger
-   a -Wstrict-prototypes warning.  */
-#ifndef	errno
-extern int errno;
-#endif
+__BEGIN_DECLS
 
-#ifdef __USE_GNU
+/* The error code set by various library functions.  */
+extern int *__errno_location (void) __THROW __attribute_const__;
+# define errno (*__errno_location ())
+
+# ifdef __USE_GNU
 
 /* The full and simple forms of the name with which the program was
    invoked.  These variables are set up automatically at startup based on
    the value of argv[0].  */
-extern char *program_invocation_name, *program_invocation_short_name;
-#endif /* __USE_GNU */
-#endif /* _ERRNO_H */
+extern char *program_invocation_name;
+extern char *program_invocation_short_name;
 
-__END_DECLS
+/* bits/errno.h may have defined this type.  If it didn't, provide a
+   fallback definition.  */
+#  ifndef __error_t_defined
+#   define __error_t_defined 1
+typedef int error_t;
+#  endif
 
-#endif /* _ERRNO_H */
+# endif /* __USE_GNU */
 
-/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
-   that printing `error_t' values in the debugger shows the names.  We
-   might need this definition sometimes even if this file was included
-   before.  */
-#if defined __USE_GNU || defined __need_error_t
-# ifndef __error_t_defined
-typedef int error_t;
-#  define __error_t_defined	1
-# endif
-# undef __need_error_t
-#endif
+__END_DECLS
+
+#endif /* !__ASSEMBLER__ */
+#endif /* errno.h */