[PATCH v3 1/3] Resurrect <machine/types.h> for <sys/types.h>

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Apr 21 06:21:44 UTC 2016


Resurrect <machine/_user_types.h> for use in <sys/types.h>.  Newlib
targets may provide an own version of <machine/types.h> in their machine
directory to add custom user types for <sys/types.h>.  Check the
_SYS_TYPES_H header guard to prevent a direct include of
<machine/types.h>, since the <machine/types.h> file is a Newlib
speciality.

Signed-off-by: Sebastian Huber <sebastian.huber at embedded-brains.de>
---
 newlib/libc/include/machine/types.h   |  14 ++--
 newlib/libc/include/sys/types.h       |  10 +--
 winsup/cygwin/include/cygwin/types.h  | 129 ++------------------------------
 winsup/cygwin/include/machine/types.h | 137 ++++++++++++++++++++++++++++++++++
 4 files changed, 152 insertions(+), 138 deletions(-)
 create mode 100644 winsup/cygwin/include/machine/types.h

diff --git a/newlib/libc/include/machine/types.h b/newlib/libc/include/machine/types.h
index 669242b..a5a64e6 100644
--- a/newlib/libc/include/machine/types.h
+++ b/newlib/libc/include/machine/types.h
@@ -1,11 +1,7 @@
-#ifndef	_MACHTYPES_H_
-#define	_MACHTYPES_H_
-
 /*
- * This file is provided for backward compatibility.  It is no longer used in
- * Newlib.  Do not add new things to it.
+ * Newlib targets may provide an own version of this file in their machine
+ * directory to add custom user types for <sys/types.h>.
  */
-
-#include <sys/_types.h>
-
-#endif	/* _MACHTYPES_H_ */
+#ifndef _SYS_TYPES_H
+#error "must be included via <sys/types.h>"
+#endif /* !_SYS_TYPES_H */
diff --git a/newlib/libc/include/sys/types.h b/newlib/libc/include/sys/types.h
index 067d650..bd7f287 100644
--- a/newlib/libc/include/sys/types.h
+++ b/newlib/libc/include/sys/types.h
@@ -245,7 +245,7 @@ typedef	__int64_t	sbintime_t;
  * pointers rather than structs to ensure maximum binary compatability with
  * previous releases.
  * This means that we don't use the types defined here, but rather in
- * <cygwin/types.h>
+ * <machine/_user_types.h>
  */
 #if defined(_POSIX_THREADS) && !defined(__CYGWIN__)
 
@@ -430,11 +430,7 @@ typedef struct {
   int   is_initialized;  /* is this structure initialized? */
   int   init_executed;   /* has the initialization routine been run? */
 } pthread_once_t;       /* dynamic package initialization */
-#else
-#if defined (__CYGWIN__)
-#include <cygwin/types.h>
-#endif
-#endif /* defined(_POSIX_THREADS) */
+#endif /* defined(_POSIX_THREADS) && !defined(__CYGWIN__) */
 
 /* POSIX Barrier Types */
 
