Patchwork Separate out error_t definition

login
register
mail settings
Submitter Samuel Thibault
Date March 4, 2018, 2:28 a.m.
Message ID <20180304022806.21081-1-samuel.thibault@ens-lyon.org>
Download mbox | patch
Permalink /patch/26184/
State Committed, archived
Headers show

Comments

Samuel Thibault - March 4, 2018, 2:28 a.m.
so interfaces needing it can get it.

	* stdlib/errno.h (error_t): Move definition to...
	* stdlib/bits/types/error_t.h: ... new header.
	* stdlib/Makefile (headers): Add bits/types/error_t.h.
	* sysdeps/mach/hurd/bits/errno.h (error_t): Move definition to...
	* sysdeps/mach/hurd/bits/types/error_t.h: ... new header.
	* sysdeps/mach/hurd/errnos.awk (error_t): Likewise.
	* hurd/hurd.h: Include <bits/types/error_t.h>
	* hurd/hurd/fd.h: Include <bits/types/error_t.h>
	* hurd/hurd/id.h: Include <errno.h> and <bits/types/error_t.h>
	* hurd/hurd/lookup.h: Include <errno.h> and <bits/types/error_t.h>
	* hurd/hurd/resource.h: Include <bits/types/error_t.h>
	* hurd/hurd/signal.h: Include <bits/types/error_t.h>
	* hurd/hurd/sigpreempt.h: Include <bits/types/error_t.h>
---
 ChangeLog                              | 13 +++++++++++++
 hurd/hurd.h                            |  1 +
 hurd/hurd/fd.h                         |  1 +
 hurd/hurd/id.h                         |  2 ++
 hurd/hurd/lookup.h                     |  2 ++
 hurd/hurd/resource.h                   |  1 +
 hurd/hurd/signal.h                     |  1 +
 hurd/hurd/sigpreempt.h                 |  1 +
 stdlib/Makefile                        |  2 +-
 stdlib/bits/types/error_t.h            | 24 ++++++++++++++++++++++++
 stdlib/errno.h                         |  7 +------
 sysdeps/mach/hurd/bits/errno.h         |  8 --------
 sysdeps/mach/hurd/bits/types/error_t.h | 27 +++++++++++++++++++++++++++
 sysdeps/mach/hurd/errnos.awk           |  8 --------
 14 files changed, 75 insertions(+), 23 deletions(-)
 create mode 100644 stdlib/bits/types/error_t.h
 create mode 100644 sysdeps/mach/hurd/bits/types/error_t.h
Samuel Thibault - March 4, 2018, 2:41 a.m.
Samuel Thibault, on dim. 04 mars 2018 03:28:06 +0100, wrote:
> +	* stdlib/errno.h (error_t): Move definition to...
> +	* stdlib/bits/types/error_t.h: ... new header.

While looking at other stuff, I saw that perhaps I need to add a
./include/bits/types/error_t.h too? (although I don't know why it is
needed, things went fine without it).

Samuel
Zack Weinberg - March 4, 2018, 4:03 p.m.
On Sat, Mar 3, 2018 at 9:41 PM, Samuel Thibault
<samuel.thibault@ens-lyon.org> wrote:
> Samuel Thibault, on dim. 04 mars 2018 03:28:06 +0100, wrote:
>> +     * stdlib/errno.h (error_t): Move definition to...
>> +     * stdlib/bits/types/error_t.h: ... new header.
>
> While looking at other stuff, I saw that perhaps I need to add a
> ./include/bits/types/error_t.h too? (although I don't know why it is
> needed, things went fine without it).

You don't need that, but you _do_ need to put the generic (non-Hurd)
version of bits/types/error_t.h in the top-level bits directory
instead of in stdlib/bits.  The top-level bits directory is for the
generic version of bits headers that might get overridden by sysdeps
versions; bits headers in subject-matter directories are used
unconditionally on all platforms.

Yes, this is confusing.  I don't remember why the top-level directory
is not sysdeps/generic/bits, which would at least be consistent with
the way the rest of sysdeps works.

Also, I think the Hurd bits/types/error_t.h needs to include
bits/errno.h so that the definition of enum __error_t_codes is
visible.

Rest of the patch looks good to me.

zw
Samuel Thibault - March 4, 2018, 4:44 p.m.
Zack Weinberg, on dim. 04 mars 2018 11:03:37 -0500, wrote:
> On Sat, Mar 3, 2018 at 9:41 PM, Samuel Thibault
> <samuel.thibault@ens-lyon.org> wrote:
> > Samuel Thibault, on dim. 04 mars 2018 03:28:06 +0100, wrote:
> >> +     * stdlib/errno.h (error_t): Move definition to...
> >> +     * stdlib/bits/types/error_t.h: ... new header.
> >
> > While looking at other stuff, I saw that perhaps I need to add a
> > ./include/bits/types/error_t.h too? (although I don't know why it is
> > needed, things went fine without it).
> 
> You don't need that, but you _do_ need to put the generic (non-Hurd)
> version of bits/types/error_t.h in the top-level bits directory
> instead of in stdlib/bits.

