This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: [PATCH 17/18] Provide __size_t via <sys/_types.h>
- From: Sebastian Huber <sebastian dot huber at embedded-brains dot de>
- To: newlib at sourceware dot org
- Cc: Craig Howland <howland at LGSInnovations dot com>
- Date: Thu, 14 Apr 2016 21:23:04 +0200 (CEST)
- Subject: Re: [PATCH 17/18] Provide __size_t via <sys/_types.h>
- Authentication-results: sourceware.org; auth=none
- References: <1460634887-4420-1-git-send-email-sebastian dot huber at embedded-brains dot de> <1460634887-4420-17-git-send-email-sebastian dot huber at embedded-brains dot de> <570FB8E4 dot 8020404 at LGSInnovations dot com>
----- Craig Howland <howland@LGSInnovations.com> schrieb:
> On 04/14/2016 07:54 AM, Sebastian Huber wrote:
> > Various FreeBSD source and header files need a typedef __size_t via
> > <sys/_types.h>. Unfortunately the GCC provided <stddef.h> uses
> >
> > #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
> > || defined(__DragonFly__) \
> > || defined(__FreeBSD_kernel__)
> > /* __size_t is a typedef on FreeBSD 5, must not trash it. */
> > #elif defined (__VMS__)
> > /* __size_t is also a typedef on VMS. */
> > #else
> > #define __size_t
> > #endif
> >
> > and therefore defines __size_t on Newlib targets which would trash a
> > __size_t typedef. Include <stddef.h> before <sys/_types.h> in
> > <sys/types.h> and undefine __size_t in <sys/_types.h> as a workaround.
> >
> > Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> > ---
> > newlib/libc/include/sys/_types.h | 15 +++++++++++++++
> > newlib/libc/include/sys/types.h | 3 +--
> > 2 files changed, 16 insertions(+), 2 deletions(-)
> >
> > diff --git a/newlib/libc/include/sys/_types.h b/newlib/libc/include/sys/_types.h
> > index 73f1de6..6ea9bff 100644
> > --- a/newlib/libc/include/sys/_types.h
> > +++ b/newlib/libc/include/sys/_types.h
> > @@ -119,6 +119,21 @@ typedef _off64_t _fpos64_t;
> > #endif
> > #endif
> >
> > +/* Defined by GCC provided <stddef.h> */
> > +#undef __size_t
> > +
> > +#ifndef __machine_size_t_defined
> > +#ifdef __SIZE_TYPE__
> > +typedef __SIZE_TYPE__ __size_t;
> > +#else
> > +#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
> > +typedef int __size_t;
> > +#else
> > +typedef long __size_t;
> > +#endif
> > +#endif
> > +#endif
> > +
> > #ifndef __machine_ssize_t_defined
> > #ifdef __SIZE_TYPE__
> > /* If __SIZE_TYPE__ is defined (gcc) we define ssize_t based on size_t.
> > diff --git a/newlib/libc/include/sys/types.h b/newlib/libc/include/sys/types.h
> > index 57b74ef..3391753 100644
> > --- a/newlib/libc/include/sys/types.h
> > +++ b/newlib/libc/include/sys/types.h
> > @@ -56,11 +56,10 @@ typedef quad_t * qaddr_t;
> > #ifndef __need_inttypes
> >
> > #define _SYS_TYPES_H
> > +#include <stddef.h>
> > #include <sys/_types.h>
> > #include <sys/_stdint.h>
> >
> > -# include <stddef.h>
> > -
> > #if __BSD_VISIBLE
> > #include <machine/endian.h>
> > #include <sys/select.h>
> The ordering distinction described in your email is "lost" by not being in the
> code. Since the ordering is important, it should be noted. Perhaps something like
>
> +#include <stddef.h> /* must be before sys/_types.h for __size_t considerations */
Ok, I will add this to v2 of the patch. This patch is independent of the other patches.
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschÃftliche Mitteilung im Sinne des EHUG.