@@ -468,6 +464,8 @@ typedef struct {
 #endif /* defined(_POSIX_READER_WRITER_LOCKS) */
 #endif /* __CYGWIN__ */
 
+#include <machine/types.h>
+
 #endif  /* !__need_inttypes */
 
 #undef __need_inttypes
diff --git a/winsup/cygwin/include/cygwin/types.h b/winsup/cygwin/include/cygwin/types.h
index faf08bd..1268693 100644
--- a/winsup/cygwin/include/cygwin/types.h
+++ b/winsup/cygwin/include/cygwin/types.h
@@ -1,4 +1,4 @@
-/* types.h
+/* cygwin/types.h
 
    Copyright 2001, 2002, 2003, 2005, 2006, 2010, 2011, 2012, 2015 Red Hat Inc.
    Written by Robert Collins <rbtcollins at hotmail.com>
@@ -12,128 +12,11 @@ details. */
 #ifndef _CYGWIN_TYPES_H
 #define _CYGWIN_TYPES_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
+/*
+ * This file is provided for backward compatibility.  It is no longer used in
+ * Newlib.  Do not add new things to it.
+ */
 
-#include <sys/_stdint.h>
-#include <endian.h>
-#include <bits/wordsize.h>
-#include <sys/_timespec.h>
-
-#ifndef __timespec_t_defined
-#define __timespec_t_defined
-typedef struct timespec timespec_t;
-#endif /*__timespec_t_defined*/
-
-#ifndef __timestruc_t_defined
-#define __timestruc_t_defined
-typedef struct timespec timestruc_t;
-#endif /*__timestruc_t_defined*/
-
-typedef __loff_t loff_t;
-
-#if defined (__INSIDE_CYGWIN__) && !defined (__x86_64__)
-struct __flock32 {
-	short	 l_type;	/* F_RDLCK, F_WRLCK, or F_UNLCK */
-	short	 l_whence;	/* flag to choose starting offset */
-	_off_t	 l_start;	/* relative offset, in bytes */
-	_off_t	 l_len;		/* length, in bytes; 0 means lock to EOF */
-	short	 l_pid;		/* returned with F_GETLK */
-	short	 l_xxx;		/* reserved for future use */
-};
-#endif
-
-struct flock {
-	short	 l_type;	/* F_RDLCK, F_WRLCK, or F_UNLCK */
-	short	 l_whence;	/* flag to choose starting offset */
-	off_t	 l_start;	/* relative offset, in bytes */
-	off_t	 l_len;		/* length, in bytes; 0 means lock to EOF */
-	pid_t	 l_pid;		/* returned with F_GETLK */
-};
-
-#ifndef __BIT_TYPES_DEFINED
-#define __BIT_TYPES_DEFINED__ 1
-
-#ifndef __vm_offset_t_defined
-#define __vm_offset_t_defined
-typedef unsigned long vm_offset_t;
-#endif /*__vm_offset_t_defined*/
-
-#ifndef __vm_size_t_defined
-#define __vm_size_t_defined
-typedef unsigned long vm_size_t;
-#endif /*__vm_size_t_defined*/
-
-#ifndef __vm_object_t_defined
-#define __vm_object_t_defined
-typedef void *vm_object_t;
-#endif /* __vm_object_t_defined */
-
-#ifndef __register_t_defined
-#define __register_t_defined
-typedef __int32_t register_t;
-#endif
-
-#ifndef __addr_t_defined
-#define __addr_t_defined
-typedef char *addr_t;
-#endif
-
-#endif /*__BIT_TYPES_DEFINED*/
-
-#if !defined(__INSIDE_CYGWIN__) || !defined(__cplusplus)
-
-typedef struct __pthread_t {char __dummy;} *pthread_t;
-typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
-
-typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
-typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
-typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
-typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
-typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
-typedef struct __pthread_barrierattr_t {char __dummy;} *pthread_barrierattr_t;
-typedef struct __pthread_barrier_t {char __dummy;} *pthread_barrier_t;
-
-  /* These variables are not user alterable. This means you!. */
-typedef struct
-{
-  pthread_mutex_t mutex;
-  int state;
-}
-pthread_once_t;
-typedef struct __pthread_spinlock_t {char __dummy;} *pthread_spinlock_t;
-typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
-typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
-
-#else
-
-/* pthreads types */
-
-typedef class pthread *pthread_t;
-typedef class pthread_mutex *pthread_mutex_t;
-typedef class pthread_key *pthread_key_t;
-typedef class pthread_attr *pthread_attr_t;
-typedef class pthread_mutexattr *pthread_mutexattr_t;
-typedef class pthread_condattr *pthread_condattr_t;
-typedef class pthread_cond *pthread_cond_t;
-typedef class pthread_barrier *pthread_barrier_t;
-typedef class pthread_barrierattr *pthread_barrierattr_t;
-typedef class pthread_once pthread_once_t;
-typedef class pthread_spinlock *pthread_spinlock_t;
-typedef class pthread_rwlock *pthread_rwlock_t;
-typedef class pthread_rwlockattr *pthread_rwlockattr_t;
-
-/* semaphores types */
-typedef class semaphore *sem_t;
-#endif /* __INSIDE_CYGWIN__ */
-
-/* this header needs the dev_t typedef */
-#include <sys/sysmacros.h>
-
-#ifdef __cplusplus
-}
-#endif
+#include <sys/types.h>
 
 #endif /* _CYGWIN_TYPES_H */
