[PATCH] Fix _SC_xxx and _POSIX_xxx definitions

Corinna Vinschen vinschen@redhat.com
Tue Feb 6 22:33:00 GMT 2007


Hi,

I enhanced the _POSIX_xxx definitions for Cygwin in sys/features.h 
which were only barely reflecting Cygwin's capabilities.  The values
are taken from the SUSv3 definitions as described in
http://www.opengroup.org/onlinepubs/009695399/basedefs/unistd.h.html

This required a tiny patch to sys/types.h since Cygwin supports
_POSIX_READER_WRITER_LOCKS, but has its own definition of
pthread_rwlock_t and pthread_rwlockattr_t in cygwin/types.h.

What's noticable here is that SUSv3 allows to define _POSIX_xxx
values to -1 if the option is not supported.  However, this collides
with `#ifdef _POSIX_xxx' expressions, as they are used in newlib.
So it's dangerous or rather impossible to define these values
as -1.  This looks wrong, but OTOH the same is done in glibc, too.
The correct expression would rather look like

  #if defined (_POSIX_xxx)
  #if   __POSIX_xxx > 0
  ...
  #endif
  #endif

I also reworked the _SC_xxx definitions in sys/unistd.h as described
in the above SUSv3 unistd.h man page.  It's especially noteworthy
that SUSv3 does not allow to omit any one of the _SC_xxx definitions.
All of them shall be defined, whether or not the system supports the
underlying option.  I changed the existing definitions accordingly.


Ok to commit?

Corinna


	* libc/include/sys/features.h: Add definition of all supported
	_POSIX_xxx values for Cygwin.
	* libc/include/sys/types.h (pthread_rwlock_t): Omit definition
	on Cygwin.
	(pthread_rwlockattr_t): Ditto.
	* libc/include/sys/unistd.h: Define all _SC_xxx values as
	required by SUSv3.  Unify formatting.


Index: libc/include/sys/features.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/features.h,v
retrieving revision 1.8
diff -u -p -r1.8 features.h
--- libc/include/sys/features.h	13 Sep 2006 22:09:27 -0000	1.8
+++ libc/include/sys/features.h	6 Feb 2007 20:48:19 -0000
@@ -81,17 +81,89 @@ extern "C" {
 #endif
 
 #ifdef __CYGWIN__
-# define _POSIX_JOB_CONTROL			1
-# define _POSIX_SAVED_IDS			0
-# define _POSIX_VERSION				199009L
-# define _POSIX_THREADS                         1
-# define _POSIX_THREAD_PROCESS_SHARED           1
-# define _POSIX_THREAD_SAFE_FUNCTIONS           1
-# define _POSIX_THREAD_PRIORITY_SCHEDULING      1
-# define _POSIX_THREAD_ATTR_STACKSIZE           1
-# define _POSIX_SEMAPHORES                      1
-# define _POSIX_TIMERS				1
-# define _POSIX_MEMLOCK_RANGE			1
+#define _POSIX_VERSION				200112L
+#define _POSIX2_VERSION				200112L
+#define _XOPEN_VERSION				   600
+
+#define _POSIX_ADVISORY_INFO			200112L
+/* #define _POSIX_ASYNCHRONOUS_IO		    -1 */
+/* #define _POSIX_BARRIERS			    -1 */
+#define _POSIX_CHOWN_RESTRICTED			     1
+/* #define _POSIX_CLOCK_SELECTION		    -1 */
+/* #define _POSIX_CPUTIME			    -1 */
+#define _POSIX_FSYNC				200112L
+#define _POSIX_IPV6				200112L
+#define _POSIX_JOB_CONTROL			     1
+#define _POSIX_MAPPED_FILES			200112L
+/* #define _POSIX_MEMLOCK			    -1 */
+#define _POSIX_MEMLOCK_RANGE			200112L
+#define _POSIX_MEMORY_PROTECTION		200112L
+/* #define _POSIX_MESSAGE_PASSING		    -1 */
+/* #define _POSIX_MONOTONIC_CLOCK		    -1 */
+#define _POSIX_NO_TRUNC				     1
+/* #define _POSIX_PRIORITIZED_IO		    -1 */
+#define _POSIX_PRIORITY_SCHEDULING		200112L
+#define _POSIX_RAW_SOCKETS			200112L
+#define _POSIX_READER_WRITER_LOCKS		200112L
+#define _POSIX_REALTIME_SIGNALS			200112L
+#define _POSIX_REGEXP				     1
+#define _POSIX_SAVED_IDS			     1
+#define _POSIX_SEMAPHORES			     1
+/* #define _POSIX_SHARED_MEMORY_OBJECTS		    -1 */
+#define _POSIX_SHELL				     1
+/* #define _POSIX_SPAWN				    -1 */
+/* #define _POSIX_SPIN_LOCKS			    -1 */
+/* #define _POSIX_SPORADIC_SERVER		    -1 */
+#define _POSIX_SYNCHRONIZED_IO			200112L
+/* #define _POSIX_THREAD_ATTR_STACKADDR		    -1 */
+#define _POSIX_THREAD_ATTR_STACKSIZE	200112L
+/* #define _POSIX_THREAD_CPUTIME		    -1 */
+/* #define _POSIX_THREAD_PRIO_INHERIT		    -1 */
+/* #define _POSIX_THREAD_PRIO_PROTECT		    -1 */
+#define _POSIX_THREAD_PRIORITY_SCHEDULING	200112L
+#define _POSIX_THREAD_PROCESS_SHARED		200112L
+#define _POSIX_THREAD_SAFE_FUNCTIONS		200112L
+/* #define _POSIX_THREAD_SPORADIC_SERVER	    -1 */
+#define _POSIX_THREADS				200112L
+/* #define _POSIX_TIMEOUTS			    -1 */
+#define _POSIX_TIMERS				     1
+/* #define _POSIX_TRACE				    -1 */
+/* #define _POSIX_TRACE_EVENT_FILTER		    -1 */
+/* #define _POSIX_TRACE_INHERIT			    -1 */
+/* #define _POSIX_TRACE_LOG			    -1 */
+/* #define _POSIX_TYPED_MEMORY_OBJECTS		    -1 */
+#define _POSIX_VDISABLE				   '\0'
+#define _POSIX2_C_BIND				200112L
+#define _POSIX2_C_DEV				200112L
+#define _POSIX2_CHAR_TERM			200112L
+/* #define _POSIX2_FORT_DEV			    -1 */
+/* #define _POSIX2_FORT_RUN			    -1 */
+/* #define _POSIX2_LOCALEDEF			    -1 */
+/* #define _POSIX2_PBS				    -1 */
+/* #define _POSIX2_PBS_ACCOUNTING		    -1 */
+/* #define _POSIX2_PBS_CHECKPOINT		    -1 */
+/* #define _POSIX2_PBS_LOCATE			    -1 */
+/* #define _POSIX2_PBS_MESSAGE			    -1 */
+/* #define _POSIX2_PBS_TRACK			    -1 */
+#define _POSIX2_SW_DEV				200112L
+#define _POSIX2_UPE				200112L
+/* #define _POSIX_V6_ILP32_OFF32		    -1 */
+#define _XBS5_ILP32_OFF32			_POSIX_V6_ILP32_OFF32
+#define _POSIX_V6_ILP32_OFFBIG			     1
+#define _XBS5_ILP32_OFFBIG			_POSIX_V6_ILP32_OFFBIG
+/* #define _POSIX_V6_LP64_OFF64			    -1 */
+#define _XBS5_LP64_OFF64			_POSIX_V6_LP64_OFF64
+/* #define _POSIX_V6_LPBIG_OFFBIG		    -1 */
+#define _XBS5_LPBIG_OFFBIG			_POSIX_V6_LPBIG_OFFBIG
+#define _XOPEN_CRYPT				     1
+#define _XOPEN_ENH_I18N				     1
+/* #define _XOPEN_LEGACY			    -1 */
+/* #define _XOPEN_REALTIME			    -1 */
+/* #define _XOPEN_REALTIME_THREADS		    -1 */
+#define _XOPEN_SHM				     1
+/* #define _XOPEN_STREAMS			    -1 */
+/* #define _XOPEN_UNIX				    -1 */
+
 #endif
 
 #ifdef __cplusplus
Index: libc/include/sys/types.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/types.h,v
retrieving revision 1.26
diff -u -p -r1.26 types.h
--- libc/include/sys/types.h	13 Sep 2006 22:09:27 -0000	1.26
+++ libc/include/sys/types.h	6 Feb 2007 20:48:19 -0000
@@ -391,6 +391,7 @@ typedef __uint32_t pthread_spinlock_t;  
 
 /* POSIX Reader/Writer Lock Types */
 
+#if !defined (__CYGWIN__)
 #if defined(_POSIX_READER_WRITER_LOCKS)
 typedef __uint32_t pthread_rwlock_t;         /* POSIX RWLock Object */
 typedef struct {
@@ -400,6 +401,7 @@ typedef struct {
 #endif
 } pthread_rwlockattr_t;
 #endif /* defined(_POSIX_READER_WRITER_LOCKS) */
+#endif /* __CYGWIN__ */
 
 #endif  /* !__need_inttypes */
 
Index: libc/include/sys/unistd.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/unistd.h,v
retrieving revision 1.57
diff -u -p -r1.57 unistd.h
--- libc/include/sys/unistd.h	7 Nov 2006 15:33:40 -0000	1.57
+++ libc/include/sys/unistd.h	6 Feb 2007 20:48:19 -0000
@@ -231,63 +231,54 @@ int     _EXFUN(symlink, (const char *__n
 #define STDERR_FILENO   2       /* standard error file descriptor */
 
 /*
- *  4.8.1 Get Configurable System Variables, P1003.1b-1993, p. 96
- *
- *  NOTE: Table 4-2, Configurable System Variables, p. 96
+ *  sysconf values per IEEE Std 1003.1, 2004 Edition
  */
 
-#define _SC_ARG_MAX                 0
-#define _SC_CHILD_MAX               1
-#define _SC_CLK_TCK                 2
-#define _SC_NGROUPS_MAX             3
-#define _SC_OPEN_MAX                4
-  /* no _SC_STREAM_MAX */
-#define _SC_JOB_CONTROL             5
-#define _SC_SAVED_IDS               6
-#define _SC_VERSION                 7
-#define _SC_PAGESIZE                8
+#define _SC_ARG_MAX                       0
+#define _SC_CHILD_MAX                     1
+#define _SC_CLK_TCK                       2
+#define _SC_NGROUPS_MAX                   3
+#define _SC_OPEN_MAX                      4
+#define _SC_JOB_CONTROL                   5
+#define _SC_SAVED_IDS                     6
+#define _SC_VERSION                       7
+#define _SC_PAGESIZE                      8
+#define _SC_PAGE_SIZE                     _SC_PAGESIZE
 /* CYGWIN-specific values .. do not touch */
-#define _SC_NPROCESSORS_CONF        9
-#define _SC_NPROCESSORS_ONLN       10
-#define _SC_PHYS_PAGES             11
-#define _SC_AVPHYS_PAGES           12
+#define _SC_NPROCESSORS_CONF              9
+#define _SC_NPROCESSORS_ONLN             10
+#define _SC_PHYS_PAGES                   11
+#define _SC_AVPHYS_PAGES                 12
 /* end of CYGWIN-specific values */
-#define _SC_MQ_OPEN_MAX            13
-#define _SC_MQ_PRIO_MAX            14
-#define _SC_RTSIG_MAX              15
-#define _SC_SEM_NSEMS_MAX          16
-#define _SC_SEM_VALUE_MAX          17
-#define _SC_SIGQUEUE_MAX           18
-#define _SC_TIMER_MAX              19
-#define _SC_TZNAME_MAX             20
-
-#define _SC_ASYNCHRONOUS_IO        21
-#define _SC_FSYNC                  22
-#define _SC_MAPPED_FILES           23
-#define _SC_MEMLOCK                24
-#define _SC_MEMLOCK_RANGE          25
-#define _SC_MEMORY_PROTECTION      26
-#define _SC_MESSAGE_PASSING        27
-#define _SC_PRIORITIZED_IO         28
-#define _SC_REALTIME_SIGNALS       29
-#define _SC_SEMAPHORES             30
-#define _SC_SHARED_MEMORY_OBJECTS  31
-#define _SC_SYNCHRONIZED_IO        32
-#define _SC_TIMERS                 33
-#define _SC_AIO_LISTIO_MAX         34
-#define _SC_AIO_MAX                35
-#define _SC_AIO_PRIO_DELTA_MAX     36
-#define _SC_DELAYTIMER_MAX         37
-
-/*
- *  P1003.1c/D10, p. 52 adds the following.
- */
-
+#define _SC_MQ_OPEN_MAX                  13
+#define _SC_MQ_PRIO_MAX                  14
+#define _SC_RTSIG_MAX                    15
+#define _SC_SEM_NSEMS_MAX                16
+#define _SC_SEM_VALUE_MAX                17
+#define _SC_SIGQUEUE_MAX                 18
+#define _SC_TIMER_MAX                    19
+#define _SC_TZNAME_MAX                   20
+#define _SC_ASYNCHRONOUS_IO              21
+#define _SC_FSYNC                        22
+#define _SC_MAPPED_FILES                 23
+#define _SC_MEMLOCK                      24
+#define _SC_MEMLOCK_RANGE                25
+#define _SC_MEMORY_PROTECTION            26
+#define _SC_MESSAGE_PASSING              27
+#define _SC_PRIORITIZED_IO               28
+#define _SC_REALTIME_SIGNALS             29
+#define _SC_SEMAPHORES                   30
+#define _SC_SHARED_MEMORY_OBJECTS        31
+#define _SC_SYNCHRONIZED_IO              32
+#define _SC_TIMERS                       33
+#define _SC_AIO_LISTIO_MAX               34
+#define _SC_AIO_MAX                      35
+#define _SC_AIO_PRIO_DELTA_MAX           36
+#define _SC_DELAYTIMER_MAX               37
 #define _SC_THREAD_KEYS_MAX              38
 #define _SC_THREAD_STACK_MIN             39
 #define _SC_THREAD_THREADS_MAX           40
 #define _SC_TTY_NAME_MAX                 41
-
 #define _SC_THREADS                      42
 #define _SC_THREAD_ATTR_STACKADDR        43
 #define _SC_THREAD_ATTR_STACKSIZE        44
@@ -302,34 +293,99 @@ int     _EXFUN(symlink, (const char *__n
 #define _SC_GETPW_R_SIZE_MAX             51
 #define _SC_LOGIN_NAME_MAX               52
 #define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
-
-#if !defined(__rtems__)
-#define _SC_STREAM_MAX			100
-#endif
-#if !defined(__CYGWIN__) && !defined(__rtems__)
-#define _SC_PRIORITY_SCHEDULING		101
-#endif
-  
-# define	_PC_LINK_MAX	        0
-# define	_PC_MAX_CANON	        1
-# define	_PC_MAX_INPUT	        2
-# define	_PC_NAME_MAX	        3
-# define	_PC_PATH_MAX	        4
-# define	_PC_PIPE_BUF	        5
-# define	_PC_CHOWN_RESTRICTED   	6
-# define	_PC_NO_TRUNC	        7
-# define	_PC_VDISABLE	        8
-# define	_PC_ASYNC_IO            9
-# define	_PC_PRIO_IO            10
-# define	_PC_SYNC_IO            11
-# define	_PC_FILESIZEBITS       12
-# define	_PC_2_SYMLINKS         13
-# define	_PC_SYMLINK_MAX        14
+#define _SC_ADVISORY_INFO                54
+#define _SC_ATEXIT_MAX                   55
+#define _SC_BARRIERS                     56
+#define _SC_BC_BASE_MAX                  57
+#define _SC_BC_DIM_MAX                   58
+#define _SC_BC_SCALE_MAX                 59
+#define _SC_BC_STRING_MAX                60
+#define _SC_CLOCK_SELECTION              61
+#define _SC_COLL_WEIGHTS_MAX             62
+#define _SC_CPUTIME                      63
+#define _SC_EXPR_NEST_MAX                64
+#define _SC_HOST_NAME_MAX                65
+#define _SC_IOV_MAX                      66
+#define _SC_IPV6                         67
+#define _SC_LINE_MAX                     68
+#define _SC_MONOTONIC_CLOCK              69
+#define _SC_RAW_SOCKETS                  70
+#define _SC_READER_WRITER_LOCKS          71
+#define _SC_REGEXP                       72
+#define _SC_RE_DUP_MAX                   73
+#define _SC_SHELL                        74
+#define _SC_SPAWN                        75
+#define _SC_SPIN_LOCKS                   76
+#define _SC_SPORADIC_SERVER              77
+#define _SC_SS_REPL_MAX                  78
+#define _SC_SYMLOOP_MAX                  79
+#define _SC_THREAD_CPUTIME               80
+#define _SC_THREAD_SPORADIC_SERVER       81
+#define _SC_TIMEOUTS                     82
+#define _SC_TRACE                        83
+#define _SC_TRACE_EVENT_FILTER           84
+#define _SC_TRACE_EVENT_NAME_MAX         85
+#define _SC_TRACE_INHERIT                86
+#define _SC_TRACE_LOG                    87
+#define _SC_TRACE_NAME_MAX               88
+#define _SC_TRACE_SYS_MAX                89
+#define _SC_TRACE_USER_EVENT_MAX         90
+#define _SC_TYPED_MEMORY_OBJECTS         91
+#define _SC_V6_ILP32_OFF32               92
+#define _SC_XBS5_ILP32_OFF32             _SC_V6_ILP32_OFF32
+#define _SC_V6_ILP32_OFFBIG              93
+#define _SC_XBS5_ILP32_OFFBIG            _SC_V6_ILP32_OFFBIG
+#define _SC_V6_LP64_OFF64                94
+#define _SC_XBS5_LP64_OFF64              _SC_V6_LP64_OFF64
+#define _SC_V6_LPBIG_OFFBIG              95
+#define _SC_XBS5_LPBIG_OFFBIG            _SC_V6_LPBIG_OFFBIG
+#define _SC_XOPEN_CRYPT                  96
+#define _SC_XOPEN_ENH_I18N               97
+#define _SC_XOPEN_LEGACY                 98
+#define _SC_XOPEN_REALTIME               99
+#define _SC_STREAM_MAX                  100
+#define _SC_PRIORITY_SCHEDULING         101
+#define _SC_XOPEN_REALTIME_THREADS      102
+#define _SC_XOPEN_SHM                   103
+#define _SC_XOPEN_STREAMS               104
+#define _SC_XOPEN_UNIX                  105
+#define _SC_XOPEN_VERSION               106
+#define _SC_2_CHAR_TERM                 107
+#define _SC_2_C_BIND                    108
+#define _SC_2_C_DEV                     109
+#define _SC_2_FORT_DEV                  110
+#define _SC_2_FORT_RUN                  111
+#define _SC_2_LOCALEDEF                 112
+#define _SC_2_PBS                       113
+#define _SC_2_PBS_ACCOUNTING            114
+#define _SC_2_PBS_CHECKPOINT            115
+#define _SC_2_PBS_LOCATE                116
+#define _SC_2_PBS_MESSAGE               117
+#define _SC_2_PBS_TRACK                 118
+#define _SC_2_SW_DEV                    119
+#define _SC_2_UPE                       120
+#define _SC_2_VERSION                   121
+
+#define _PC_LINK_MAX                      0
+#define _PC_MAX_CANON                     1
+#define _PC_MAX_INPUT                     2
+#define _PC_NAME_MAX                      3
+#define _PC_PATH_MAX                      4
+#define _PC_PIPE_BUF                      5
+#define _PC_CHOWN_RESTRICTED              6
+#define _PC_NO_TRUNC                      7
+#define _PC_VDISABLE                      8
+#define _PC_ASYNC_IO                      9
+#define _PC_PRIO_IO                      10
+#define _PC_SYNC_IO                      11
+#define _PC_FILESIZEBITS                 12
+#define _PC_2_SYMLINKS                   13
+#define _PC_SYMLINK_MAX                  14
 #ifdef __CYGWIN__
 /* Ask for POSIX permission bits support. */
-# define	_PC_POSIX_PERMISSIONS   90
+#define _PC_POSIX_PERMISSIONS            90
 /* Ask for full POSIX permission support including uid/gid settings. */
-# define	_PC_POSIX_SECURITY     91
+#define _PC_POSIX_SECURITY               91
 #endif
 
 /* FIXME: This is temporary until winsup gets sorted out.  */

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat



More information about the Newlib mailing list