1 /* Copyright (C) 1991, 93, 95, 96, 97, 2000 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
19 #define _XOPEN_SOURCE 500
30 #include <sys/sysinfo.h>
31 #include <sys/types.h>
32 #ifdef __UCLIBC_HAS_REGEX__
36 libc_hidden_proto(getpagesize)
37 libc_hidden_proto(getdtablesize)
39 #ifndef __UCLIBC_CLK_TCK_CONST
40 #error __UCLIBC_CLK_TCK_CONST not defined!
43 /***********************************************************************/
45 * Manuel Novoa III Jan 2001
47 * On i386, the switch-based implementation generates 796 bytes of code.
48 * However, many of the return values are repeats. By collecting these
49 * repeats and moving to a table-based implementation, we generate 283
50 * bytes on i386 (-Os -fomit-frame-pointer).
53 #ifdef _UCLIBC_GENERATE_SYSCONF_ARCH
55 * Set some errno's so the auto-gen code knows what it is dealing with.
56 * 1) ENOSYS signifies that we're returning a default value.
57 * This is just extra info for development.
58 * 2) EISNAM signifies that the value returned varies at runtime.
60 * Option: GETPAGESIZE_IS_DYNAMIC
61 * The current implementation of getpagesize in uClibc returns
62 * a constant. The pagesize on the target arch should not vary,
63 * so it should be safe to set this as 0.
65 #define RETURN_NEG_1 __set_errno(ENOSYS); return -1
66 #define RETURN_FUNCTION(f) __set_errno(EISNAM); return (long int) #f
67 #define GETPAGESIZE_IS_DYNAMIC 0
69 #define RETURN_NEG_1 return -1
70 #define RETURN_FUNCTION(f) return f;
71 #endif /* _UCLIBC_GENERATE_SYSCONF_ARCH */
73 /* Get the value of the system variable NAME. */
74 long int sysconf(int name)
97 /* Can't use CLK_TCK here since that calls __sysconf(_SC_CLK_TCK) */
98 return __UCLIBC_CLK_TCK_CONST;
100 case _SC_NGROUPS_MAX:
108 RETURN_FUNCTION(getdtablesize());
118 return _POSIX_TZNAME_MAX;
120 case _SC_JOB_CONTROL:
121 #ifdef _POSIX_JOB_CONTROL
128 #ifdef _POSIX_SAVED_IDS
134 case _SC_REALTIME_SIGNALS:
135 #ifdef _POSIX_REALTIME_SIGNALS
141 case _SC_PRIORITY_SCHEDULING:
142 #ifdef _POSIX_PRIORITY_SCHEDULING
155 case _SC_ASYNCHRONOUS_IO:
156 #ifdef _POSIX_ASYNCHRONOUS_IO
162 case _SC_PRIORITIZED_IO:
163 #ifdef _POSIX_PRIORITIZED_IO
169 case _SC_SYNCHRONIZED_IO:
170 #ifdef _POSIX_SYNCHRONIZED_IO
183 case _SC_MAPPED_FILES:
184 #ifdef _POSIX_MAPPED_FILES
191 #ifdef _POSIX_MEMLOCK
197 case _SC_MEMLOCK_RANGE:
198 #ifdef _POSIX_MEMLOCK_RANGE
204 case _SC_MEMORY_PROTECTION:
205 #ifdef _POSIX_MEMORY_PROTECTION
211 case _SC_MESSAGE_PASSING:
212 #ifdef _POSIX_MESSAGE_PASSING
219 #ifdef _POSIX_SEMAPHORES
225 case _SC_SHARED_MEMORY_OBJECTS:
226 #ifdef _POSIX_SHARED_MEMORY_OBJECTS
233 return _POSIX_VERSION;
236 #if defined(GETPAGESIZE_IS_DYNAMIC) && (GETPAGESIZE_IS_DYNAMIC == 1)
237 RETURN_FUNCTION(getpagesize());
239 return getpagesize(); /* note: currently this is not dynamic */
242 case _SC_AIO_LISTIO_MAX:
243 #ifdef AIO_LISTIO_MAX
244 return AIO_LISTIO_MAX;
256 case _SC_AIO_PRIO_DELTA_MAX:
257 #ifdef AIO_PRIO_DELTA_MAX
258 return AIO_PRIO_DELTA_MAX;
263 case _SC_DELAYTIMER_MAX:
264 #ifdef DELAYTIMER_MAX
265 return DELAYTIMER_MAX;
270 case _SC_MQ_OPEN_MAX:
277 case _SC_MQ_PRIO_MAX:
291 case _SC_SEM_NSEMS_MAX:
293 return SEM_NSEMS_MAX;
298 case _SC_SEM_VALUE_MAX:
300 return SEM_VALUE_MAX;
305 case _SC_SIGQUEUE_MAX:
319 case _SC_BC_BASE_MAX:
333 case _SC_BC_SCALE_MAX:
340 case _SC_BC_STRING_MAX:
342 return BC_STRING_MAX;
347 case _SC_COLL_WEIGHTS_MAX:
348 #ifdef COLL_WEIGHTS_MAX
349 return COLL_WEIGHTS_MAX;
354 case _SC_EQUIV_CLASS_MAX:
355 #ifdef EQUIV_CLASS_MAX
356 return EQUIV_CLASS_MAX;
361 case _SC_EXPR_NEST_MAX:
363 return EXPR_NEST_MAX;
382 case _SC_CHARCLASS_NAME_MAX:
383 #ifdef CHARCLASS_NAME_MAX
384 return CHARCLASS_NAME_MAX;
397 #ifdef _POSIX_PII_XTI
404 #ifdef _POSIX_PII_SOCKET
410 case _SC_PII_INTERNET:
411 #ifdef _POSIX_PII_INTERNET
418 #ifdef _POSIX_PII_OSI
445 case _SC_PII_INTERNET_STREAM:
446 #ifdef _POSIX_PII_INTERNET_STREAM
452 case _SC_PII_INTERNET_DGRAM:
453 #ifdef _POSIX_PII_INTERNET_DGRAM
459 case _SC_PII_OSI_COTS:
460 #ifdef _POSIX_PII_OSI_COTS
466 case _SC_PII_OSI_CLTS:
467 #ifdef _POSIX_PII_OSI_CLTS
474 #ifdef _POSIX_PII_OSI_M
488 return _POSIX2_VERSION;
491 #ifdef _POSIX2_C_BIND
492 return _POSIX2_C_BIND;
499 return _POSIX2_C_DEV;
504 case _SC_2_C_VERSION:
505 #ifdef _POSIX2_C_VERSION
506 return _POSIX2_C_VERSION;
512 #ifdef _POSIX2_FORT_DEV
513 return _POSIX2_FORT_DEV;
519 #ifdef _POSIX2_FORT_RUN
520 return _POSIX2_FORT_RUN;
525 case _SC_2_LOCALEDEF:
526 #ifdef _POSIX2_LOCALEDEF
527 return _POSIX2_LOCALEDEF;
533 #ifdef _POSIX2_SW_DEV
534 return _POSIX2_SW_DEV;
539 case _SC_2_CHAR_TERM:
540 #ifdef _POSIX2_CHAR_TERM
541 return _POSIX2_CHAR_TERM;
553 /* POSIX 1003.1c (POSIX Threads). */
555 #ifdef __UCLIBC_HAS_THREADS__
561 case _SC_THREAD_SAFE_FUNCTIONS:
562 #ifdef __UCLIBC_HAS_THREADS__
568 /* If you change these, also change libc/pwd_grp/pwd_grp.c to match */
569 #define PWD_BUFFER_SIZE 256
570 #define GRP_BUFFER_SIZE 256
571 case _SC_GETGR_R_SIZE_MAX:
572 return GRP_BUFFER_SIZE;
574 case _SC_GETPW_R_SIZE_MAX:
575 return PWD_BUFFER_SIZE;
577 /* getlogin() is a worthless interface. In uClibc we let the user specify
578 * whatever they want via the LOGNAME environment variable, or we return NULL
579 * if getenv() fails to find anything. So this is merely how large a env
580 * variable can be. Lets use 256 */
581 case _SC_LOGIN_NAME_MAX:
584 /* If you change this, also change _SC_TTY_NAME_MAX in libc/unistd/sysconf.c */
585 #define TTYNAME_BUFLEN 32
586 case _SC_TTY_NAME_MAX:
587 return TTYNAME_BUFLEN;
589 case _SC_THREAD_DESTRUCTOR_ITERATIONS:
590 #ifdef _POSIX_THREAD_DESTRUCTOR_ITERATIONS
591 return _POSIX_THREAD_DESTRUCTOR_ITERATIONS;
596 case _SC_THREAD_KEYS_MAX:
597 #ifdef PTHREAD_KEYS_MAX
598 return PTHREAD_KEYS_MAX;
603 case _SC_THREAD_STACK_MIN:
604 #ifdef PTHREAD_STACK_MIN
605 return PTHREAD_STACK_MIN;
610 case _SC_THREAD_THREADS_MAX:
611 #ifdef PTHREAD_THREADS_MAX
612 return PTHREAD_THREADS_MAX;
617 case _SC_THREAD_ATTR_STACKADDR:
618 #ifdef _POSIX_THREAD_ATTR_STACKADDR
624 case _SC_THREAD_ATTR_STACKSIZE:
625 #ifdef _POSIX_THREAD_ATTR_STACKSIZE
631 case _SC_THREAD_PRIORITY_SCHEDULING:
632 #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
638 case _SC_THREAD_PRIO_INHERIT:
639 #ifdef _POSIX_THREAD_PRIO_INHERIT
645 case _SC_THREAD_PRIO_PROTECT:
646 #ifdef _POSIX_THREAD_PRIO_PROTECT
652 case _SC_THREAD_PROCESS_SHARED:
653 #ifdef _POSIX_THREAD_PROCESS_SHARED
659 case _SC_NPROCESSORS_CONF:
661 RETURN_FUNCTION(get_nprocs_conf());
663 /* this is a hack. for now always claim we have exactly one cpu */
667 case _SC_NPROCESSORS_ONLN:
669 RETURN_FUNCTION(get_nprocs());
671 /* this is a hack. for now always claim we have exactly one cpu */
677 RETURN_FUNCTION(get_phys_pages());
682 case _SC_AVPHYS_PAGES:
684 RETURN_FUNCTION(get_avphys_pages());
690 return __UCLIBC_MAX_ATEXIT;
693 /* We have no limit but since the return value might be used to
694 allocate a buffer we restrict the value. */
697 case _SC_XOPEN_VERSION:
698 return _XOPEN_VERSION;
700 case _SC_XOPEN_XCU_VERSION:
701 return _XOPEN_XCU_VERSION;
706 case _SC_XOPEN_CRYPT:
713 case _SC_XOPEN_ENH_I18N:
714 #ifdef _XOPEN_ENH_I18N
715 return _XOPEN_ENH_I18N;
764 return sizeof (long int) * CHAR_BIT;
767 return sizeof (int) * CHAR_BIT;
776 return _POSIX_SSIZE_MAX;
844 case _SC_XBS5_ILP32_OFF32:
845 #ifdef _XBS5_ILP32_OFF32
846 return _XBS5_ILP32_OFF32;
850 case _SC_XBS5_ILP32_OFFBIG:
851 #ifdef _XBS5_ILP32_OFFBIG
852 return _XBS5_ILP32_OFFBIG;
856 case _SC_XBS5_LP64_OFF64:
857 #ifdef _XBS5_LP64_OFF64
858 return _XBS5_LP64_OFF64;
862 case _SC_XBS5_LPBIG_OFFBIG:
863 #ifdef _XBS5_LPBIG_OFFBIG
864 return _XBS5_LPBIG_OFFBIG;
869 case _SC_XOPEN_LEGACY:
870 return _XOPEN_LEGACY;
872 case _SC_XOPEN_REALTIME:
873 #ifdef _XOPEN_REALTIME
874 return _XOPEN_REALTIME;
878 case _SC_XOPEN_REALTIME_THREADS:
879 #ifdef _XOPEN_REALTIME_THREADS
880 return _XOPEN_REALTIME_THREADS;
886 libc_hidden_proto(sysconf)
887 libc_hidden_def(sysconf)