(root)/
glibc-2.38/
posix/
sysconf.c
       1  /* Copyright (C) 1991-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       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     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <errno.h>
      19  #include <grp.h>
      20  #include <pwd.h>
      21  #include <stdio.h>
      22  #include <unistd.h>
      23  #include <time.h>
      24  #include <limits.h>
      25  #include <sys/param.h>
      26  #include <sys/sysinfo.h>
      27  
      28  
      29  /* Get the value of the system variable NAME.  */
      30  long int
      31  __sysconf (int name)
      32  {
      33    switch (name)
      34      {
      35      default:
      36        __set_errno (EINVAL);
      37        return -1;
      38  
      39      case _SC_TZNAME_MAX:
      40        return -1;
      41  
      42      case _SC_CHARCLASS_NAME_MAX:
      43  #ifdef	CHARCLASS_NAME_MAX
      44        return CHARCLASS_NAME_MAX;
      45  #else
      46        return -1;
      47  #endif
      48  
      49      case _SC_COLL_WEIGHTS_MAX:
      50  #ifdef	COLL_WEIGHTS_MAX
      51        return COLL_WEIGHTS_MAX;
      52  #else
      53        return -1;
      54  #endif
      55  
      56      case _SC_EQUIV_CLASS_MAX:
      57  #ifdef	EQUIV_CLASS_MAX
      58        return EQUIV_CLASS_MAX;
      59  #else
      60        return -1;
      61  #endif
      62  
      63      case _SC_2_LOCALEDEF:
      64  #ifdef	_POSIX2_LOCALEDEF
      65        return _POSIX2_LOCALEDEF;
      66  #else
      67        return -1;
      68  #endif
      69  
      70      case _SC_NPROCESSORS_CONF:
      71        return __get_nprocs_conf ();
      72  
      73      case _SC_NPROCESSORS_ONLN:
      74        return __get_nprocs ();
      75  
      76      case _SC_PHYS_PAGES:
      77        return __get_phys_pages ();
      78  
      79      case _SC_AVPHYS_PAGES:
      80        return __get_avphys_pages ();
      81  
      82      case _SC_ATEXIT_MAX:
      83        /* We have no limit since we use lists.  */
      84        return INT_MAX;
      85  
      86      case _SC_PASS_MAX:
      87        /* We have no limit but since the return value might be used to
      88  	 allocate a buffer we restrict the value.  */
      89        return BUFSIZ;
      90  
      91      case _SC_CHAR_BIT:
      92        return CHAR_BIT;
      93  
      94      case _SC_CHAR_MAX:
      95        return CHAR_MAX;
      96  
      97      case _SC_CHAR_MIN:
      98        return CHAR_MIN;
      99  
     100      case _SC_INT_MAX:
     101        return INT_MAX;
     102  
     103      case _SC_INT_MIN:
     104        return INT_MIN;
     105  
     106      case _SC_LONG_BIT:
     107        return sizeof (long int) * CHAR_BIT;
     108  
     109      case _SC_WORD_BIT:
     110        return sizeof (int) * CHAR_BIT;
     111  
     112      case _SC_MB_LEN_MAX:
     113        return MB_LEN_MAX;
     114  
     115      case _SC_NZERO:
     116        return NZERO;
     117  
     118      case _SC_SSIZE_MAX:
     119        return _POSIX_SSIZE_MAX;
     120  
     121      case _SC_SCHAR_MAX:
     122        return SCHAR_MAX;
     123  
     124      case _SC_SCHAR_MIN:
     125        return SCHAR_MIN;
     126  
     127      case _SC_SHRT_MAX:
     128        return SHRT_MAX;
     129  
     130      case _SC_SHRT_MIN:
     131        return SHRT_MIN;
     132  
     133      case _SC_UCHAR_MAX:
     134        return UCHAR_MAX;
     135  
     136      case _SC_UINT_MAX:
     137        return UINT_MAX;
     138  
     139      case _SC_ULONG_MAX:
     140        return ULONG_MAX;
     141  
     142      case _SC_USHRT_MAX:
     143        return USHRT_MAX;
     144  
     145      case _SC_GETGR_R_SIZE_MAX:
     146        return NSS_BUFLEN_GROUP;
     147  
     148      case _SC_GETPW_R_SIZE_MAX:
     149        return NSS_BUFLEN_PASSWD;
     150  
     151      case _SC_ARG_MAX:
     152      case _SC_CHILD_MAX:
     153      case _SC_CLK_TCK:
     154      case _SC_NGROUPS_MAX:
     155      case _SC_OPEN_MAX:
     156      case _SC_STREAM_MAX:
     157      case _SC_JOB_CONTROL:
     158      case _SC_SAVED_IDS:
     159      case _SC_REALTIME_SIGNALS:
     160      case _SC_PRIORITY_SCHEDULING:
     161      case _SC_TIMERS:
     162      case _SC_ASYNCHRONOUS_IO:
     163      case _SC_PRIORITIZED_IO:
     164      case _SC_SYNCHRONIZED_IO:
     165      case _SC_FSYNC:
     166      case _SC_MAPPED_FILES:
     167      case _SC_MEMLOCK:
     168      case _SC_MEMLOCK_RANGE:
     169      case _SC_MEMORY_PROTECTION:
     170      case _SC_MESSAGE_PASSING:
     171      case _SC_SEMAPHORES:
     172      case _SC_SHARED_MEMORY_OBJECTS:
     173  
     174      case _SC_AIO_LISTIO_MAX:
     175      case _SC_AIO_MAX:
     176      case _SC_AIO_PRIO_DELTA_MAX:
     177      case _SC_DELAYTIMER_MAX:
     178      case _SC_MQ_OPEN_MAX:
     179      case _SC_MQ_PRIO_MAX:
     180      case _SC_VERSION:
     181      case _SC_PAGESIZE:
     182      case _SC_RTSIG_MAX:
     183      case _SC_SEM_NSEMS_MAX:
     184      case _SC_SEM_VALUE_MAX:
     185      case _SC_SIGQUEUE_MAX:
     186      case _SC_TIMER_MAX:
     187  
     188      case _SC_PII:
     189      case _SC_PII_XTI:
     190      case _SC_PII_SOCKET:
     191      case _SC_PII_OSI:
     192      case _SC_POLL:
     193      case _SC_SELECT:
     194      case _SC_UIO_MAXIOV:
     195      case _SC_PII_INTERNET_STREAM:
     196      case _SC_PII_INTERNET_DGRAM:
     197      case _SC_PII_OSI_COTS:
     198      case _SC_PII_OSI_CLTS:
     199      case _SC_PII_OSI_M:
     200      case _SC_T_IOV_MAX:
     201  
     202      case _SC_BC_BASE_MAX:
     203      case _SC_BC_DIM_MAX:
     204      case _SC_BC_SCALE_MAX:
     205      case _SC_BC_STRING_MAX:
     206      case _SC_EXPR_NEST_MAX:
     207      case _SC_LINE_MAX:
     208      case _SC_RE_DUP_MAX:
     209      case _SC_2_VERSION:
     210      case _SC_2_C_BIND:
     211      case _SC_2_C_DEV:
     212      case _SC_2_FORT_DEV:
     213      case _SC_2_SW_DEV:
     214      case _SC_2_CHAR_TERM:
     215      case _SC_2_C_VERSION:
     216      case _SC_2_UPE:
     217  
     218      case _SC_THREADS:
     219      case _SC_THREAD_SAFE_FUNCTIONS:
     220      case _SC_LOGIN_NAME_MAX:
     221      case _SC_TTY_NAME_MAX:
     222      case _SC_THREAD_DESTRUCTOR_ITERATIONS:
     223      case _SC_THREAD_KEYS_MAX:
     224      case _SC_THREAD_STACK_MIN:
     225      case _SC_THREAD_THREADS_MAX:
     226      case _SC_THREAD_ATTR_STACKADDR:
     227      case _SC_THREAD_ATTR_STACKSIZE:
     228      case _SC_THREAD_PRIORITY_SCHEDULING:
     229      case _SC_THREAD_PRIO_INHERIT:
     230      case _SC_THREAD_PRIO_PROTECT:
     231      case _SC_THREAD_PROCESS_SHARED:
     232  
     233      case _SC_XOPEN_VERSION:
     234      case _SC_XOPEN_XCU_VERSION:
     235      case _SC_XOPEN_UNIX:
     236      case _SC_XOPEN_CRYPT:
     237      case _SC_XOPEN_ENH_I18N:
     238      case _SC_XOPEN_SHM:
     239      case _SC_XOPEN_XPG2:
     240      case _SC_XOPEN_XPG3:
     241      case _SC_XOPEN_XPG4:
     242  
     243      case _SC_NL_ARGMAX:
     244      case _SC_NL_LANGMAX:
     245      case _SC_NL_MSGMAX:
     246      case _SC_NL_NMAX:
     247      case _SC_NL_SETMAX:
     248      case _SC_NL_TEXTMAX:
     249  
     250      case _SC_XBS5_ILP32_OFF32:
     251      case _SC_XBS5_ILP32_OFFBIG:
     252      case _SC_XBS5_LP64_OFF64:
     253      case _SC_XBS5_LPBIG_OFFBIG:
     254  
     255      case _SC_POSIX_V6_ILP32_OFF32:
     256      case _SC_POSIX_V6_ILP32_OFFBIG:
     257      case _SC_POSIX_V6_LP64_OFF64:
     258      case _SC_POSIX_V6_LPBIG_OFFBIG:
     259  
     260      case _SC_POSIX_V7_ILP32_OFF32:
     261      case _SC_POSIX_V7_ILP32_OFFBIG:
     262      case _SC_POSIX_V7_LP64_OFF64:
     263      case _SC_POSIX_V7_LPBIG_OFFBIG:
     264  
     265      case _SC_XOPEN_LEGACY:
     266      case _SC_XOPEN_REALTIME:
     267      case _SC_XOPEN_REALTIME_THREADS:
     268  
     269      case _SC_MINSIGSTKSZ:
     270      case _SC_SIGSTKSZ:
     271  
     272        break;
     273      }
     274  
     275    __set_errno (ENOSYS);
     276    return -1;
     277  }
     278  
     279  weak_alias (__sysconf, sysconf)
     280  libc_hidden_def (__sysconf)
     281  
     282  stub_warning (sysconf)