diff --git a/winsup/cygwin/include/machine/types.h b/winsup/cygwin/include/machine/types.h
new file mode 100644
index 0000000..cfc372f
--- /dev/null
+++ b/winsup/cygwin/include/machine/types.h
@@ -0,0 +1,137 @@
+/* machine/types.h
+
+   Copyright 2001, 2002, 2003, 2005, 2006, 2010, 2011, 2012, 2015 Red Hat Inc.
+   Written by Robert Collins <rbtcollins at hotmail.com>
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifndef _SYS_TYPES_H
+#error "must be included via <sys/types.h>"
+#endif /* !_SYS_TYPES_H */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <endian.h>
+#include <bits/wordsize.h>
+#include <sys/_timespec.h>
+
+#ifndef __timespec_t_defined
+#define __timespec_t_defined
+typedef struct timespec timespec_t;
+#endif /*__timespec_t_defined*/
+
+#ifndef __timestruc_t_defined
+#define __timestruc_t_defined
+typedef struct timespec timestruc_t;
+#endif /*__timestruc_t_defined*/
+
+typedef __loff_t loff_t;
+
+#if defined (__INSIDE_CYGWIN__) && !defined (__x86_64__)
+struct __flock32 {
+	short	 l_type;	/* F_RDLCK, F_WRLCK, or F_UNLCK */
+	short	 l_whence;	/* flag to choose starting offset */
+	_off_t	 l_start;	/* relative offset, in bytes */
+	_off_t	 l_len;		/* length, in bytes; 0 means lock to EOF */
+	short	 l_pid;		/* returned with F_GETLK */
+	short	 l_xxx;		/* reserved for future use */
+};
+#endif
+
+struct flock {
+	short	 l_type;	/* F_RDLCK, F_WRLCK, or F_UNLCK */
+	short	 l_whence;	/* flag to choose starting offset */
+	off_t	 l_start;	/* relative offset, in bytes */
+	off_t	 l_len;		/* length, in bytes; 0 means lock to EOF */
+	pid_t	 l_pid;		/* returned with F_GETLK */
+};
+
+#ifndef __BIT_TYPES_DEFINED
+#define __BIT_TYPES_DEFINED__ 1
+
+#ifndef __vm_offset_t_defined
+#define __vm_offset_t_defined
+typedef unsigned long vm_offset_t;
+#endif /*__vm_offset_t_defined*/
+
+#ifndef __vm_size_t_defined
+#define __vm_size_t_defined
+typedef unsigned long vm_size_t;
+#endif /*__vm_size_t_defined*/
+
+#ifndef __vm_object_t_defined
+#define __vm_object_t_defined
+typedef void *vm_object_t;
+#endif /* __vm_object_t_defined */
+
+#ifndef __register_t_defined
+#define __register_t_defined
+typedef __int32_t register_t;
+#endif
+
+#ifndef __addr_t_defined
+#define __addr_t_defined
+typedef char *addr_t;
+#endif
+
+#endif /*__BIT_TYPES_DEFINED*/
+
+#if !defined(__INSIDE_CYGWIN__) || !defined(__cplusplus)
+
+typedef struct __pthread_t {char __dummy;} *pthread_t;
+typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
+
+typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
+typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
+typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
+typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
+typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
+typedef struct __pthread_barrierattr_t {char __dummy;} *pthread_barrierattr_t;
+typedef struct __pthread_barrier_t {char __dummy;} *pthread_barrier_t;
+
+  /* These variables are not user alterable. This means you!. */
+typedef struct
+{
+  pthread_mutex_t mutex;
+  int state;
+}
+pthread_once_t;
+typedef struct __pthread_spinlock_t {char __dummy;} *pthread_spinlock_t;
+typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
+typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
+
+#else
+
+/* pthreads types */
+
+typedef class pthread *pthread_t;
+typedef class pthread_mutex *pthread_mutex_t;
+typedef class pthread_key *pthread_key_t;
+typedef class pthread_attr *pthread_attr_t;
+typedef class pthread_mutexattr *pthread_mutexattr_t;
+typedef class pthread_condattr *pthread_condattr_t;
+typedef class pthread_cond *pthread_cond_t;
+typedef class pthread_barrier *pthread_barrier_t;
+typedef class pthread_barrierattr *pthread_barrierattr_t;
+typedef class pthread_once pthread_once_t;
+typedef class pthread_spinlock *pthread_spinlock_t;
+typedef class pthread_rwlock *pthread_rwlock_t;
+typedef class pthread_rwlockattr *pthread_rwlockattr_t;
+
+/* semaphores types */
+typedef class semaphore *sem_t;
+#endif /* __INSIDE_CYGWIN__ */
+
+/* this header needs the dev_t typedef */
+#include <sys/sysmacros.h>
+
+#ifdef __cplusplus
+}
+#endif
-- 
1.8.4.5



More information about the devel mailing list