1 /* Copyright (C) 1991-2021 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 __sysconf(int name)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) 283