diff options
author | Matthew Dempsky <matthew@cvs.openbsd.org> | 2012-05-14 23:21:36 +0000 |
---|---|---|
committer | Matthew Dempsky <matthew@cvs.openbsd.org> | 2012-05-14 23:21:36 +0000 |
commit | f34de4ac3bcfea14b03ed33d297b02f5209d2b3b (patch) | |
tree | 27e63f982ad40f3674a751bac41dfe5a06036e75 /lib/libc | |
parent | fcb7bf2bab0bb5e35869990db556288057799c4d (diff) |
More sysconf(3)-y and pathconf(3)-y goodness from Brad.
ok guenther, millert (and me); bulk build test by naddy
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/gen/sysconf.c | 260 | ||||
-rw-r--r-- | lib/libc/shlib_version | 2 |
2 files changed, 232 insertions, 30 deletions
diff --git a/lib/libc/gen/sysconf.c b/lib/libc/gen/sysconf.c index 838e1c485b2..76db49ae04c 100644 --- a/lib/libc/gen/sysconf.c +++ b/lib/libc/gen/sysconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sysconf.c,v 1.14 2012/03/06 11:38:26 ajacoutot Exp $ */ +/* $OpenBSD: sysconf.c,v 1.15 2012/05/14 23:21:35 matthew Exp $ */ /*- * Copyright (c) 1993 * The Regents of the University of California. All rights reserved. @@ -37,9 +37,11 @@ #include <sys/time.h> #include <sys/resource.h> #include <sys/vmmeter.h> +#include <sys/socket.h> #include <errno.h> #include <grp.h> +#include <pthread.h> #include <pwd.h> #include <unistd.h> @@ -60,7 +62,7 @@ sysconf(int name) { struct rlimit rl; size_t len; - int mib[3], value, namelen; + int mib[3], value, namelen, sverrno; len = sizeof(value); namelen = 2; @@ -159,41 +161,23 @@ sysconf(int name) mib[1] = USER_RE_DUP_MAX; break; case _SC_2_VERSION: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_VERSION; - break; + return (_POSIX2_VERSION); case _SC_2_C_BIND: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_C_BIND; - goto yesno; + return (_POSIX2_C_BIND); case _SC_2_C_DEV: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_C_DEV; - goto yesno; + return (_POSIX2_C_DEV); case _SC_2_CHAR_TERM: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_CHAR_TERM; - goto yesno; + return (_POSIX2_CHAR_TERM); case _SC_2_FORT_DEV: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_FORT_DEV; - goto yesno; + return (_POSIX2_FORT_DEV); case _SC_2_FORT_RUN: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_FORT_RUN; - goto yesno; + return (_POSIX2_FORT_RUN); case _SC_2_LOCALEDEF: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_LOCALEDEF; - goto yesno; + return (_POSIX2_LOCALEDEF); case _SC_2_SW_DEV: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_SW_DEV; - goto yesno; + return (_POSIX2_SW_DEV); case _SC_2_UPE: - mib[0] = CTL_USER; - mib[1] = USER_POSIX2_UPE; - goto yesno; + return (_POSIX2_UPE); /* XPG 4.2 */ case _SC_XOPEN_SHM: @@ -220,6 +204,224 @@ yesno: if (sysctl(mib, namelen, &value, &len, NULL, 0) == -1) return (MAXHOSTNAMELEN - 1); /* does not include \0 */ case _SC_MONOTONIC_CLOCK: return (_POSIX_MONOTONIC_CLOCK); + case _SC_2_PBS: + case _SC_2_PBS_ACCOUNTING: + case _SC_2_PBS_CHECKPOINT: + case _SC_2_PBS_LOCATE: + case _SC_2_PBS_MESSAGE: + case _SC_2_PBS_TRACK: + return (_POSIX2_PBS); + case _SC_ADVISORY_INFO: + return (_POSIX_ADVISORY_INFO); + case _SC_ASYNCHRONOUS_IO: + return (_POSIX_ASYNCHRONOUS_IO); + case _SC_ATEXIT_MAX: + return (-1); + case _SC_BARRIERS: + return (_POSIX_BARRIERS); + case _SC_CLOCK_SELECTION: + return (_POSIX_CLOCK_SELECTION); + case _SC_CPUTIME: + return (_POSIX_CPUTIME); + case _SC_DELAYTIMER_MAX: + return (-1); + case _SC_IOV_MAX: + return (IOV_MAX); + case _SC_IPV6: +#if _POSIX_IPV6 == 0 + sverrno = errno; + value = socket(PF_INET6, SOCK_DGRAM, 0); + errno = sverrno; + if (value >= 0) { + close(value); + return (200112L); + } else + return (0); +#else + return (_POSIX_IPV6); +#endif + case _SC_MAPPED_FILES: + return (_POSIX_MAPPED_FILES); + case _SC_MEMLOCK: + return (_POSIX_MEMLOCK); + case _SC_MEMLOCK_RANGE: + return (_POSIX_MEMLOCK_RANGE); + case _SC_MEMORY_PROTECTION: + return (_POSIX_MEMORY_PROTECTION); + case _SC_MESSAGE_PASSING: + return (_POSIX_MESSAGE_PASSING); + case _SC_PRIORITIZED_IO: + return (_POSIX_PRIORITIZED_IO); + case _SC_PRIORITY_SCHEDULING: + return (_POSIX_PRIORITY_SCHEDULING); + case _SC_RAW_SOCKETS: + return (_POSIX_RAW_SOCKETS); + case _SC_READER_WRITER_LOCKS: + return (_POSIX_READER_WRITER_LOCKS); + case _SC_REALTIME_SIGNALS: + return (_POSIX_REALTIME_SIGNALS); + case _SC_REGEXP: + return (_POSIX_REGEXP); + case _SC_SEMAPHORES: + return (_POSIX_SEMAPHORES); + case _SC_SHARED_MEMORY_OBJECTS: + return (_POSIX_SHARED_MEMORY_OBJECTS); + case _SC_SHELL: + return (_POSIX_SHELL); + case _SC_SIGQUEUE_MAX: + return (-1); + case _SC_SPAWN: + return (_POSIX_SPAWN); + case _SC_SPIN_LOCKS: + return (_POSIX_SPIN_LOCKS); + case _SC_SPORADIC_SERVER: + return (_POSIX_SPORADIC_SERVER); + case _SC_SYNCHRONIZED_IO: + return (_POSIX_SYNCHRONIZED_IO); + case _SC_SYMLOOP_MAX: + return (SYMLOOP_MAX); + case _SC_THREAD_ATTR_STACKADDR: + return (_POSIX_THREAD_ATTR_STACKADDR); + case _SC_THREAD_ATTR_STACKSIZE: + return (_POSIX_THREAD_ATTR_STACKSIZE); + case _SC_THREAD_CPUTIME: + return (_POSIX_THREAD_CPUTIME); + case _SC_THREAD_DESTRUCTOR_ITERATIONS: + return (PTHREAD_DESTRUCTOR_ITERATIONS); + case _SC_THREAD_KEYS_MAX: + return (PTHREAD_KEYS_MAX); + case _SC_THREAD_PRIO_INHERIT: + return (_POSIX_THREAD_PRIO_INHERIT); + case _SC_THREAD_PRIO_PROTECT: + return (_POSIX_THREAD_PRIO_PROTECT); + case _SC_THREAD_PRIORITY_SCHEDULING: + return (_POSIX_THREAD_PRIORITY_SCHEDULING); + case _SC_THREAD_PROCESS_SHARED: + return (_POSIX_THREAD_PROCESS_SHARED); + case _SC_THREAD_ROBUST_PRIO_INHERIT: + return (_POSIX_THREAD_ROBUST_PRIO_INHERIT); + case _SC_THREAD_ROBUST_PRIO_PROTECT: + return (_POSIX_THREAD_ROBUST_PRIO_PROTECT); + case _SC_THREAD_SPORADIC_SERVER: + return (_POSIX_THREAD_SPORADIC_SERVER); + case _SC_THREAD_STACK_MIN: + return (PTHREAD_STACK_MIN); + case _SC_THREAD_THREADS_MAX: + return (PTHREAD_THREADS_MAX); + case _SC_THREADS: + return (_POSIX_THREADS); + case _SC_TIMEOUTS: + return (_POSIX_TIMEOUTS); + case _SC_TIMER_MAX: + return (-1); + case _SC_TIMERS: + return (_POSIX_TIMERS); + case _SC_TRACE: + case _SC_TRACE_EVENT_FILTER: + case _SC_TRACE_EVENT_NAME_MAX: + case _SC_TRACE_INHERIT: + case _SC_TRACE_LOG: + return (_POSIX_TRACE); + case _SC_TTY_NAME_MAX: + return (TTY_NAME_MAX); + case _SC_TYPED_MEMORY_OBJECTS: + return (_POSIX_TYPED_MEMORY_OBJECTS); + case _SC_V6_ILP32_OFF32: + return (_POSIX_V6_ILP32_OFF32); + case _SC_V6_ILP32_OFFBIG: +#if _POSIX_V6_ILP32_OFFBIG == 0 + if (sizeof(int) * CHAR_BIT == 32 && + sizeof(long) * CHAR_BIT == 32 && + sizeof(void *) * CHAR_BIT == 32 && + sizeof(off_t) * CHAR_BIT >= 64) + return 1; + else + return -1; +#else + return (_POSIX_V6_ILP32_OFFBIG); +#endif + case _SC_V6_LP64_OFF64: +#if _POSIX_V6_LP64_OFF64 == 0 + if (sizeof(int) * CHAR_BIT == 32 && + sizeof(long) * CHAR_BIT == 64 && + sizeof(void *) * CHAR_BIT == 64 && + sizeof(off_t) * CHAR_BIT == 64) + return 1; + else + return -1; +#else + return (_POSIX_V6_LP64_OFF64); +#endif + case _SC_V6_LPBIG_OFFBIG: +#if _POSIX_V6_LPBIG_OFFBIG == 0 + if (sizeof(int) * CHAR_BIT >= 32 && + sizeof(long) * CHAR_BIT >= 64 && + sizeof(void *) * CHAR_BIT >= 64 && + sizeof(off_t) * CHAR_BIT >= 64) + return 1; + else + return -1; +#else + return (_POSIX_V6_LPBIG_OFFBIG); +#endif + case _SC_V7_ILP32_OFF32: + return (_POSIX_V7_ILP32_OFF32); + case _SC_V7_ILP32_OFFBIG: +#if _POSIX_V7_ILP32_OFFBIG == 0 + if (sizeof(int) * CHAR_BIT == 32 && + sizeof(long) * CHAR_BIT == 32 && + sizeof(void *) * CHAR_BIT == 32 && + sizeof(off_t) * CHAR_BIT >= 64) + return 1; + else + return -1; +#else + return (_POSIX_V7_ILP32_OFFBIG); +#endif + case _SC_V7_LP64_OFF64: +#if _POSIX_V7_LP64_OFF64 == 0 + if (sizeof(int) * CHAR_BIT == 32 && + sizeof(long) * CHAR_BIT == 64 && + sizeof(void *) * CHAR_BIT == 64 && + sizeof(off_t) * CHAR_BIT == 64) + return 1; + else + return -1; +#else + return (_POSIX_V7_LP64_OFF64); +#endif + case _SC_V7_LPBIG_OFFBIG: +#if _POSIX_V7_LPBIG_OFFBIG == 0 + if (sizeof(int) * CHAR_BIT >= 32 && + sizeof(long) * CHAR_BIT >= 64 && + sizeof(void *) * CHAR_BIT >= 64 && + sizeof(off_t) * CHAR_BIT >= 64) + return 1; + else + return -1; +#else + return (_POSIX_V7_LPBIG_OFFBIG); +#endif + case _SC_XOPEN_CRYPT: + return (_XOPEN_CRYPT); + case _SC_XOPEN_ENH_I18N: + return (_XOPEN_ENH_I18N); + case _SC_XOPEN_LEGACY: + return (_XOPEN_LEGACY); + case _SC_XOPEN_REALTIME: + return (_XOPEN_REALTIME); + case _SC_XOPEN_REALTIME_THREADS: + return (_XOPEN_REALTIME_THREADS); + case _SC_XOPEN_STREAMS: + return (_XOPEN_STREAMS); + case _SC_XOPEN_UNIX: + return (_XOPEN_UNIX); + case _SC_XOPEN_UUCP: + return (_XOPEN_UUCP); +#ifdef _XOPEN_VERSION + case _SC_XOPEN_VERSION: + return (_XOPEN_VERSION); +#endif /* Extensions */ case _SC_PHYS_PAGES: diff --git a/lib/libc/shlib_version b/lib/libc/shlib_version index 2e283db67c1..da350fdb8a2 100644 --- a/lib/libc/shlib_version +++ b/lib/libc/shlib_version @@ -1,4 +1,4 @@ major=64 -minor=0 +minor=1 # note: If changes were made to include/thread_private.h or if system # calls were added/changed then libpthread must also be updated. |