12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001 |
- /* Copyright (C) 1991,1993,1995-1997,2000
- Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
- #define _XOPEN_SOURCE 500
- #include <features.h>
- #include <ctype.h>
- #include <errno.h>
- #include <limits.h>
- #include <grp.h>
- #include <pwd.h>
- #include <stddef.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <unistd.h>
- #include <sys/syscall.h>
- #include <sys/sysinfo.h>
- #include <sys/types.h>
- #include <sys/param.h>
- #ifdef __UCLIBC_HAS_REGEX__
- #include <regex.h>
- #endif
- #ifdef __UCLIBC_HAS_THREADS_NATIVE__
- #include <sysdep.h>
- #endif
- #include <sys/resource.h>
- #include <string.h>
- #include <dirent.h>
- #include "internal/parse_config.h"
- static int nprocessors_onln(void)
- {
- char **l = NULL;
- parser_t *p = config_open("/proc/stat");
- int ret = 0;
- if (p) {
- while (config_read(p, &l, 2, 1, " ", 0))
- if (l[0][0] == 'c'
- && l[0][1] == 'p'
- && l[0][2] == 'u'
- && isdigit(l[0][3]))
- ++ret;
- } else if ((p = config_open("/proc/cpuinfo"))) {
- #if defined __sparc__
- while (config_read(p, &l, 2, 2, "\0:", PARSE_NORMAL))
- if (strncmp("ncpus active", l[0], 12) == 0) {
- ret = atoi(l[1]);
- break;
- }
- #else
- while (config_read(p, &l, 2, 2, "\0:\t", PARSE_NORMAL))
- if (strcmp("processor", l[0]) == 0)
- ++ret;
- #endif
- }
- config_close(p);
- return ret != 0 ? ret : 1;
- }
- #if defined __UCLIBC__ && !defined __UCLIBC_HAS_LFS__
- # define readdir64 readdir
- # define dirent64 dirent
- #endif
- static int nprocessors_conf(void)
- {
- int ret = 0;
- DIR *dir = opendir("/sys/devices/system/cpu");
- if (dir) {
- struct dirent64 *dp;
- while ((dp = readdir64(dir))) {
- if (dp->d_type == DT_DIR
- && dp->d_name[0] == 'c'
- && dp->d_name[1] == 'p'
- && dp->d_name[2] == 'u'
- && isdigit(dp->d_name[3]))
- ++ret;
- }
- closedir(dir);
- } else
- {
- #if defined __sparc__
- char **l = NULL;
- parser_t *p = config_open("/proc/stat");
- while (config_read(p, &l, 2, 2, "\0:", PARSE_NORMAL))
- if (strncmp("ncpus probed", l[0], 13) == 0) {
- ret = atoi(l[1]);
- break;
- }
- config_close(p);
- #else
- ret = nprocessors_onln();
- #endif
- }
- return ret != 0 ? ret : 1;
- }
- #ifndef __UCLIBC_CLK_TCK_CONST
- #error __UCLIBC_CLK_TCK_CONST not defined!
- #endif
- /***********************************************************************/
- /*
- * Manuel Novoa III Jan 2001
- *
- * On i386, the switch-based implementation generates 796 bytes of code.
- * However, many of the return values are repeats. By collecting these
- * repeats and moving to a table-based implementation, we generate 283
- * bytes on i386 (-Os -fomit-frame-pointer).
- */
- #ifdef _UCLIBC_GENERATE_SYSCONF_ARCH
- /*
- * Set some errno's so the auto-gen code knows what it is dealing with.
- * 1) ENOSYS signifies that we're returning a default value.
- * This is just extra info for development.
- * 2) EISNAM signifies that the value returned varies at runtime.
- *
- * Option: GETPAGESIZE_IS_DYNAMIC
- * The current implementation of getpagesize in uClibc returns
- * a constant. The pagesize on the target arch should not vary,
- * so it should be safe to set this as 0.
- */
- #define RETURN_NEG_1 __set_errno(ENOSYS); return -1
- #define RETURN_FUNCTION(f) __set_errno(EISNAM); return (long int) #f
- #define GETPAGESIZE_IS_DYNAMIC 0
- #else
- #define RETURN_NEG_1 return -1
- #define RETURN_FUNCTION(f) return f;
- #endif /* _UCLIBC_GENERATE_SYSCONF_ARCH */
- /* Legacy value of ARG_MAX. The macro is now not defined since the
- actual value varies based on the stack size. */
- #define legacy_ARG_MAX 131072
- /* Get the value of the system variable NAME. */
- long int sysconf(int name)
- {
- struct rlimit rlimit;
- switch (name)
- {
- default:
- __set_errno(EINVAL);
- return -1;
- case _SC_ARG_MAX:
- /* Use getrlimit to get the stack limit. */
- if (getrlimit (RLIMIT_STACK, &rlimit) == 0)
- return MAX (legacy_ARG_MAX, rlimit.rlim_cur / 4);
- #if defined ARG_MAX
- return ARG_MAX;
- #else
- return legacy_ARG_MAX;
- #endif
- case _SC_CHILD_MAX:
- #ifdef CHILD_MAX
- return CHILD_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_CLK_TCK:
- /* Can't use CLK_TCK here since that calls __sysconf(_SC_CLK_TCK) */
- return __UCLIBC_CLK_TCK_CONST;
- case _SC_NGROUPS_MAX:
- #ifdef NGROUPS_MAX
- return NGROUPS_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_OPEN_MAX:
- RETURN_FUNCTION(getdtablesize());
- case _SC_STREAM_MAX:
- #ifdef STREAM_MAX
- return STREAM_MAX;
- #else
- return FOPEN_MAX;
- #endif
- case _SC_TZNAME_MAX:
- return _POSIX_TZNAME_MAX;
- case _SC_JOB_CONTROL:
- #ifdef _POSIX_JOB_CONTROL
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SAVED_IDS:
- #ifdef _POSIX_SAVED_IDS
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_REALTIME_SIGNALS:
- #ifdef _POSIX_REALTIME_SIGNALS
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PRIORITY_SCHEDULING:
- #ifdef _POSIX_PRIORITY_SCHEDULING
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_TIMERS:
- #ifdef _POSIX_TIMERS
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_ASYNCHRONOUS_IO:
- #ifdef _POSIX_ASYNCHRONOUS_IO
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PRIORITIZED_IO:
- #ifdef _POSIX_PRIORITIZED_IO
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SYNCHRONIZED_IO:
- #ifdef _POSIX_SYNCHRONIZED_IO
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_FSYNC:
- #ifdef _POSIX_FSYNC
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MAPPED_FILES:
- #ifdef _POSIX_MAPPED_FILES
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MEMLOCK:
- #ifdef _POSIX_MEMLOCK
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MEMLOCK_RANGE:
- #ifdef _POSIX_MEMLOCK_RANGE
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MEMORY_PROTECTION:
- #ifdef _POSIX_MEMORY_PROTECTION
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MESSAGE_PASSING:
- #ifdef _POSIX_MESSAGE_PASSING
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SEMAPHORES:
- #ifdef _POSIX_SEMAPHORES
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SHARED_MEMORY_OBJECTS:
- #ifdef _POSIX_SHARED_MEMORY_OBJECTS
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_VERSION:
- return _POSIX_VERSION;
- case _SC_PAGESIZE:
- #if defined(GETPAGESIZE_IS_DYNAMIC) && (GETPAGESIZE_IS_DYNAMIC == 1)
- RETURN_FUNCTION(getpagesize());
- #else
- return getpagesize(); /* note: currently this is not dynamic */
- #endif
- case _SC_AIO_LISTIO_MAX:
- #ifdef AIO_LISTIO_MAX
- return AIO_LISTIO_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_AIO_MAX:
- #ifdef AIO_MAX
- return AIO_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_AIO_PRIO_DELTA_MAX:
- #ifdef AIO_PRIO_DELTA_MAX
- return AIO_PRIO_DELTA_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_DELAYTIMER_MAX:
- #ifdef DELAYTIMER_MAX
- return DELAYTIMER_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MQ_OPEN_MAX:
- #ifdef MQ_OPEN_MAX
- return MQ_OPEN_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MQ_PRIO_MAX:
- #ifdef MQ_PRIO_MAX
- return MQ_PRIO_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_RTSIG_MAX:
- #ifdef RTSIG_MAX
- return RTSIG_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SEM_NSEMS_MAX:
- #ifdef SEM_NSEMS_MAX
- return SEM_NSEMS_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SEM_VALUE_MAX:
- #ifdef SEM_VALUE_MAX
- return SEM_VALUE_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SIGQUEUE_MAX:
- #ifdef SIGQUEUE_MAX
- return SIGQUEUE_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_TIMER_MAX:
- #ifdef TIMER_MAX
- return TIMER_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_BC_BASE_MAX:
- #ifdef BC_BASE_MAX
- return BC_BASE_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_BC_DIM_MAX:
- #ifdef BC_DIM_MAX
- return BC_DIM_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_BC_SCALE_MAX:
- #ifdef BC_SCALE_MAX
- return BC_SCALE_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_BC_STRING_MAX:
- #ifdef BC_STRING_MAX
- return BC_STRING_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_COLL_WEIGHTS_MAX:
- #ifdef COLL_WEIGHTS_MAX
- return COLL_WEIGHTS_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_EQUIV_CLASS_MAX:
- #ifdef EQUIV_CLASS_MAX
- return EQUIV_CLASS_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_EXPR_NEST_MAX:
- #ifdef EXPR_NEST_MAX
- return EXPR_NEST_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_LINE_MAX:
- #ifdef LINE_MAX
- return LINE_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_RE_DUP_MAX:
- #ifdef RE_DUP_MAX
- return RE_DUP_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_CHARCLASS_NAME_MAX:
- #ifdef CHARCLASS_NAME_MAX
- return CHARCLASS_NAME_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII:
- #ifdef _POSIX_PII
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_XTI:
- #ifdef _POSIX_PII_XTI
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_SOCKET:
- #ifdef _POSIX_PII_SOCKET
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_INTERNET:
- #ifdef _POSIX_PII_INTERNET
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_OSI:
- #ifdef _POSIX_PII_OSI
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_POLL:
- #ifdef _POSIX_POLL
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_SELECT:
- #ifdef _POSIX_SELECT
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_UIO_MAXIOV:
- #ifdef UIO_MAXIOV
- return UIO_MAXIOV;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_INTERNET_STREAM:
- #ifdef _POSIX_PII_INTERNET_STREAM
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_INTERNET_DGRAM:
- #ifdef _POSIX_PII_INTERNET_DGRAM
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_OSI_COTS:
- #ifdef _POSIX_PII_OSI_COTS
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_OSI_CLTS:
- #ifdef _POSIX_PII_OSI_CLTS
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_PII_OSI_M:
- #ifdef _POSIX_PII_OSI_M
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_T_IOV_MAX:
- #ifdef _T_IOV_MAX
- return _T_IOV_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_VERSION:
- return _POSIX2_VERSION;
- case _SC_2_C_BIND:
- #ifdef _POSIX2_C_BIND
- return _POSIX2_C_BIND;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_C_DEV:
- #ifdef _POSIX2_C_DEV
- return _POSIX2_C_DEV;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_C_VERSION:
- #ifdef _POSIX2_C_VERSION
- return _POSIX2_C_VERSION;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_FORT_DEV:
- #ifdef _POSIX2_FORT_DEV
- return _POSIX2_FORT_DEV;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_FORT_RUN:
- #ifdef _POSIX2_FORT_RUN
- return _POSIX2_FORT_RUN;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_LOCALEDEF:
- #ifdef _POSIX2_LOCALEDEF
- return _POSIX2_LOCALEDEF;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_SW_DEV:
- #ifdef _POSIX2_SW_DEV
- return _POSIX2_SW_DEV;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_CHAR_TERM:
- #ifdef _POSIX2_CHAR_TERM
- return _POSIX2_CHAR_TERM;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_2_UPE:
- #ifdef _POSIX2_UPE
- return _POSIX2_UPE;
- #else
- RETURN_NEG_1;
- #endif
- /* POSIX 1003.1c (POSIX Threads). */
- case _SC_THREADS:
- #ifdef __UCLIBC_HAS_THREADS__
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_SAFE_FUNCTIONS:
- #ifdef __UCLIBC_HAS_THREADS__
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- /* If you change these, also change libc/pwd_grp/pwd_grp.c to match */
- case _SC_GETGR_R_SIZE_MAX:
- return __UCLIBC_GRP_BUFFER_SIZE__;
- case _SC_GETPW_R_SIZE_MAX:
- return __UCLIBC_PWD_BUFFER_SIZE__;
- /* getlogin() is a worthless interface. In uClibc we let the user specify
- * whatever they want via the LOGNAME environment variable, or we return NULL
- * if getenv() fails to find anything. So this is merely how large a env
- * variable can be. Lets use 256 */
- case _SC_LOGIN_NAME_MAX:
- return 256;
- /* If you change this, also change _SC_TTY_NAME_MAX in libc/unistd/sysconf.c */
- #define TTYNAME_BUFLEN 32
- case _SC_TTY_NAME_MAX:
- return TTYNAME_BUFLEN;
- case _SC_THREAD_DESTRUCTOR_ITERATIONS:
- #ifdef _POSIX_THREAD_DESTRUCTOR_ITERATIONS
- return _POSIX_THREAD_DESTRUCTOR_ITERATIONS;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_KEYS_MAX:
- #ifdef PTHREAD_KEYS_MAX
- return PTHREAD_KEYS_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_STACK_MIN:
- #ifdef PTHREAD_STACK_MIN
- return PTHREAD_STACK_MIN;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_THREADS_MAX:
- #ifdef PTHREAD_THREADS_MAX
- return PTHREAD_THREADS_MAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_ATTR_STACKADDR:
- #ifdef _POSIX_THREAD_ATTR_STACKADDR
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_ATTR_STACKSIZE:
- #ifdef _POSIX_THREAD_ATTR_STACKSIZE
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_PRIORITY_SCHEDULING:
- #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_PRIO_INHERIT:
- #ifdef _POSIX_THREAD_PRIO_INHERIT
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_PRIO_PROTECT:
- #ifdef _POSIX_THREAD_PRIO_PROTECT
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_THREAD_PROCESS_SHARED:
- #ifdef _POSIX_THREAD_PROCESS_SHARED
- return 1;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_NPROCESSORS_CONF:
- RETURN_FUNCTION(nprocessors_conf());
- case _SC_NPROCESSORS_ONLN:
- RETURN_FUNCTION(nprocessors_onln());
- case _SC_PHYS_PAGES:
- #if 0
- RETURN_FUNCTION(get_phys_pages());
- #else
- RETURN_NEG_1;
- #endif
- case _SC_AVPHYS_PAGES:
- #if 0
- RETURN_FUNCTION(get_avphys_pages());
- #else
- RETURN_NEG_1;
- #endif
- case _SC_ATEXIT_MAX:
- return __UCLIBC_MAX_ATEXIT;
- case _SC_PASS_MAX:
- /* We have no limit but since the return value might be used to
- allocate a buffer we restrict the value. */
- return BUFSIZ;
- case _SC_XOPEN_VERSION:
- return _XOPEN_VERSION;
- case _SC_XOPEN_XCU_VERSION:
- return _XOPEN_XCU_VERSION;
- case _SC_XOPEN_UNIX:
- return _XOPEN_UNIX;
- case _SC_XOPEN_CRYPT:
- #ifdef _XOPEN_CRYPT
- return _XOPEN_CRYPT;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XOPEN_ENH_I18N:
- #ifdef _XOPEN_ENH_I18N
- return _XOPEN_ENH_I18N;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XOPEN_SHM:
- #ifdef _XOPEN_SHM
- return _XOPEN_SHM;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XOPEN_XPG2:
- #ifdef _XOPEN_XPG2
- return _XOPEN_XPG2;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XOPEN_XPG3:
- #ifdef _XOPEN_XPG3
- return _XOPEN_XPG3;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XOPEN_XPG4:
- #ifdef _XOPEN_XPG4
- return _XOPEN_XPG4;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_CHAR_BIT:
- return CHAR_BIT;
- case _SC_CHAR_MAX:
- return CHAR_MAX;
- case _SC_CHAR_MIN:
- return CHAR_MIN;
- case _SC_INT_MAX:
- return INT_MAX;
- case _SC_INT_MIN:
- return INT_MIN;
- case _SC_LONG_BIT:
- return sizeof (long int) * CHAR_BIT;
- case _SC_WORD_BIT:
- return sizeof (int) * CHAR_BIT;
- case _SC_MB_LEN_MAX:
- return MB_LEN_MAX;
- case _SC_NZERO:
- return NZERO;
- case _SC_SSIZE_MAX:
- return _POSIX_SSIZE_MAX;
- case _SC_SCHAR_MAX:
- return SCHAR_MAX;
- case _SC_SCHAR_MIN:
- return SCHAR_MIN;
- case _SC_SHRT_MAX:
- return SHRT_MAX;
- case _SC_SHRT_MIN:
- return SHRT_MIN;
- case _SC_UCHAR_MAX:
- return UCHAR_MAX;
- case _SC_UINT_MAX:
- return UINT_MAX;
- case _SC_ULONG_MAX:
- return ULONG_MAX;
- case _SC_USHRT_MAX:
- return USHRT_MAX;
- case _SC_NL_ARGMAX:
- #ifdef NL_ARGMAX
- return NL_ARGMAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_NL_LANGMAX:
- #ifdef NL_LANGMAX
- return NL_LANGMAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_NL_MSGMAX:
- #ifdef NL_MSGMAX
- return NL_MSGMAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_NL_NMAX:
- #ifdef NL_NMAX
- return NL_NMAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_NL_SETMAX:
- #ifdef NL_SETMAX
- return NL_SETMAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_NL_TEXTMAX:
- #ifdef NL_TEXTMAX
- return NL_TEXTMAX;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XBS5_ILP32_OFF32:
- #ifdef _XBS5_ILP32_OFF32
- return _XBS5_ILP32_OFF32;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XBS5_ILP32_OFFBIG:
- #ifdef _XBS5_ILP32_OFFBIG
- return _XBS5_ILP32_OFFBIG;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XBS5_LP64_OFF64:
- #ifdef _XBS5_LP64_OFF64
- return _XBS5_LP64_OFF64;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XBS5_LPBIG_OFFBIG:
- #ifdef _XBS5_LPBIG_OFFBIG
- return _XBS5_LPBIG_OFFBIG;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_V7_ILP32_OFF32:
- #ifdef _POSIX_V7_ILP32_OFF32
- return _POSIX_V7_ILP32_OFF32;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_V7_ILP32_OFFBIG:
- #ifdef _POSIX_V7_ILP32_OFFBIG
- return _POSIX_V7_ILP32_OFFBIG;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_V7_LP64_OFF64:
- #ifdef _POSIX_V7_LP64_OFF64
- return _POSIX_V7_LP64_OFF64;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_V7_LPBIG_OFFBIG:
- #ifdef _POSIX_V7_LPBIG_OFFBIG
- return _POSIX_V7_LPBIG_OFFBIG;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XOPEN_LEGACY:
- return _XOPEN_LEGACY;
- case _SC_XOPEN_REALTIME:
- #ifdef _XOPEN_REALTIME
- return _XOPEN_REALTIME;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_XOPEN_REALTIME_THREADS:
- #ifdef _XOPEN_REALTIME_THREADS
- return _XOPEN_REALTIME_THREADS;
- #else
- RETURN_NEG_1;
- #endif
- case _SC_MONOTONIC_CLOCK:
- #if defined __UCLIBC_HAS_REALTIME__ && defined __NR_clock_getres
- if (clock_getres(CLOCK_MONOTONIC, NULL) >= 0)
- return _POSIX_VERSION;
- #endif
- RETURN_NEG_1;
- #ifdef __UCLIBC_HAS_THREADS_NATIVE__
- case _SC_THREAD_CPUTIME:
- # if _POSIX_THREAD_CPUTIME > 0
- return _POSIX_THREAD_CPUTIME;
- # else
- RETURN_NEG_1;
- # endif
- #endif
- }
- }
- libc_hidden_def(sysconf)
|