Ok...

Thanks!
Samuel

Patch

diff --git a/ChangeLog b/ChangeLog
index 33d3008a91..44c6bfe2c2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -23,6 +23,19 @@ 
 	* mach/mach/mig_support.h [defined __USE_GNU]: Do not #error out.
 	* scripts/check-installed-headers.sh: Do not ignore Hurd and Mach
 	headers.
+	* stdlib/errno.h (error_t): Move definition to...
+	* stdlib/bits/types/error_t.h: ... new header.
+	* stdlib/Makefile (headers): Add bits/types/error_t.h.
+	* sysdeps/mach/hurd/bits/errno.h (error_t): Move definition to...
+	* sysdeps/mach/hurd/bits/types/error_t.h: ... new header.
+	* sysdeps/mach/hurd/errnos.awk (error_t): Likewise.
+	* hurd/hurd.h: Include <bits/types/error_t.h>
+	* hurd/hurd/fd.h: Include <bits/types/error_t.h>
+	* hurd/hurd/id.h: Include <errno.h> and <bits/types/error_t.h>
+	* hurd/hurd/lookup.h: Include <errno.h> and <bits/types/error_t.h>
+	* hurd/hurd/resource.h: Include <bits/types/error_t.h>
+	* hurd/hurd/signal.h: Include <bits/types/error_t.h>
+	* hurd/hurd/sigpreempt.h: Include <bits/types/error_t.h>
 
 2018-03-03  Andreas Schwab  <schwab@linux-m68k.org>
 
diff --git a/hurd/hurd.h b/hurd/hurd.h
index a0e2444632..1ced6403dd 100644
--- a/hurd/hurd.h
+++ b/hurd/hurd.h
@@ -41,6 +41,7 @@ 
 #include <hurd/port.h>
 
 #include <errno.h>
+#include <bits/types/error_t.h>
 
 #ifndef _HURD_H_EXTERN_INLINE
 #define _HURD_H_EXTERN_INLINE __extern_inline
diff --git a/hurd/hurd/fd.h b/hurd/hurd/fd.h
index 5d51c11e6a..f1701ed423 100644
--- a/hurd/hurd/fd.h
+++ b/hurd/hurd/fd.h
@@ -140,6 +140,7 @@  _hurd_fd_get (int fd)
      __result; })
 
 #include <errno.h>
+#include <bits/types/error_t.h>
 
 /* Check if ERR should generate a signal.
    Returns the signal to take, or zero if none.  */
diff --git a/hurd/hurd/id.h b/hurd/hurd/id.h
index 28563c9618..38988bfe72 100644
--- a/hurd/hurd/id.h
+++ b/hurd/hurd/id.h
@@ -21,6 +21,8 @@ 
 #define	_HURD_ID_H	1
 #include <features.h>
 #include <hurd/hurd_types.h>
+#include <errno.h>
+#include <bits/types/error_t.h>
 
 #include <cthreads.h>		/* For `struct mutex'.  */
 
diff --git a/hurd/hurd/lookup.h b/hurd/hurd/lookup.h
index 9a1f58058f..d0fa87b3d6 100644
--- a/hurd/hurd/lookup.h
+++ b/hurd/hurd/lookup.h
@@ -19,6 +19,8 @@ 
 #ifndef _HURD_LOOKUP_H
 #define _HURD_LOOKUP_H	1
 
+#include <errno.h>
+#include <bits/types/error_t.h>
 #include <hurd/hurd_types.h>
 
 /* These functions all take two callback functions as the first two arguments.
diff --git a/hurd/hurd/resource.h b/hurd/hurd/resource.h
index 23b795dce5..eb93110799 100644
--- a/hurd/hurd/resource.h
+++ b/hurd/hurd/resource.h
@@ -22,6 +22,7 @@ 
 #include <sys/types.h>
 #include <sys/resource.h>
 #include <errno.h>
+#include <bits/types/error_t.h>
 #include <hurd/process.h>
 
 /* This array contains the current resource limits for the process.  */
diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h
index 53234724a4..3d38b43f79 100644
--- a/hurd/hurd/signal.h
+++ b/hurd/hurd/signal.h
@@ -35,6 +35,7 @@ 
 #include <hurd/hurd_types.h>
 #include <signal.h>
 #include <errno.h>
