This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 17/18] Provide __size_t via <sys/_types.h>


----- 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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]