[PATCH 04/18] Define mode_t via __mode_t
Corinna Vinschen
vinschen@redhat.com
Fri Apr 15 09:48:00 GMT 2016
On Apr 14 13:54, Sebastian Huber wrote:
> Use __uint32_t to avoid the use of GCC-specific _ST_INT32.
>
> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> ---
> newlib/libc/include/sys/_types.h | 16 +++++++++
> newlib/libc/include/sys/types.h | 50 ++++----------------------
> newlib/libc/sys/rtems/include/machine/_types.h | 2 +-
> winsup/cygwin/include/cygwin/types.h | 4 ---
> winsup/cygwin/include/machine/_types.h | 3 ++
> 5 files changed, 26 insertions(+), 49 deletions(-)
>
> diff --git a/newlib/libc/include/sys/_types.h b/newlib/libc/include/sys/_types.h
> index ad322b1..af32bcb 100644
> --- a/newlib/libc/include/sys/_types.h
> +++ b/newlib/libc/include/sys/_types.h
> @@ -56,6 +56,22 @@ typedef unsigned short __ino_t;
> #endif
> #endif
>
> +#ifndef __machine_mode_t_defined
> +#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__))
> +typedef int __mode_t;
> +#else
> +#if defined(__sparc__) && !defined(__sparc_v9__)
> +#ifdef __svr4__
> +typedef unsigned long __mode_t;
> +#else
> +typedef unsigned short __mode_t;
> +#endif
> +#else
> +typedef __uint32_t __mode_t;
> +#endif
> +#endif
> +#endif
> +
> #ifndef __machine_off64_t_defined
> __extension__ typedef long long _off64_t;
> #endif
> diff --git a/newlib/libc/include/sys/types.h b/newlib/libc/include/sys/types.h
> index 2bf9eb5..e48c2f2 100644
> --- a/newlib/libc/include/sys/types.h
> +++ b/newlib/libc/include/sys/types.h
> @@ -59,27 +59,8 @@ typedef quad_t * qaddr_t;
> #include <sys/_types.h>
> #include <sys/_stdint.h>
>
> -#ifdef __i386__
> -#if defined (GO32) || defined (__MSDOS__)
> -#define __MS_types__
> -#endif
> -#endif
> -
> # include <stddef.h>
>
> -/* To ensure the stat struct's layout doesn't change when sizeof(int), etc.
> - changes, we assume sizeof short and long never change and have all types
> - used to define struct stat use them and not int where possible.
> - Where not possible, _ST_INTxx are used. It would be preferable to not have
> - such assumptions, but until the extra fluff is necessary, it's avoided.
> - No 64 bit targets use stat yet. What to do about them is postponed
> - until necessary. */
> -#ifdef __GNUC__
> -#define _ST_INT32 __attribute__ ((__mode__ (__SI__)))
> -#else
> -#define _ST_INT32
> -#endif
> -
> #if __BSD_VISIBLE
> #include <sys/select.h>
> # define physadr physadr_t
> @@ -144,7 +125,8 @@ typedef __ino_t ino_t; /* inode number */
> #define _INO_T_DECLARED
> #endif
>
> -#ifdef __MS_types__
> +#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__))
> +typedef char * addr_t;
> typedef unsigned long vm_offset_t;
> typedef unsigned long vm_size_t;
>
> @@ -159,7 +141,7 @@ typedef unsigned int u_int32_t;
> typedef long long int64_t;
> typedef unsigned long long u_int64_t;
> typedef int32_t register_t;
> -#endif /* __MS_types__ */
> +#endif /* __i386__ && (GO32 || __MSDOS__) */
>
> /*
> * All these should be machine specific - right now they are all broken.
> @@ -190,10 +172,6 @@ typedef __pid_t pid_t; /* process id */
> #define _PID_T_DECLARED
> #endif
>
> -#if defined(__rtems__)
> -typedef _mode_t mode_t;
> -#endif
> -
> #ifndef _KEY_T_DECLARED
> typedef __key_t key_t; /* IPC key */
> #define _KEY_T_DECLARED
> @@ -204,29 +182,13 @@ typedef _ssize_t ssize_t;
> #define _SSIZE_T_DECLARED
> #endif
>
> -#if !defined(__CYGWIN__) && !defined(__rtems__)
> -#ifdef __MS_types__
> -typedef char * addr_t;
> -typedef int mode_t;
> -#else
> -#if defined (__sparc__) && !defined (__sparc_v9__)
> -#ifdef __svr4__
> -typedef unsigned long mode_t;
> -#else
> -typedef unsigned short mode_t;
> +#ifndef _MODE_T_DECLARED
> +typedef __mode_t mode_t; /* permissions */
> +#define _MODE_T_DECLARED
> #endif
> -#else
> -typedef unsigned int mode_t _ST_INT32;
> -#endif
> -#endif /* ! __MS_types__ */
> -#endif /*__CYGWIN__*/
>
> typedef unsigned short nlink_t;
>
> -#undef __MS_types__
> -#undef _ST_INT32
> -
> -
> #ifndef __clockid_t_defined
> typedef _CLOCKID_T_ clockid_t;
> #define __clockid_t_defined
> diff --git a/newlib/libc/sys/rtems/include/machine/_types.h b/newlib/libc/sys/rtems/include/machine/_types.h
> index 76a6841..15de3ce 100644
> --- a/newlib/libc/sys/rtems/include/machine/_types.h
> +++ b/newlib/libc/sys/rtems/include/machine/_types.h
> @@ -22,7 +22,7 @@ typedef _off_t _fpos_t;
> typedef unsigned long __ino_t;
> #define __machine_ino_t_defined
>
> -typedef __uint32_t _mode_t;
> +typedef __uint32_t __mode_t;
> #define __machine_mode_t_defined
>
> #endif /* _MACHINE__TYPES_H */
> diff --git a/winsup/cygwin/include/cygwin/types.h b/winsup/cygwin/include/cygwin/types.h
> index c785fb2..2a9580e 100644
> --- a/winsup/cygwin/include/cygwin/types.h
> +++ b/winsup/cygwin/include/cygwin/types.h
> @@ -104,10 +104,6 @@ typedef __int32_t register_t;
> typedef char *addr_t;
> #endif
>
> -#ifndef __mode_t_defined
> -#define __mode_t_defined
> -typedef unsigned mode_t;
^^^^^^^^^^^^^^^^^^^^^^^^
Whoever did that way back when, should be shot (may be me).
Can we get rid of that Cygwin special entirely, please? Unsigned and
__uint32_t are equivalent anyway on Cygwin, so I'd rather use the
definition from sys/_types.h in future :}
Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20160415/0871c9aa/attachment.sig>
More information about the Newlib
mailing list