+#include <bits/types/error_t.h>
 #include <hurd/msg.h>
 
 #include <cthreads.h>		/* For `struct mutex'.  */
diff --git a/hurd/hurd/sigpreempt.h b/hurd/hurd/sigpreempt.h
index d5a0abb729..f41c31c465 100644
--- a/hurd/hurd/sigpreempt.h
+++ b/hurd/hurd/sigpreempt.h
@@ -20,6 +20,7 @@ 
 
 #define	_HURD_SIGPREEMPT_H	1
 #include <errno.h>
+#include <bits/types/error_t.h>
 #include <signal.h>		/* For sigset_t, sighandler_t, SIG_ERR.  */
 struct hurd_sigstate;		/* <hurd/signal.h> */
 struct hurd_signal_detail;	/* <hurd/signal.h> */
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 7c363a6e4d..af1643c0c4 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -25,7 +25,7 @@  include ../Makeconfig
 headers	:= stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h      \
 	   monetary.h bits/monetary-ldbl.h				      \
 	   inttypes.h stdint.h bits/wordsize.h				      \
-	   errno.h sys/errno.h bits/errno.h				      \
+	   errno.h sys/errno.h bits/errno.h bits/types/error_t.h	      \
 	   ucontext.h sys/ucontext.h					      \
 	   alloca.h fmtmsg.h						      \
 	   bits/stdlib-bsearch.h sys/random.h bits/stdint-intn.h	      \
diff --git a/stdlib/bits/types/error_t.h b/stdlib/bits/types/error_t.h
new file mode 100644
index 0000000000..8ea7a8149e
--- /dev/null
+++ b/stdlib/bits/types/error_t.h
@@ -0,0 +1,24 @@ 
+/* Define error_t.
+   Copyright (C) 1991-2018 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __error_t_defined
+# define __error_t_defined 1
+
+typedef int error_t;
+
+#endif
diff --git a/stdlib/errno.h b/stdlib/errno.h
index e12fed60ea..fc8b496fae 100644
--- a/stdlib/errno.h
+++ b/stdlib/errno.h
@@ -45,12 +45,7 @@  extern int *__errno_location (void) __THROW __attribute_const__;
 extern char *program_invocation_name;
 extern char *program_invocation_short_name;
 
-/* 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
+#include <bits/types/error_t.h>
 
 # endif /* __USE_GNU */
 
diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h
index f0a11af9ea..f16cd51a63 100644
--- a/sysdeps/mach/hurd/bits/errno.h
+++ b/sysdeps/mach/hurd/bits/errno.h
@@ -215,14 +215,6 @@  enum __error_t_codes
   __FORCE_ERROR_T_CODES_SIGNED = -1
 };
 
-/* User-visible type of error codes.  It is ok to use 'int' or
-   'kern_return_t' for these, but with 'error_t' the debugger prints
-   symbolic values.  */
-# if !defined __error_t_defined && defined __USE_GNU
-#  define __error_t_defined 1
-typedef enum __error_t_codes error_t;
-# endif
-
 #endif /* not __ASSEMBLER__ */
 
 /* The C standard requires that all of the E-constants be
diff --git a/sysdeps/mach/hurd/bits/types/error_t.h b/sysdeps/mach/hurd/bits/types/error_t.h
new file mode 100644
index 0000000000..242331e618
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/types/error_t.h
@@ -0,0 +1,27 @@ 
+/* Define error_t.
+   Copyright (C) 1991-2018 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* User-visible type of error codes.  It is ok to use 'int' or
+   'kern_return_t' for these, but with 'error_t' the debugger prints
+   symbolic values.  */
+#ifndef __error_t_defined
+# define __error_t_defined 1
+
+typedef enum __error_t_codes error_t;
+
+#endif
diff --git a/sysdeps/mach/hurd/errnos.awk b/sysdeps/mach/hurd/errnos.awk
index bc69e06bf6..dc19350eb0 100644
--- a/sysdeps/mach/hurd/errnos.awk
+++ b/sysdeps/mach/hurd/errnos.awk
@@ -181,14 +181,6 @@  function print_errno_enum(maxseq)
   print "  __FORCE_ERROR_T_CODES_SIGNED = -1";
   print "};";
   print "";
-  print "/* User-visible type of error codes.  It is ok to use 'int' or";
-  print "   'kern_return_t' for these, but with 'error_t' the debugger prints";
-  print "   symbolic values.  */";
-  print "# if !defined __error_t_defined && defined __USE_GNU";
-  print "#  define __error_t_defined 1";
-  print "typedef enum __error_t_codes error_t;"
-  print "# endif";
-  print "";
   print "#endif /* not __ASSEMBLER__ */";
 }