aboutsummaryrefslogtreecommitdiff
path: root/stdlib/errno.h
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/errno.h')
-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 */