Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2007-02-07 20:22:40 +0300
committerCorinna Vinschen <corinna@vinschen.de>2007-02-07 20:22:40 +0300
commit59e3b6ca7dc10603d1e692928a236fe5a0523200 (patch)
tree17949dbe48d690e650c7b3cefa903f711e49477d /winsup
parent0e37a2e6e5f9bd3922f050da2a09b0e9d1dc5afd (diff)
* cygmalloc.h (MALLOC_FAILURE_ACTION): Define empty.
* cygwin.din (posix_madvise): Export. (posix_memalign): Export. * fhandler.cc (fhandler_base::fpathconf): Return useful values in _PC_VDISABLE, _PC_SYNC_IO and _PC_SYMLINK_MAX cases. * malloc_wrapper.cc (malloc): Set errno here since it's not set in dlmalloc.c anymore. (realloc): Ditto. (calloc): Ditto. (memalign): Ditto. (valloc): Ditto. (posix_memalign): New function. * mmap.cc (posix_madvise): New function. * sysconf.cc (get_open_max): New function. (get_page_size): Ditto. (get_nproc_values): Ditto. (get_avphys): Ditto. (sc_type): New type. (sca): New array to map _SC_xxx options to sysconf return values. (sysconf): Reimplement using sca array. * include/limits.h: Add all missing values as defined by SUSv3. * include/pthread.h (PTHREAD_DESTRUCTOR_ITERATIONS): Move definition to sys/limits.h. (PTHREAD_KEYS_MAX): Ditto. * include/semaphore.h (SEM_VALUE_MAX): Ditto. * include/cygwin/stdlib.h (posix_memalign): Declare. * include/cygwin/version.h: Bump API minor number. * include/sys/mman.h: Add posix_madvise flags. (posix_madvise): Declare. * include/sys/termios.h (_POSIX_VDISABLE): Move definition to sys/limits.h.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog34
-rw-r--r--winsup/cygwin/cygmalloc.h3
-rw-r--r--winsup/cygwin/cygwin.din2
-rw-r--r--winsup/cygwin/fhandler.cc10
-rw-r--r--winsup/cygwin/include/cygwin/stdlib.h3
-rw-r--r--winsup/cygwin/include/cygwin/version.h5
-rw-r--r--winsup/cygwin/include/limits.h250
-rw-r--r--winsup/cygwin/include/pthread.h8
-rw-r--r--winsup/cygwin/include/semaphore.h3
-rw-r--r--winsup/cygwin/include/sys/mman.h13
-rw-r--r--winsup/cygwin/include/sys/termios.h7
-rw-r--r--winsup/cygwin/malloc_wrapper.cc32
-rw-r--r--winsup/cygwin/mmap.cc23
-rw-r--r--winsup/cygwin/sysconf.cc351
14 files changed, 564 insertions, 180 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c750a006c..a1d3fc85e 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,37 @@
+2007-02-07 Corinna Vinschen <corinna@vinschen.de>
+
+ * cygmalloc.h (MALLOC_FAILURE_ACTION): Define empty.
+ * cygwin.din (posix_madvise): Export.
+ (posix_memalign): Export.
+ * fhandler.cc (fhandler_base::fpathconf): Return useful values in
+ _PC_VDISABLE, _PC_SYNC_IO and _PC_SYMLINK_MAX cases.
+ * malloc_wrapper.cc (malloc): Set errno here since it's not set in
+ dlmalloc.c anymore.
+ (realloc): Ditto.
+ (calloc): Ditto.
+ (memalign): Ditto.
+ (valloc): Ditto.
+ (posix_memalign): New function.
+ * mmap.cc (posix_madvise): New function.
+ * sysconf.cc (get_open_max): New function.
+ (get_page_size): Ditto.
+ (get_nproc_values): Ditto.
+ (get_avphys): Ditto.
+ (sc_type): New type.
+ (sca): New array to map _SC_xxx options to sysconf return values.
+ (sysconf): Reimplement using sca array.
+ * include/limits.h: Add all missing values as defined by SUSv3.
+ * include/pthread.h (PTHREAD_DESTRUCTOR_ITERATIONS): Move definition
+ to sys/limits.h.
+ (PTHREAD_KEYS_MAX): Ditto.
+ * include/semaphore.h (SEM_VALUE_MAX): Ditto.
+ * include/cygwin/stdlib.h (posix_memalign): Declare.
+ * include/cygwin/version.h: Bump API minor number.
+ * include/sys/mman.h: Add posix_madvise flags.
+ (posix_madvise): Declare.
+ * include/sys/termios.h (_POSIX_VDISABLE): Move definition to
+ sys/limits.h.
+
2007-02-05 Corinna Vinschen <corinna@vinschen.de>
* fhandler_serial.cc (fhandler_serial::tcsetattr): Add support for
diff --git a/winsup/cygwin/cygmalloc.h b/winsup/cygwin/cygmalloc.h
index eeb7ff178..40a80d5b6 100644
--- a/winsup/cygwin/cygmalloc.h
+++ b/winsup/cygwin/cygmalloc.h
@@ -1,6 +1,6 @@
/* cygmalloc.h: cygwin DLL malloc stuff
- Copyright 2002, 2003, 2004, 2005 Red Hat, Inc.
+ Copyright 2002, 2003, 2004, 2005, 2007 Red Hat, Inc.
This file is part of Cygwin.
@@ -25,6 +25,7 @@ void dlmalloc_stats ();
#ifndef __INSIDE_CYGWIN__
# define USE_DL_PREFIX 1
#else
+#define MALLOC_FAILURE_ACTION
# define __malloc_lock() mallock.acquire ()
# define __malloc_unlock() mallock.release ()
extern muto mallock;
diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din
index 37e38dcf5..9fc024eef 100644
--- a/winsup/cygwin/cygwin.din
+++ b/winsup/cygwin/cygwin.din
@@ -988,6 +988,8 @@ popen SIGFE
_popen = popen SIGFE
posix_fadvise SIGFE
posix_fallocate SIGFE
+posix_madvise SIGFE
+posix_memalign SIGFE
posix_openpt SIGFE
posix_regcomp SIGFE
posix_regerror SIGFE
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 7c51a6e3d..bf938e7a9 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -1852,19 +1852,21 @@ fhandler_base::fpathconf (int v)
case _PC_NO_TRUNC:
return 1;
case _PC_VDISABLE:
- if (!is_tty ())
- set_errno (EINVAL);
+ if (is_tty ())
+ return _POSIX_VDISABLE;
+ set_errno (EINVAL);
break;
case _PC_ASYNC_IO:
case _PC_PRIO_IO:
- case _PC_SYNC_IO:
break;
+ case _PC_SYNC_IO:
+ return 1;
case _PC_FILESIZEBITS:
return FILESIZEBITS;
case _PC_2_SYMLINKS:
return 1;
case _PC_SYMLINK_MAX:
- break;
+ return SYMLINK_MAX;
case _PC_POSIX_PERMISSIONS:
case _PC_POSIX_SECURITY:
if (get_device () == FH_FS)
diff --git a/winsup/cygwin/include/cygwin/stdlib.h b/winsup/cygwin/include/cygwin/stdlib.h
index e034fe895..208a64e9e 100644
--- a/winsup/cygwin/include/cygwin/stdlib.h
+++ b/winsup/cygwin/include/cygwin/stdlib.h
@@ -1,6 +1,6 @@
/* stdlib.h
- Copyright 2005, 2006 Red Hat Inc.
+ Copyright 2005, 2006, 2007 Red Hat Inc.
This file is part of Cygwin.
@@ -32,6 +32,7 @@ int unlockpt (int);
#endif /*__STRICT_ANSI__*/
int posix_openpt (int);
+int posix_memalign (void **, size_t, size_t);
#ifdef _COMPILING_NEWLIB
#define unsetenv UNUSED_unsetenv
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
index 44c7229c3..d015fade0 100644
--- a/winsup/cygwin/include/cygwin/version.h
+++ b/winsup/cygwin/include/cygwin/version.h
@@ -1,7 +1,7 @@
/* version.h -- Cygwin version numbers and accompanying documentation.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006 Red Hat, Inc.
+ 2005, 2006, 2007 Red Hat, Inc.
This file is part of Cygwin.
@@ -301,12 +301,13 @@ details. */
161: Export resolver functions.
162: New struct ifreq. Export if_nametoindex, if_indextoname,
if_nameindex, if_freenameindex.
+ 163: Export posix_madvise, posix_memalign.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 162
+#define CYGWIN_VERSION_API_MINOR 163
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible
diff --git a/winsup/cygwin/include/limits.h b/winsup/cygwin/include/limits.h
index 3c4ac2b4b..260e63a53 100644
--- a/winsup/cygwin/include/limits.h
+++ b/winsup/cygwin/include/limits.h
@@ -1,6 +1,6 @@
/* limits.h
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
This file is part of Cygwin.
@@ -127,16 +127,46 @@ details. */
/* Runtime Invariant Values */
+/* Please note that symbolic names shall be ommited, on specific
+ implementations where the corresponding value is equal to or greater
+ than the stated minimum, but is unspecified. This indetermination
+ might depend on the amount of available memory space on a specific
+ instance of a specific implementation. The actual value supported by
+ a specific instance shall be provided by the sysconf() function. */
+
+/* Maximum number of I/O operations in a single list I/O call supported by
+ the implementation. Not yet implemented. */
+#undef AIO_LISTIO_MAX
+/* #define AIO_LISTIO_MAX >= _POSIX_AIO_LISTIO_MAX */
+
+/* Maximum number of outstanding asynchronous I/O operations supported by
+ the implementation. Not yet implemented. */
+#undef AIO_MAX
+/* #define AIO_MAX >= _POSIX_AIO_MAX */
+
+/* The maximum amount by which a process can decrease its asynchronous I/O
+ priority level from its own scheduling priority. */
+#undef AIO_PRIO_DELTA_MAX
+/* #define AIO_PRIO_DELTA_MAX >= 0 */
+
/* Maximum number of bytes in arguments and environment passed in an exec
call. 32000 is the safe value used for Windows processes when called
from Cygwin processes. */
#undef ARG_MAX
#define ARG_MAX 32000
+/* Maximum number of functions that may be registered with atexit(). */
+#undef ATEXIT_MAX
+#define ATEXIT_MAX 32
+
/* Maximum number of simultaneous processes per real user ID. */
#undef CHILD_MAX
#define CHILD_MAX 256
+/* Maximum number of timer expiration overruns. Not yet implemented. */
+#undef DELAYTIMER_MAX
+/* #define DELAYTIMER_MAX >= _POSIX_DELAYTIMER_MAX */
+
/* Maximum length of a host name. */
#undef HOST_NAME_MAX
#define HOST_NAME_MAX 255
@@ -149,6 +179,16 @@ details. */
#undef LOGIN_NAME_MAX
#define LOGIN_NAME_MAX 256 /* equal to UNLEN defined in w32api/lmcons.h */
+/* The maximum number of open message queue descriptors a process may hold.
+ Not yet implemented. */
+#undef MQ_OPEN_MAX
+/* #define MQ_OPEN_MAX >= _POSIX_MQ_OPEN_MAX */
+
+/* The maximum number of message priorities supported by the implementation.
+ Not yet implemented. */
+#undef MQ_PRIO_MAX
+/* #define MQ_PRIO_MAX >= _POSIX_MQ_PRIO_MAX */
+
/* # of open files per process. Actually it can be more since Cygwin
grows the dtable as necessary. We define a reasonable limit here
which is returned by getdtablesize(), sysconf(_SC_OPEN_MAX) and
@@ -162,11 +202,61 @@ details. */
#define PAGESIZE 65536
#define PAGE_SIZE PAGESIZE
+/* Maximum number of attempts made to destroy a thread's thread-specific
+ data values on thread exit. */
+/* FIXME: I really don't understand this value. Why should multiple
+ attempts be necessary to destroy thread-specific data?!? Anyway, the
+ current value here is 1, taken originally from our pthread.h file,
+ where it was mistakenly defined first. Unfortunately this value is
+ lower than the POSIX defined minimum value, which is 4. */
+#undef PTHREAD_DESTRUCTOR_ITERATIONS
+#define PTHREAD_DESTRUCTOR_ITERATIONS 1
+
+/* Maximum number of data keys that can be created by a process. */
+/* Tls has 64 items for pre win2000 - and we don't want to use them all :] */
+#undef PTHREAD_KEYS_MAX
+#define PTHREAD_KEYS_MAX 32
+
+/* Minimum size in bytes of thread stack storage. */
+/* Actually the minimum stack size is somewhat of a split personality.
+ The size parameter in a CreateThread call is the size of the initially
+ commited stack size, which can be specified as low as 4K. However, the
+ default *reserved* stack size is 1 Meg, unless the .def file specifies
+ another STACKSIZE value. And even if you specify a stack size below 64K,
+ the allocation granularity is in the way. You can never squeeze multiple
+ threads in the same allocation granularity slot. Oh well. */
+#undef PTHREAD_STACK_MIN
+#define PTHREAD_STACK_MIN 65536
+
+/* Maximum number of threads that can be created per process. */
+/* Windows allows any arbitrary number of threads per process. */
+#undef PTHREAD_THREADS_MAX
+/* #define PTHREAD_THREADS_MAX unspecified */
+
/* Maximum number of realtime signals reserved for application use. */
/* FIXME: We only support one realtime signal but _POSIX_RTSIG_MAX is 8. */
#undef RTSIG_MAX
#define RTSIG_MAX 1
+/* Maximum number of semaphores that a process may have. */
+/* Windows allows any arbitrary number of semaphores per process. */
+#undef SEM_NSEMS_MAX
+/* #define SEM_NSEMS_MAX unspecified */
+
+/* The maximum value a semaphore may have. */
+#undef SEM_VALUE_MAX
+#define SEM_VALUE_MAX 1147483648
+
+/* Maximum number of queued signals that a process may send and have pending
+ at the receiver(s) at any time. */
+#undef SIGQUEUE_MAX
+#define SIGQUEUE_MAX 32
+
+/* The maximum number of replenishment operations that may be simultaneously
+ pending for a particular sporadic server scheduler. Not implemented. */
+#undef SS_REPL_MAX
+/* #define SS_REPL_MAX >= _POSIX_SS_REPL_MAX */
+
/* Number of streams that one process can have open at one time. */
#undef STREAM_MAX
#define STREAM_MAX 20
@@ -179,10 +269,34 @@ details. */
#undef TIMER_MAX
#define TIMER_MAX 32
+/* Maximum length of the trace event name. Not implemented. */
+#undef TRACE_EVENT_NAME_MAX
+/* #define TRACE_EVENT_NAME_MAX >= _POSIX_TRACE_EVENT_NAME_MAX */
+
+/* Maximum length of the trace generation version string or of the trace
+ stream name. Not implemented. */
+#undef TRACE_NAME_MAX
+/* #define TRACE_NAME_MAX >= _POSIX_TRACE_NAME_MAX */
+
+/* Maximum number of trace streams that may simultaneously exist in the
+ system. Not implemented. */
+#undef TRACE_SYS_MAX
+/* #define TRACE_SYS_MAX >= _POSIX_TRACE_SYS_MAX */
+
+/* Maximum number of user trace event type identifiers that may simultaneously
+ exist in a traced process, including the predefined user trace event
+ POSIX_TRACE_UNNAMED_USER_EVENT. Not implemented. */
+#undef TRACE_USER_EVENT_MAX
+/* #define TRACE_USER_EVENT_MAX >= _POSIX_TRACE_USER_EVENT_MAX */
+
/* Maximum number of characters in a tty name. */
#undef TTY_NAME_MAX
#define TTY_NAME_MAX 12
+/* Maximum number of bytes supported for the name of a timezone (not of the TZ variable). Not implemented. */
+#undef TZNAME_MAX
+/* #define TZNAME_MAX >= _POSIX_TZNAME_MAX */
+
/* Pathname Variable Values */
@@ -215,6 +329,33 @@ details. */
#undef PIPE_BUF
#define PIPE_BUF 4096
+/* Minimum number of bytes of storage actually allocated for any portion
+ of a file. Not implemented. */
+#undef POSIX_ALLOC_SIZE_MIN
+/* #define POSIX_ALLOC_SIZE_MIN unspecifed */
+
+/* Recommended increment for file transfer sizes between the
+ {POSIX_REC_MIN_XFER_SIZE} and {POSIX_REC_MAX_XFER_SIZE} values.
+ Not implemented. */
+#undef POSIX_REC_INCR_XFER_SIZE
+/* #define POSIX_REC_INCR_XFER_SIZE unspecifed */
+
+/* Maximum recommended file transfer size. Not implemented. */
+#undef POSIX_REC_MAX_XFER_SIZE
+/* #define POSIX_REC_MAX_XFER_SIZE unspecifed */
+
+/* Minimum recommended file transfer size. Not implemented. */
+#undef POSIX_REC_MIN_XFER_SIZE
+/* #define POSIX_REC_MIN_XFER_SIZE unspecifed */
+
+/* Recommended file transfer buffer alignment. Not implemented. */
+#undef POSIX_REC_XFER_ALIGN
+/* #define POSIX_REC_XFER_ALIGN unspecifed */
+
+/* Maximum number of bytes in a symbolic link. */
+#undef SYMLINK_MAX
+#define SYMLINK_MAX PATH_MAX
+
/* Runtime Increasable Values */
@@ -234,16 +375,18 @@ details. */
#undef BC_STRING_MAX
#define BC_STRING_MAX 1000
+/* Maximum number of bytes in a character class name. Not implemented. */
+#undef CHARCLASS_NAME_MAX
+/* #define CHARCLASS_NAME_MAX >= _POSIX2_CHARCLASS_NAME_MAX */
+
/* Maximum number of weights that can be assigned to an entry of the
LC_COLLATE order keyword in the locale definition file. */
/* FIXME: We don't support this at all right now, so this value is
misleading at best. It's also lower than _POSIX2_COLL_WEIGHTS_MAX
which is not good. So, for now we deliberately not define it even
though it was defined in the former syslimits.h file. */
-#if 0
#undef COLL_WEIGHTS_MAX
-#define COLL_WEIGHTS_MAX 0
-#endif
+/* #define COLL_WEIGHTS_MAX >= _POSIX2_COLL_WEIGHTS_MAX */
/* Maximum number of expressions that can be nested within parentheses
by the expr utility. */
@@ -265,51 +408,80 @@ details. */
#define RE_DUP_MAX 255
-/* Minimum Values */
-
/* POSIX values */
/* These should never vary from one system type to another */
/* They represent the minimum values that POSIX systems must support.
POSIX-conforming apps must not require larger values. */
-#define _POSIX_ARG_MAX 4096
-#define _POSIX_CHILD_MAX 6
-#define _POSIX_HOST_NAME_MAX 255
-#define _POSIX_LINK_MAX 8
-#define _POSIX_LOGIN_NAME_MAX 9
-#define _POSIX_MAX_CANON 255
-#define _POSIX_MAX_INPUT 255
-#define _POSIX_NAME_MAX 14
-#define _POSIX_NGROUPS_MAX 0
-#define _POSIX_OPEN_MAX 16
-#define _POSIX_PATH_MAX 255
-#define _POSIX_PIPE_BUF 512
-#define _POSIX_RE_DUP_MAX 255
-#define _POSIX_RTSIG_MAX 8
-#define _POSIX_SSIZE_MAX 32767
-#define _POSIX_STREAM_MAX 8
-#define _POSIX_SYMLINK_MAX 255
-#define _POSIX_SYMLOOP_MAX 8
-#define _POSIX_TIMER_MAX 32
-#define _POSIX_TTY_NAME_MAX 9
-#define _POSIX_TZNAME_MAX 3
-
-#define _POSIX2_BC_BASE_MAX 99
-#define _POSIX2_BC_DIM_MAX 2048
-#define _POSIX2_BC_SCALE_MAX 99
-#define _POSIX2_BC_STRING_MAX 1000
-#if 0 /* See comment about COLL_WEIGHTS_MAX above. */
-#define _POSIX2_COLL_WEIGHTS_MAX 2
-#endif
-#define _POSIX2_EXPR_NEST_MAX 32
-#define _POSIX2_LINE_MAX 2048
-#define _POSIX2_RE_DUP_MAX 255
+/* Maximum Values */
+
+#define _POSIX_CLOCKRES_MIN 20000000
+
+/* Minimum Values */
+
+#define _POSIX_AIO_LISTIO_MAX 2
+#define _POSIX_AIO_MAX 1
+#define _POSIX_ARG_MAX 4096
+#define _POSIX_CHILD_MAX 25
+#define _POSIX_DELAYTIMER_MAX 32
+#define _POSIX_HOST_NAME_MAX 255
+#define _POSIX_LINK_MAX 8
+#define _POSIX_LOGIN_NAME_MAX 9
+#define _POSIX_MAX_CANON 255
+#define _POSIX_MAX_INPUT 255
+#define _POSIX_MQ_OPEN_MAX 8
+#define _POSIX_MQ_PRIO_MAX 32
+#define _POSIX_NAME_MAX 14
+#define _POSIX_NGROUPS_MAX 8
+#define _POSIX_OPEN_MAX 20
+#define _POSIX_PATH_MAX 256
+#define _POSIX_PIPE_BUF 512
+#define _POSIX_RE_DUP_MAX 255
+#define _POSIX_RTSIG_MAX 8
+#define _POSIX_SEM_NSEMS_MAX 256
+#define _POSIX_SEM_VALUE_MAX 32767
+#define _POSIX_SIGQUEUE_MAX 32
+#define _POSIX_SSIZE_MAX 32767
+#define _POSIX_STREAM_MAX 8
+#define _POSIX_SS_REPL_MAX 4
+#define _POSIX_SYMLINK_MAX 255
+#define _POSIX_SYMLOOP_MAX 8
+#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
+#define _POSIX_THREAD_KEYS_MAX 128
+#define _POSIX_THREAD_THREADS_MAX 64
+#define _POSIX_TIMER_MAX 32
+#define _POSIX_TRACE_EVENT_NAME_MAX 30
+#define _POSIX_TRACE_NAME_MAX 8
+#define _POSIX_TRACE_SYS_MAX 8
+#define _POSIX_TRACE_USER_EVENT_MAX 32
+#define _POSIX_TTY_NAME_MAX 9
+#define _POSIX_TZNAME_MAX 6
+
+#define _POSIX2_BC_BASE_MAX 99
+#define _POSIX2_BC_DIM_MAX 2048
+#define _POSIX2_BC_SCALE_MAX 99
+#define _POSIX2_BC_STRING_MAX 1000
+#define _POSIX2_COLL_WEIGHTS_MAX 2
+#define _POSIX2_EXPR_NEST_MAX 32
+#define _POSIX2_LINE_MAX 2048
+#define _POSIX2_RE_DUP_MAX 255
+
+#define _XOPEN_IOV_MAX 16
+#define _XOPEN_NAME_MAX 255
+#define _XOPEN_PATH_MAX 1024
/* Other Invariant Values */
+#define NL_ARGMAX 9
+#define NL_LANGMAX 14
+#define NL_MSGMAX 32767
+#define NL_NMAX INT_MAX
+#define NL_SETMAX 255
+#define NL_TEXTMAX _POSIX2_LINE_MAX
+
/* Default process priority. */
#undef NZERO
-#define NZERO 20
+#define NZERO 20
#endif /* _MACH_MACHLIMITS_H_ */
#endif /* _LIMITS_H___ */
diff --git a/winsup/cygwin/include/pthread.h b/winsup/cygwin/include/pthread.h
index 8a475a60e..73759ddc0 100644
--- a/winsup/cygwin/include/pthread.h
+++ b/winsup/cygwin/include/pthread.h
@@ -1,6 +1,7 @@
/* pthread.h: POSIX pthread interface
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006 Red Hat, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006,
+ 2007 Red Hat, Inc.
Written by Marco Fuykschot <marco@ddi.nl>
@@ -30,11 +31,6 @@ extern "C"
would normally be written to the passed parameter of pthread_cond_init(lvalue, NULL); */
/* #define PTHREAD_COND_INITIALIZER 0 */
-#define PTHREAD_DESTRUCTOR_ITERATIONS 1
-/* Tls has 64 items for pre win2000 - and we don't want to use them all :]
- * Before committing discuss this with the list
- */
-#define PTHREAD_KEYS_MAX 32
/* the default : joinable */
#define PTHREAD_CANCEL_ASYNCHRONOUS 1
diff --git a/winsup/cygwin/include/semaphore.h b/winsup/cygwin/include/semaphore.h
index 96f7c6f88..0f13c85e8 100644
--- a/winsup/cygwin/include/semaphore.h
+++ b/winsup/cygwin/include/semaphore.h
@@ -1,6 +1,6 @@
/* semaphore.h: POSIX semaphore interface
- Copyright 2001, 2003 Red Hat, Inc.
+ Copyright 2001, 2003, 2007 Red Hat, Inc.
Written by Robert Collins <rbtcollins@hotmail.com>
@@ -25,7 +25,6 @@ extern "C"
#endif
#define SEM_FAILED 0
-#define SEM_VALUE_MAX 1147483648
/* Semaphores */
int sem_init (sem_t * sem, int pshared, unsigned int value);
diff --git a/winsup/cygwin/include/sys/mman.h b/winsup/cygwin/include/sys/mman.h
index f501b7b75..a3c8077b0 100644
--- a/winsup/cygwin/include/sys/mman.h
+++ b/winsup/cygwin/include/sys/mman.h
@@ -1,6 +1,6 @@
/* sys/mman.h
- Copyright 1996, 1997, 1998, 2000, 2001 Red Hat, Inc.
+ Copyright 1996, 1997, 1998, 2000, 2001, 2003, 2005, 2007 Red Hat, Inc.
This file is part of Cygwin.
@@ -47,6 +47,15 @@ extern "C" {
#define MS_SYNC 2
#define MS_INVALIDATE 4
+/*
+ * Flags for posix_madvise.
+ */
+#define POSIX_MADV_NORMAL 0
+#define POSIX_MADV_SEQUENTIAL 1
+#define POSIX_MADV_RANDOM 2
+#define POSIX_MADV_WILLNEED 3
+#define POSIX_MADV_DONTNEED 4
+
#ifndef __INSIDE_CYGWIN__
extern void *mmap (void *__addr, size_t __len, int __prot, int __flags, int __fd, off_t __off);
#endif
@@ -56,6 +65,8 @@ extern int msync (void *__addr, size_t __len, int __flags);
extern int mlock (const void *__addr, size_t __len);
extern int munlock (const void *__addr, size_t __len);
+extern int posix_madvise (void *__addr, size_t __len, int __advice);
+
#ifdef __cplusplus
};
#endif /* __cplusplus */
diff --git a/winsup/cygwin/include/sys/termios.h b/winsup/cygwin/include/sys/termios.h
index e2fd1321a..057146966 100644
--- a/winsup/cygwin/include/sys/termios.h
+++ b/winsup/cygwin/include/sys/termios.h
@@ -1,6 +1,7 @@
/* sys/termios.h
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006 Red Hat, Inc.
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006,
+ 2007 Red Hat, Inc.
This file is part of Cygwin.
@@ -233,10 +234,6 @@ POSIX commands */
#define NCCS 18
-/* `c_cc' member of 'struct termios' structure can be disabled by
- using the value _POSIX_VDISABLE. */
-#define _POSIX_VDISABLE '\0'
-
/* Compare a character C to a value VAL from the `c_cc' array in a
`struct termios'. If VAL is _POSIX_VDISABLE, no character can match it. */
#define CCEQ(val, c) ((c) == (val) && (val) != _POSIX_VDISABLE)
diff --git a/winsup/cygwin/malloc_wrapper.cc b/winsup/cygwin/malloc_wrapper.cc
index 90689ffee..086c43d36 100644
--- a/winsup/cygwin/malloc_wrapper.cc
+++ b/winsup/cygwin/malloc_wrapper.cc
@@ -1,7 +1,7 @@
/* malloc_wrapper.cc
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
- Red Hat, Inc.
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Red Hat, Inc.
Originally written by Steve Chamberlain of Cygnus Support
sac@cygnus.com
@@ -70,6 +70,8 @@ malloc (size_t size)
__malloc_unlock ();
}
malloc_printf ("(%d) = %x, called by %p", size, res, __builtin_return_address (0));
+ if (!res)
+ set_errno (ENOMEM);
return res;
}
@@ -86,6 +88,8 @@ realloc (void *p, size_t size)
__malloc_unlock ();
}
malloc_printf ("(%x, %d) = %x, called by %x", p, size, res, __builtin_return_address (0));
+ if (!res)
+ set_errno (ENOMEM);
return res;
}
@@ -102,9 +106,29 @@ calloc (size_t nmemb, size_t size)
__malloc_unlock ();
}
malloc_printf ("(%d, %d) = %x, called by %x", nmemb, size, res, __builtin_return_address (0));
+ if (!res)
+ set_errno (ENOMEM);
return res;
}
+extern "C" int
+posix_memalign (void **memptr, size_t alignment, size_t bytes)
+{
+ void *res;
+ if (!use_internal_malloc)
+ return ENOSYS;
+ if ((alignment & (alignment - 1)) != 0)
+ return EINVAL;
+ __malloc_lock ();
+ res = dlmemalign (alignment, bytes);
+ __malloc_unlock ();
+ if (!res)
+ return ENOMEM;
+ if (memptr)
+ *memptr = res;
+ return 0;
+}
+
extern "C" void *
memalign (size_t alignment, size_t bytes)
{
@@ -119,6 +143,8 @@ memalign (size_t alignment, size_t bytes)
__malloc_lock ();
res = dlmemalign (alignment, bytes);
__malloc_unlock ();
+ if (!res)
+ set_errno (ENOMEM);
}
return res;
@@ -138,6 +164,8 @@ valloc (size_t bytes)
__malloc_lock ();
res = dlvalloc (bytes);
__malloc_unlock ();
+ if (!res)
+ set_errno (ENOMEM);
}
return res;
diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc
index 3c1552f81..309620a90 100644
--- a/winsup/cygwin/mmap.cc
+++ b/winsup/cygwin/mmap.cc
@@ -1650,6 +1650,29 @@ munlock (const void *addr, size_t len)
return ret;
}
+extern "C" int
+posix_madvise (void *addr, size_t len, int advice)
+{
+ /* Check parameters. */
+ if (advice < POSIX_MADV_NORMAL || advice > POSIX_MADV_DONTNEED
+ || !len)
+ return EINVAL;
+
+ /* Check requested memory area. */
+ MEMORY_BASIC_INFORMATION m;
+ char *p = (char *) addr;
+ char *endp = p + len;
+ while (p < endp)
+ {
+ if (!VirtualQuery (p, &m, sizeof m) || m.State == MEM_FREE)
+ return ENOMEM;
+ p = (char *) m.BaseAddress + m.RegionSize;
+ }
+
+ /* Eventually do nothing. */
+ return 0;
+}
+
/*
* Base implementation:
*
diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc
index 343fb49e4..04f03f78e 100644
--- a/winsup/cygwin/sysconf.cc
+++ b/winsup/cygwin/sysconf.cc
@@ -1,7 +1,7 @@
/* sysconf.cc
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006 Red Hat, Inc.
+ 2006, 2007 Red Hat, Inc.
This file is part of Cygwin.
@@ -22,131 +22,248 @@ details. */
#include "cygheap.h"
#include "ntdll.h"
+static long
+get_open_max (int in)
+{
+ long max = getdtablesize ();
+ if (max < OPEN_MAX)
+ max = OPEN_MAX;
+ return max;
+}
+
+static long
+get_page_size (int in)
+{
+ return getpagesize ();
+}
+
+static long
+get_nproc_values (int in)
+{
+ switch (in)
+ {
+ case _SC_NPROCESSORS_CONF:
+ case _SC_NPROCESSORS_ONLN:
+ if (!wincap.supports_smp ())
+ return 1;
+ /*FALLTHRU*/
+ case _SC_PHYS_PAGES:
+ if (wincap.supports_smp ())
+ {
+ NTSTATUS ret;
+ SYSTEM_BASIC_INFORMATION sbi;
+ if ((ret = NtQuerySystemInformation (SystemBasicInformation,
+ (PVOID) &sbi,
+ sizeof sbi, NULL))
+ != STATUS_SUCCESS)
+ {
+ __seterrno_from_nt_status (ret);
+ debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %E",
+ ret);
+ return -1;
+ }
+ switch (in)
+ {
+ case _SC_NPROCESSORS_CONF:
+ return sbi.NumberProcessors;
+ case _SC_NPROCESSORS_ONLN:
+ {
+ int i = 0;
+ do
+ if (sbi.ActiveProcessors & 1)
+ i++;
+ while (sbi.ActiveProcessors >>= 1);
+ return i;
+ }
+ case _SC_PHYS_PAGES:
+ return sbi.NumberOfPhysicalPages
+ / (getpagesize () / getsystempagesize ());
+ }
+ }
+ }
+ return -1;
+}
+
+static long
+get_avphys (int in)
+{
+ if (wincap.supports_smp ())
+ {
+ NTSTATUS ret;
+ SYSTEM_PERFORMANCE_INFORMATION spi;
+ if ((ret = NtQuerySystemInformation (SystemPerformanceInformation,
+ (PVOID) &spi,
+ sizeof spi, NULL))
+ != STATUS_SUCCESS)
+ {
+ __seterrno_from_nt_status (ret);
+ debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %E",
+ ret);
+ return -1;
+ }
+ return spi.AvailablePages / (getpagesize () / getsystempagesize ());
+ }
+ return -1;
+}
+
+enum sc_type { nsup, cons, func };
+
+static struct
+{
+ sc_type type;
+ union
+ {
+ long c;
+ long (*f)(int);
+ };
+} sca[] =
+{
+ {cons, {c:ARG_MAX}}, /* 0, _SC_ARG_MAX */
+ {cons, {c:CHILD_MAX}}, /* 1, _SC_CHILD_MAX */
+ {cons, {c:CLOCKS_PER_SEC}}, /* 2, _SC_CLK_TCK */
+ {cons, {c:NGROUPS_MAX}}, /* 3, _SC_NGROUPS_MAX */
+ {func, {f:get_open_max}}, /* 4, _SC_OPEN_MAX */
+ {cons, {c:_POSIX_JOB_CONTROL}}, /* 5, _SC_JOB_CONTROL */
+ {cons, {c:_POSIX_SAVED_IDS}}, /* 6, _SC_SAVED_IDS */
+ {cons, {c:_POSIX_VERSION}}, /* 7, _SC_VERSION */
+ {func, {f:get_page_size}}, /* 8, _SC_PAGESIZE */
+ {func, {f:get_nproc_values}}, /* 9, _SC_NPROCESSORS_CONF */
+ {func, {f:get_nproc_values}}, /* 10, _SC_NPROCESSORS_ONLN */
+ {func, {f:get_nproc_values}}, /* 11, _SC_PHYS_PAGES */
+ {func, {f:get_avphys}}, /* 12, _SC_AVPHYS_PAGES */
+ {nsup, {c:0}}, /* 13, _SC_MQ_OPEN_MAX */
+ {nsup, {c:0}}, /* 14, _SC_MQ_PRIO_MAX */
+ {cons, {c:RTSIG_MAX}}, /* 15, _SC_RTSIG_MAX */
+ {cons, {c:-1L}}, /* 16, _SC_SEM_NSEMS_MAX */
+ {cons, {c:SEM_VALUE_MAX}}, /* 17, _SC_SEM_VALUE_MAX */
+ {cons, {c:SIGQUEUE_MAX}}, /* 18, _SC_SIGQUEUE_MAX */
+ {cons, {c:TIMER_MAX}}, /* 19, _SC_TIMER_MAX */
+ {nsup, {c:0}}, /* 20, _SC_TZNAME_MAX */
+ {cons, {c:-1L}}, /* 21, _SC_ASYNCHRONOUS_IO */
+ {cons, {c:_POSIX_FSYNC}}, /* 22, _SC_FSYNC */
+ {cons, {c:_POSIX_MAPPED_FILES}}, /* 23, _SC_MAPPED_FILES */
+ {cons, {c:-1L}}, /* 24, _SC_MEMLOCK */
+ {cons, {c:_POSIX_MEMLOCK_RANGE}}, /* 25, _SC_MEMLOCK_RANGE */
+ {cons, {c:_POSIX_MEMORY_PROTECTION}}, /* 26, _SC_MEMORY_PROTECTION */
+ {cons, {c:-1L}}, /* 27, _SC_MESSAGE_PASSING */
+ {cons, {c:-1L}}, /* 28, _SC_PRIORITIZED_IO */
+ {cons, {c:_POSIX_REALTIME_SIGNALS}}, /* 29, _SC_REALTIME_SIGNALS */
+ {cons, {c:_POSIX_SEMAPHORES}}, /* 30, _SC_SEMAPHORES */
+ {cons, {c:-1L}}, /* 31, _SC_SHARED_MEMORY_OBJECTS */
+ {cons, {c:_POSIX_SYNCHRONIZED_IO}}, /* 32, _SC_SYNCHRONIZED_IO */
+ {cons, {c:_POSIX_TIMERS}}, /* 33, _SC_TIMERS */
+ {nsup, {c:0}}, /* 34, _SC_AIO_LISTIO_MAX */
+ {nsup, {c:0}}, /* 35, _SC_AIO_MAX */
+ {nsup, {c:0}}, /* 36, _SC_AIO_PRIO_DELTA_MAX */
+ {nsup, {c:0}}, /* 37, _SC_DELAYTIMER_MAX */
+ {cons, {c:PTHREAD_KEYS_MAX}}, /* 38, _SC_THREAD_KEYS_MAX */
+ {cons, {c:PTHREAD_STACK_MIN}}, /* 39, _SC_THREAD_STACK_MIN */
+ {cons, {c:-1L}}, /* 40, _SC_THREAD_THREADS_MAX */
+ {cons, {c:TTY_NAME_MAX}}, /* 41, _SC_TTY_NAME_MAX */
+ {cons, {c:_POSIX_THREADS}}, /* 42, _SC_THREADS */
+ {cons, {c:-1L}}, /* 43, _SC_THREAD_ATTR_STACKADDR */
+ {cons, {c:_POSIX_THREAD_ATTR_STACKSIZE}}, /* 44, _SC_THREAD_ATTR_STACKSIZE */
+ {cons, {c:_POSIX_THREAD_PRIORITY_SCHEDULING}}, /* 45, _SC_THREAD_PRIORITY_SCHEDULING */
+ {cons, {c:-1L}}, /* 46, _SC_THREAD_PRIO_INHERIT */
+ {cons, {c:-1L}}, /* 47, _SC_THREAD_PRIO_PROTECT */
+ {cons, {c:_POSIX_THREAD_PROCESS_SHARED}}, /* 48, _SC_THREAD_PROCESS_SHARED */
+ {cons, {c:_POSIX_THREAD_SAFE_FUNCTIONS}}, /* 49, _SC_THREAD_SAFE_FUNCTIONS */
+ {cons, {c:16384L}}, /* 50, _SC_GETGR_R_SIZE_MAX */
+ {cons, {c:16384L}}, /* 51, _SC_GETPW_R_SIZE_MAX */
+ {cons, {c:LOGIN_NAME_MAX}}, /* 52, _SC_LOGIN_NAME_MAX */
+ {cons, {c:PTHREAD_DESTRUCTOR_ITERATIONS}}, /* 53, _SC_THREAD_DESTRUCTOR_ITERATIONS */
+ {cons, {c:_POSIX_ADVISORY_INFO}}, /* 54, _SC_ADVISORY_INFO */
+ {cons, {c:ATEXIT_MAX}}, /* 55, _SC_ATEXIT_MAX */
+ {cons, {c:-1L}}, /* 56, _SC_BARRIERS */
+ {cons, {c:BC_BASE_MAX}}, /* 57, _SC_BC_BASE_MAX */
+ {cons, {c:BC_DIM_MAX}}, /* 58, _SC_BC_DIM_MAX */
+ {cons, {c:BC_SCALE_MAX}}, /* 59, _SC_BC_SCALE_MAX */
+ {cons, {c:BC_STRING_MAX}}, /* 60, _SC_BC_STRING_MAX */
+ {cons, {c:-1L}}, /* 61, _SC_CLOCK_SELECTION */
+ {nsup, {c:0}}, /* 62, _SC_COLL_WEIGHTS_MAX */
+ {cons, {c:-1L}}, /* 63, _SC_CPUTIME */
+ {cons, {c:EXPR_NEST_MAX}}, /* 64, _SC_EXPR_NEST_MAX */
+ {cons, {c:HOST_NAME_MAX}}, /* 65, _SC_HOST_NAME_MAX */
+ {cons, {c:IOV_MAX}}, /* 66, _SC_IOV_MAX */
+ {cons, {c:_POSIX_IPV6}}, /* 67, _SC_IPV6 */
+ {cons, {c:LINE_MAX}}, /* 68, _SC_LINE_MAX */
+ {cons, {c:-1L}}, /* 69, _SC_MONOTONIC_CLOCK */
+ {cons, {c:_POSIX_RAW_SOCKETS}}, /* 70, _SC_RAW_SOCKETS */
+ {cons, {c:_POSIX_READER_WRITER_LOCKS}}, /* 71, _SC_READER_WRITER_LOCKS */
+ {cons, {c:_POSIX_REGEXP}}, /* 72, _SC_REGEXP */
+ {cons, {c:RE_DUP_MAX}}, /* 73, _SC_RE_DUP_MAX */
+ {cons, {c:_POSIX_SHELL}}, /* 74, _SC_SHELL */
+ {cons, {c:-1L}}, /* 75, _SC_SPAWN */
+ {cons, {c:-1L}}, /* 76, _SC_SPIN_LOCKS */
+ {cons, {c:-1L}}, /* 77, _SC_SPORADIC_SERVER */
+ {nsup, {c:0}}, /* 78, _SC_SS_REPL_MAX */
+ {cons, {c:SYMLOOP_MAX}}, /* 79, _SC_SYMLOOP_MAX */
+ {cons, {c:-1L}}, /* 80, _SC_THREAD_CPUTIME */
+ {cons, {c:-1L}}, /* 81, _SC_THREAD_SPORADIC_SERVER */
+ {cons, {c:-1L}}, /* 82, _SC_TIMEOUTS */
+ {cons, {c:-1L}}, /* 83, _SC_TRACE */
+ {cons, {c:-1L}}, /* 84, _SC_TRACE_EVENT_FILTER */
+ {nsup, {c:0}}, /* 85, _SC_TRACE_EVENT_NAME_MAX */
+ {cons, {c:-1L}}, /* 86, _SC_TRACE_INHERIT */
+ {cons, {c:-1L}}, /* 87, _SC_TRACE_LOG */
+ {nsup, {c:0}}, /* 88, _SC_TRACE_NAME_MAX */
+ {nsup, {c:0}}, /* 89, _SC_TRACE_SYS_MAX */
+ {nsup, {c:0}}, /* 90, _SC_TRACE_USER_EVENT_MAX */
+ {cons, {c:-1L}}, /* 91, _SC_TYPED_MEMORY_OBJECTS */
+ {cons, {c:-1L}}, /* 92, _SC_V6_ILP32_OFF32 */
+ {cons, {c:_POSIX_V6_ILP32_OFFBIG}}, /* 93, _SC_V6_ILP32_OFFBIG */
+ {cons, {c:-1L}}, /* 94, _SC_V6_LP64_OFF64 */
+ {cons, {c:-1L}}, /* 95, _SC_V6_LPBIG_OFFBIG */
+ {cons, {c:_XOPEN_CRYPT}}, /* 96, _SC_XOPEN_CRYPT */
+ {cons, {c:_XOPEN_ENH_I18N}}, /* 97, _SC_XOPEN_ENH_I18N */
+ {cons, {c:-1L}}, /* 98, _SC_XOPEN_LEGACY */
+ {cons, {c:-1L}}, /* 99, _SC_XOPEN_REALTIME */
+ {cons, {c:STREAM_MAX}}, /* 100, _SC_STREAM_MAX */
+ {cons, {c:_POSIX_PRIORITY_SCHEDULING}}, /* 101, _SC_PRIORITY_SCHEDULING */
+ {cons, {c:-1L}}, /* 102, _SC_XOPEN_REALTIME_THREADS */
+ {cons, {c:_XOPEN_SHM}}, /* 103, _SC_XOPEN_SHM */
+ {cons, {c:-1L}}, /* 104, _SC_XOPEN_STREAMS */
+ {cons, {c:-1L}}, /* 105, _SC_XOPEN_UNIX */
+ {cons, {c:_XOPEN_VERSION}}, /* 106, _SC_XOPEN_VERSION */
+ {cons, {c:_POSIX2_CHAR_TERM}}, /* 107, _SC_2_CHAR_TERM */
+ {cons, {c:_POSIX2_C_BIND}}, /* 108, _SC_2_C_BIND */
+ {cons, {c:_POSIX2_C_BIND}}, /* 109, _SC_2_C_DEV */
+ {cons, {c:-1L}}, /* 110, _SC_2_FORT_DEV */
+ {cons, {c:-1L}}, /* 111, _SC_2_FORT_RUN */
+ {cons, {c:-1L}}, /* 112, _SC_2_LOCALEDEF */
+ {cons, {c:-1L}}, /* 113, _SC_2_PBS */
+ {cons, {c:-1L}}, /* 114, _SC_2_PBS_ACCOUNTING */
+ {cons, {c:-1L}}, /* 115, _SC_2_PBS_CHECKPOINT */
+ {cons, {c:-1L}}, /* 116, _SC_2_PBS_LOCATE */
+ {cons, {c:-1L}}, /* 117, _SC_2_PBS_MESSAGE */
+ {cons, {c:-1L}}, /* 118, _SC_2_PBS_TRACK */
+ {cons, {c:_POSIX2_SW_DEV}}, /* 119, _SC_2_SW_DEV */
+ {cons, {c:_POSIX2_UPE}}, /* 120, _SC_2_UPE */
+ {cons, {c:_POSIX2_VERSION}}, /* 121, _SC_2_VERSION */
+};
+
+#define SC_MIN _SC_ARG_MAX
+#define SC_MAX _SC_2_VERSION
+
/* sysconf: POSIX 4.8.1.1 */
/* Allows a portable app to determine quantities of resources or
presence of an option at execution time. */
long int
sysconf (int in)
{
- switch (in)
+ if (in >= SC_MIN && in <= SC_MAX)
{
- /* Keep order as in sys/unistd.h */
- case _SC_ARG_MAX:
- /* FIXME: what's the right value? _POSIX_ARG_MAX is only 4K.
- FIXME: Wouldn't it be more correct to return ARG_MAX here? */
- return 1048576;
- case _SC_CHILD_MAX:
- return CHILD_MAX;
- case _SC_CLK_TCK:
- return CLOCKS_PER_SEC;
- case _SC_NGROUPS_MAX:
- return NGROUPS_MAX;
- case _SC_OPEN_MAX:
+ switch (sca[in].type)
{
- long max = getdtablesize ();
- if (max < OPEN_MAX)
- max = OPEN_MAX;
- return max;
+ case nsup:
+ break;
+ case cons:
+ return sca[in].c;
+ case func:
+ return sca[in].f (in);
}
- case _SC_JOB_CONTROL:
- return _POSIX_JOB_CONTROL;
- case _SC_SAVED_IDS:
- return _POSIX_SAVED_IDS;
- case _SC_VERSION:
- return _POSIX_VERSION;
- case _SC_PAGESIZE:
- return getpagesize ();
- case _SC_NPROCESSORS_CONF:
- case _SC_NPROCESSORS_ONLN:
- if (!wincap.supports_smp ())
- return 1;
- /*FALLTHRU*/
- case _SC_PHYS_PAGES:
- if (wincap.supports_smp ())
- {
- NTSTATUS ret;
- SYSTEM_BASIC_INFORMATION sbi;
- if ((ret = NtQuerySystemInformation (SystemBasicInformation,
- (PVOID) &sbi,
- sizeof sbi, NULL))
- != STATUS_SUCCESS)
- {
- __seterrno_from_nt_status (ret);
- debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %E",
- ret);
- return -1;
- }
- switch (in)
- {
- case _SC_NPROCESSORS_CONF:
- return sbi.NumberProcessors;
- case _SC_NPROCESSORS_ONLN:
- {
- int i = 0;
- do
- if (sbi.ActiveProcessors & 1)
- i++;
- while (sbi.ActiveProcessors >>= 1);
- return i;
- }
- case _SC_PHYS_PAGES:
- return sbi.NumberOfPhysicalPages;
- }
- }
- break;
- case _SC_AVPHYS_PAGES:
- if (wincap.supports_smp ())
- {
- NTSTATUS ret;
- SYSTEM_PERFORMANCE_INFORMATION spi;
- if ((ret = NtQuerySystemInformation (SystemPerformanceInformation,
- (PVOID) &spi,
- sizeof spi, NULL))
- != STATUS_SUCCESS)
- {
- __seterrno_from_nt_status (ret);
- debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %E",
- ret);
- return -1;
- }
- return spi.AvailablePages;
- }
- case _SC_RTSIG_MAX:
- return RTSIG_MAX;
- case _SC_TIMER_MAX:
- return TIMER_MAX;
-#if 0 /* FIXME -- unimplemented */
- case _SC_TZNAME_MAX:
- return _POSIX_TZNAME_MAX;
-#endif
- case _SC_MEMLOCK_RANGE:
- return _POSIX_MEMLOCK_RANGE;
- case _SC_SEMAPHORES:
- return _POSIX_SEMAPHORES;
- case _SC_TIMERS:
- return _POSIX_TIMERS;
- case _SC_TTY_NAME_MAX:
- return TTY_NAME_MAX;
- case _SC_THREADS:
- return _POSIX_THREADS;
- case _SC_THREAD_ATTR_STACKSIZE:
- return _POSIX_THREAD_ATTR_STACKSIZE;
- case _SC_THREAD_PRIORITY_SCHEDULING:
- return _POSIX_THREAD_PRIORITY_SCHEDULING;
- case _SC_THREAD_PROCESS_SHARED:
- return _POSIX_THREAD_PROCESS_SHARED;
- case _SC_THREAD_SAFE_FUNCTIONS:
- return _POSIX_THREAD_SAFE_FUNCTIONS;
- case _SC_GETPW_R_SIZE_MAX:
- case _SC_GETGR_R_SIZE_MAX:
- return 16*1024;
- case _SC_LOGIN_NAME_MAX:
- return LOGIN_NAME_MAX;
- case _SC_STREAM_MAX:
- return STREAM_MAX;
}
-
- /* Invalid input or unimplemented sysconf name */
+ /* Unimplemented sysconf name or invalid option value. */
set_errno (EINVAL);
- return -1;
+ return -1L;
}