OSDN Git Service

* cygmalloc.h (MALLOC_FAILURE_ACTION): Define empty.
authorcorinna <corinna>
Wed, 7 Feb 2007 17:22:39 +0000 (17:22 +0000)
committercorinna <corinna>
Wed, 7 Feb 2007 17:22:39 +0000 (17:22 +0000)
* 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.

14 files changed:
winsup/cygwin/ChangeLog
winsup/cygwin/cygmalloc.h
winsup/cygwin/cygwin.din
winsup/cygwin/fhandler.cc
winsup/cygwin/include/cygwin/stdlib.h
winsup/cygwin/include/cygwin/version.h
winsup/cygwin/include/limits.h
winsup/cygwin/include/pthread.h
winsup/cygwin/include/semaphore.h
winsup/cygwin/include/sys/mman.h
winsup/cygwin/include/sys/termios.h
winsup/cygwin/malloc_wrapper.cc
winsup/cygwin/mmap.cc
winsup/cygwin/sysconf.cc

index c750a00..a1d3fc8 100644 (file)
@@ -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
index eeb7ff1..40a80d5 100644 (file)
@@ -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;
index 37e38dc..9fc024e 100644 (file)
@@ -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
index 7c51a6e..bf938e7 100644 (file)
@@ -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)
index e034fe8..208a64e 100644 (file)
@@ -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
index 44c7229..d015fad 100644 (file)
@@ -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
index 3c4ac2b..260e63a 100644 (file)
@@ -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___ */
index 8a475a6..73759dd 100644 (file)
@@ -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
index 96f7c6f..0f13c85 100644 (file)
@@ -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);
index f501b7b..a3c8077 100644 (file)
@@ -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 */
index e2fd132..0571469 100644 (file)
@@ -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)
index 90689ff..086c43d 100644 (file)
@@ -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;
index 3c1552f..309620a 100644 (file)
@@ -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:
  *
index 343fb49..04f03f7 100644 (file)
@@ -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;
 }