1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* 28 * Copyright 1985, 1993 by Mortice Kern Systems Inc. All rights reserved. 29 * 30 */ 31 32 /* 33 * Copyright (c) 2018, Joyent, Inc. 34 */ 35 36 /* 37 * getconf -- POSIX.2 compatible utility to query configuration specific 38 * parameters. 39 * -- XPG4 support added June/93 40 * 41 * -- XPG5 support added Dec/97 42 * 43 * -- XPG6 support added May/2003 44 */ 45 46 #include <stdio.h> 47 #include <stdlib.h> 48 #include <string.h> 49 #include <errno.h> 50 #include <unistd.h> 51 #include <limits.h> 52 #include <locale.h> 53 #include <libintl.h> 54 #include <assert.h> 55 56 extern size_t confstr(int, char *, size_t); 57 58 static int aflag = 0; 59 60 #define INVAL_ARG "getconf: Invalid argument (%s)\n" 61 #define INVAL_PATHARG "getconf: Invalid argument (%s or %s)\n" 62 63 /* 64 * Notes: 65 * The sctab.value field is defined to be a long. 66 * There are some values that are "unsigned long"; these values 67 * can be stored in a "long" field but when output, must be printed 68 * as an unsigned value. Thus, these values must have UNSIGNED_VALUE bit 69 * set in sctab.flag field. 70 * 71 * There are 2 different ways to indicate a symbol is undefined: 72 * 1) sctab.flag = UNDEFINED 73 * 2) or sctab.value = -1 (and if !UNDEFINED and !UNSIGNED_VALUE) 74 * 75 * There are a group of symbols (e.g CHAR_MIN, INT_MAX, INT_MIN, LONG_BIT ...) 76 * which we may set to -1 if they are not pre-defined in a system header file. 77 * This is used to indicate that these symbols are "undefined". 78 * We are assuming that these symbols cannot reasonably have a value of -1 79 * if they were defined in a system header file. 80 * (Unless of course -1 can be used to indicate "undefined" for that symbol) 81 */ 82 83 static struct sctab { 84 long value; 85 char *name; 86 enum { SELFCONF, SYSCONF, PATHCONF, CONFSTR } type; 87 int flag; 88 /* bit fields for sctab.flag member */ 89 #define NOFLAGS 0 /* no special indicators */ 90 #define UNDEFINED 1 /* value is known undefined at compile time */ 91 #define UNSIGNED_VALUE 2 /* value is an unsigned */ 92 } sctab[] = { 93 /* 94 * Some entries in this structure have both leading _ and non leading _ 95 * versions for compatibility with various versions of the specifications. 96 * It is not expected that both forms will be required for new entries. 97 */ 98 99 /* POSIX.2-1992 table 2-17 */ 100 _POSIX2_BC_BASE_MAX, "POSIX2_BC_BASE_MAX", SELFCONF, NOFLAGS, 101 _POSIX2_BC_BASE_MAX, "_POSIX2_BC_BASE_MAX", SELFCONF, NOFLAGS, 102 _POSIX2_BC_DIM_MAX, "POSIX2_BC_DIM_MAX", SELFCONF, NOFLAGS, 103 _POSIX2_BC_DIM_MAX, "_POSIX2_BC_DIM_MAX", SELFCONF, NOFLAGS, 104 _POSIX2_BC_SCALE_MAX, "POSIX2_BC_SCALE_MAX", SELFCONF, NOFLAGS, 105 _POSIX2_BC_SCALE_MAX, "_POSIX2_BC_SCALE_MAX", SELFCONF, NOFLAGS, 106 _POSIX2_BC_STRING_MAX, "POSIX2_BC_STRING_MAX", SELFCONF, NOFLAGS, 107 _POSIX2_BC_STRING_MAX, "_POSIX2_BC_STRING_MAX", SELFCONF, NOFLAGS, 108 _POSIX2_COLL_WEIGHTS_MAX, "POSIX2_COLL_WEIGHTS_MAX", SELFCONF, NOFLAGS, 109 _POSIX2_COLL_WEIGHTS_MAX, "_POSIX2_COLL_WEIGHTS_MAX", SELFCONF, NOFLAGS, 110 _POSIX2_EXPR_NEST_MAX, "POSIX2_EXPR_NEST_MAX", SELFCONF, NOFLAGS, 111 _POSIX2_EXPR_NEST_MAX, "_POSIX2_EXPR_NEST_MAX", SELFCONF, NOFLAGS, 112 _POSIX2_LINE_MAX, "POSIX2_LINE_MAX", SELFCONF, NOFLAGS, 113 _POSIX2_LINE_MAX, "_POSIX2_LINE_MAX", SELFCONF, NOFLAGS, 114 _POSIX2_RE_DUP_MAX, "POSIX2_RE_DUP_MAX", SELFCONF, NOFLAGS, 115 _POSIX2_RE_DUP_MAX, "_POSIX2_RE_DUP_MAX", SELFCONF, NOFLAGS, 116 /* See limits.h section below for _POSIX_RE_DUP_MAX */ 117 118 /* UNIX 98 */ 119 _POSIX_AIO_LISTIO_MAX, "_POSIX_AIO_LISTIO_MAX", SELFCONF, NOFLAGS, 120 _POSIX_AIO_MAX, "_POSIX_AIO_MAX", SELFCONF, NOFLAGS, 121 _POSIX_DELAYTIMER_MAX, "_POSIX_DELAYTIMER_MAX", SELFCONF, NOFLAGS, 122 _POSIX_LOGIN_NAME_MAX, "_POSIX_LOGIN_NAME_MAX", SELFCONF, NOFLAGS, 123 _POSIX_MQ_OPEN_MAX, "_POSIX_MQ_OPEN_MAX", SELFCONF, NOFLAGS, 124 _POSIX_MQ_PRIO_MAX, "_POSIX_MQ_PRIO_MAX", SELFCONF, NOFLAGS, 125 _POSIX_RTSIG_MAX, "_POSIX_RTSIG_MAX", SELFCONF, NOFLAGS, 126 _POSIX_SEM_NSEMS_MAX, "_POSIX_SEM_NSEMS_MAX", SELFCONF, NOFLAGS, 127 _POSIX_SEM_VALUE_MAX, "_POSIX_SEM_VALUE_MAX", SELFCONF, NOFLAGS, 128 _POSIX_SIGQUEUE_MAX, "_POSIX_SIGQUEUE_MAX", SELFCONF, NOFLAGS, 129 _POSIX_TTY_NAME_MAX, "_POSIX_TTY_NAME_MAX", SELFCONF, NOFLAGS, 130 131 /* UNIX 03 */ 132 _POSIX_HOST_NAME_MAX, "_POSIX_HOST_NAME_MAX", SELFCONF, NOFLAGS, 133 _POSIX_RE_DUP_MAX, "_POSIX_RE_DUP_MAX", SELFCONF, NOFLAGS, 134 _POSIX_CLOCKRES_MIN, "_POSIX_CLOCKRES_MIN", SELFCONF, NOFLAGS, 135 _POSIX_SYMLINK_MAX, "_POSIX_SYMLINK_MAX", SELFCONF, NOFLAGS, 136 _POSIX_SYMLOOP_MAX, "_POSIX_SYMLOOP_MAX", SELFCONF, NOFLAGS, 137 CHARCLASS_NAME_MAX, "_POSIX2_CHARCLASS_NAME_MAX", SELFCONF, NOFLAGS, 138 139 /* POSIX.2-1992 table 2-17 */ 140 _SC_2_VERSION, "POSIX2_VERSION", SYSCONF, NOFLAGS, 141 _SC_2_VERSION, "_POSIX2_VERSION", SYSCONF, NOFLAGS, 142 143 /* POSIX.2-1992 table 2-18 */ 144 _SC_BC_BASE_MAX, "BC_BASE_MAX", SYSCONF, NOFLAGS, 145 _SC_BC_DIM_MAX, "BC_DIM_MAX", SYSCONF, NOFLAGS, 146 _SC_BC_SCALE_MAX, "BC_SCALE_MAX", SYSCONF, NOFLAGS, 147 _SC_BC_STRING_MAX, "BC_STRING_MAX", SYSCONF, NOFLAGS, 148 _SC_COLL_WEIGHTS_MAX, "COLL_WEIGHTS_MAX", SYSCONF, NOFLAGS, 149 _SC_EXPR_NEST_MAX, "EXPR_NEST_MAX", SYSCONF, NOFLAGS, 150 _SC_LINE_MAX, "LINE_MAX", SYSCONF, NOFLAGS, 151 _SC_RE_DUP_MAX, "RE_DUP_MAX", SYSCONF, NOFLAGS, 152 153 /* POSIX.2-1992 table 2-19 */ 154 _SC_2_C_BIND, "POSIX2_C_BIND", SYSCONF, NOFLAGS, 155 _SC_2_C_BIND, "_POSIX2_C_BIND", SYSCONF, NOFLAGS, 156 _SC_2_C_DEV, "POSIX2_C_DEV", SYSCONF, NOFLAGS, 157 _SC_2_C_DEV, "_POSIX2_C_DEV", SYSCONF, NOFLAGS, 158 _SC_2_CHAR_TERM, "POSIX2_CHAR_TERM", SYSCONF, NOFLAGS, 159 _SC_2_CHAR_TERM, "_POSIX2_CHAR_TERM", SYSCONF, NOFLAGS, 160 _SC_2_FORT_DEV, "POSIX2_FORT_DEV", SYSCONF, NOFLAGS, 161 _SC_2_FORT_DEV, "_POSIX2_FORT_DEV", SYSCONF, NOFLAGS, 162 _SC_2_FORT_RUN, "POSIX2_FORT_RUN", SYSCONF, NOFLAGS, 163 _SC_2_FORT_RUN, "_POSIX2_FORT_RUN", SYSCONF, NOFLAGS, 164 _SC_2_LOCALEDEF, "POSIX2_LOCALEDEF", SYSCONF, NOFLAGS, 165 _SC_2_LOCALEDEF, "_POSIX2_LOCALEDEF", SYSCONF, NOFLAGS, 166 _SC_2_SW_DEV, "POSIX2_SW_DEV", SYSCONF, NOFLAGS, 167 _SC_2_SW_DEV, "_POSIX2_SW_DEV", SYSCONF, NOFLAGS, 168 _SC_2_UPE, "POSIX2_UPE", SYSCONF, NOFLAGS, 169 _SC_2_UPE, "_POSIX2_UPE", SYSCONF, NOFLAGS, 170 171 /* POSIX.1-1990 table 2-3 */ 172 _POSIX_ARG_MAX, "_POSIX_ARG_MAX", SELFCONF, NOFLAGS, 173 _POSIX_CHILD_MAX, "_POSIX_CHILD_MAX", SELFCONF, NOFLAGS, 174 _POSIX_LINK_MAX, "_POSIX_LINK_MAX", SELFCONF, NOFLAGS, 175 _POSIX_MAX_CANON, "_POSIX_MAX_CANON", SELFCONF, NOFLAGS, 176 _POSIX_MAX_INPUT, "_POSIX_MAX_INPUT", SELFCONF, NOFLAGS, 177 _POSIX_NAME_MAX, "_POSIX_NAME_MAX", SELFCONF, NOFLAGS, 178 _POSIX_NGROUPS_MAX, "_POSIX_NGROUPS_MAX", SELFCONF, NOFLAGS, 179 _POSIX_OPEN_MAX, "_POSIX_OPEN_MAX", SELFCONF, NOFLAGS, 180 _POSIX_PATH_MAX, "_POSIX_PATH_MAX", SELFCONF, NOFLAGS, 181 _POSIX_PIPE_BUF, "_POSIX_PIPE_BUF", SELFCONF, NOFLAGS, 182 _POSIX_SSIZE_MAX, "_POSIX_SSIZE_MAX", SELFCONF, NOFLAGS, 183 _POSIX_STREAM_MAX, "_POSIX_STREAM_MAX", SELFCONF, NOFLAGS, 184 _POSIX_TIMER_MAX, "_POSIX_TIMER_MAX", SELFCONF, NOFLAGS, 185 _POSIX_THREAD_DESTRUCTOR_ITERATIONS, 186 "_POSIX_THREAD_DESTRUCTOR_ITERATIONS", SELFCONF, NOFLAGS, 187 _POSIX_THREAD_KEYS_MAX, 188 "_POSIX_THREAD_KEYS_MAX", SELFCONF, NOFLAGS, 189 _POSIX_THREAD_THREADS_MAX, 190 "_POSIX_THREAD_THREADS_MAX", SELFCONF, NOFLAGS, 191 _POSIX_TZNAME_MAX, "_POSIX_TZNAME_MAX", SELFCONF, NOFLAGS, 192 193 /* POSIX.1-1990 table 4-2 */ 194 _SC_ARG_MAX, "ARG_MAX", SYSCONF, NOFLAGS, 195 _SC_CHILD_MAX, "CHILD_MAX", SYSCONF, NOFLAGS, 196 _SC_CLK_TCK, "CLK_TCK", SYSCONF, NOFLAGS, 197 _SC_JOB_CONTROL, "_POSIX_JOB_CONTROL", SYSCONF, NOFLAGS, 198 _SC_NGROUPS_MAX, "NGROUPS_MAX", SYSCONF, NOFLAGS, 199 _SC_OPEN_MAX, "OPEN_MAX", SYSCONF, NOFLAGS, 200 _SC_SAVED_IDS, "_POSIX_SAVED_IDS", SYSCONF, NOFLAGS, 201 _SC_STREAM_MAX, "STREAM_MAX", SYSCONF, NOFLAGS, 202 _SC_TZNAME_MAX, "TZNAME_MAX", SYSCONF, NOFLAGS, 203 _SC_VERSION, "_POSIX_VERSION", SYSCONF, NOFLAGS, 204 205 /* pathconf() variables */ 206 207 /* POSIX.1-1990 table 5-2 */ 208 209 _PC_LINK_MAX, "LINK_MAX", PATHCONF, NOFLAGS, 210 _PC_MAX_CANON, "MAX_CANON", PATHCONF, NOFLAGS, 211 _PC_MAX_INPUT, "MAX_INPUT", PATHCONF, NOFLAGS, 212 _PC_NAME_MAX, "NAME_MAX", PATHCONF, NOFLAGS, 213 _PC_PATH_MAX, "PATH_MAX", PATHCONF, NOFLAGS, 214 _PC_PIPE_BUF, "PIPE_BUF", PATHCONF, NOFLAGS, 215 _PC_CHOWN_RESTRICTED, "_POSIX_CHOWN_RESTRICTED", PATHCONF, NOFLAGS, 216 _PC_NO_TRUNC, "_POSIX_NO_TRUNC", PATHCONF, NOFLAGS, 217 _PC_VDISABLE, "_POSIX_VDISABLE", PATHCONF, NOFLAGS, 218 219 /* UNIX 98 additions */ 220 221 _PC_ASYNC_IO, "_POSIX_ASYNC_IO", PATHCONF, NOFLAGS, 222 _PC_PRIO_IO, "_POSIX_PRIO_IO", PATHCONF, NOFLAGS, 223 _PC_SYNC_IO, "_POSIX_SYNC_IO", PATHCONF, NOFLAGS, 224 225 /* Large File Summit name (UNIX 98) */ 226 227 _PC_FILESIZEBITS, "FILESIZEBITS", PATHCONF, NOFLAGS, 228 _PC_XATTR_ENABLED, "XATTR_ENABLED", PATHCONF, NOFLAGS, 229 _PC_XATTR_EXISTS, "XATTR_EXISTS", PATHCONF, NOFLAGS, 230 231 /* UNIX 03 Additions */ 232 233 /* Advisory Information (ADV) */ 234 _PC_ALLOC_SIZE_MIN, "POSIX_ALLOC_SIZE_MIN", PATHCONF, NOFLAGS, 235 _PC_REC_INCR_XFER_SIZE, "POSIX_REC_INCR_XFER_SIZE", PATHCONF, NOFLAGS, 236 _PC_REC_MAX_XFER_SIZE, "POSIX_REC_MAX_XFER_SIZE", PATHCONF, NOFLAGS, 237 _PC_REC_MIN_XFER_SIZE, "POSIX_REC_MIN_XFER_SIZE", PATHCONF, NOFLAGS, 238 _PC_REC_XFER_ALIGN, "POSIX_REC_XFER_ALIGN", PATHCONF, NOFLAGS, 239 240 _PC_2_SYMLINKS, "POSIX2_SYMLINKS", PATHCONF, NOFLAGS, 241 _PC_SYMLINK_MAX, "SYMLINK_MAX", PATHCONF, NOFLAGS, 242 243 _PC_ACL_ENABLED, "ACL_ENABLED", PATHCONF, NOFLAGS, 244 _PC_MIN_HOLE_SIZE, "MIN_HOLE_SIZE", PATHCONF, NOFLAGS, 245 _PC_SATTR_ENABLED, "SATTR_ENABLED", PATHCONF, NOFLAGS, 246 _PC_SATTR_EXISTS, "SATTR_EXISTS", PATHCONF, NOFLAGS, 247 248 /* UNIX 08 additions */ 249 250 _PC_TIMESTAMP_RESOLUTION, "_POSIX_TIMESTAMP_RESOLUTION", 251 PATHCONF, NOFLAGS, 252 253 /* confstr() variables */ 254 255 /* POSIX.2-1992 description of getconf utility */ 256 _CS_PATH, "PATH", CONFSTR, NOFLAGS, 257 258 /* POSIX.2-1992 table B-18 */ 259 _CS_PATH, "CS_PATH", CONFSTR, NOFLAGS, 260 _CS_PATH, "_CS_PATH", CONFSTR, NOFLAGS, 261 262 /* command names for large file configuration information */ 263 /* large file compilation environment configuration */ 264 265 _CS_LFS_CFLAGS, "LFS_CFLAGS", CONFSTR, NOFLAGS, 266 _CS_LFS_LDFLAGS, "LFS_LDFLAGS", CONFSTR, NOFLAGS, 267 _CS_LFS_LIBS, "LFS_LIBS", CONFSTR, NOFLAGS, 268 _CS_LFS_LINTFLAGS, "LFS_LINTFLAGS", CONFSTR, NOFLAGS, 269 270 /* transitional large file interface configuration */ 271 272 _CS_LFS64_CFLAGS, "LFS64_CFLAGS", CONFSTR, NOFLAGS, 273 _CS_LFS64_LDFLAGS, "LFS64_LDFLAGS", CONFSTR, NOFLAGS, 274 _CS_LFS64_LIBS, "LFS64_LIBS", CONFSTR, NOFLAGS, 275 _CS_LFS64_LINTFLAGS, "LFS64_LINTFLAGS", CONFSTR, NOFLAGS, 276 277 /* 278 * UNIX 98: 279 * confstr additions, these support 280 * programming specifications/environments. 281 * 282 * Unfortunately there is some uncertainty with 283 * the standard at this point about the constant 284 * name, thus we need to recognize BOTH with and 285 * without the initial underscore. 286 */ 287 _CS_XBS5_ILP32_OFF32_CFLAGS, "XBS5_ILP32_OFF32_CFLAGS", 288 CONFSTR, NOFLAGS, 289 _CS_XBS5_ILP32_OFF32_CFLAGS, "_XBS5_ILP32_OFF32_CFLAGS", 290 CONFSTR, NOFLAGS, 291 292 _CS_XBS5_ILP32_OFF32_LDFLAGS, "XBS5_ILP32_OFF32_LDFLAGS", 293 CONFSTR, NOFLAGS, 294 _CS_XBS5_ILP32_OFF32_LDFLAGS, "_XBS5_ILP32_OFF32_LDFLAGS", 295 CONFSTR, NOFLAGS, 296 297 _CS_XBS5_ILP32_OFF32_LIBS, "XBS5_ILP32_OFF32_LIBS", 298 CONFSTR, NOFLAGS, 299 _CS_XBS5_ILP32_OFF32_LIBS, "_XBS5_ILP32_OFF32_LIBS", 300 CONFSTR, NOFLAGS, 301 302 _CS_XBS5_ILP32_OFF32_LINTFLAGS, "XBS5_ILP32_OFF32_LINTFLAGS", 303 CONFSTR, NOFLAGS, 304 _CS_XBS5_ILP32_OFF32_LINTFLAGS, "_XBS5_ILP32_OFF32_LINTFLAGS", 305 CONFSTR, NOFLAGS, 306 307 _CS_XBS5_ILP32_OFFBIG_CFLAGS, "XBS5_ILP32_OFFBIG_CFLAGS", 308 CONFSTR, NOFLAGS, 309 _CS_XBS5_ILP32_OFFBIG_CFLAGS, "_XBS5_ILP32_OFFBIG_CFLAGS", 310 CONFSTR, NOFLAGS, 311 312 _CS_XBS5_ILP32_OFFBIG_LDFLAGS, "XBS5_ILP32_OFFBIG_LDFLAGS", 313 CONFSTR, NOFLAGS, 314 _CS_XBS5_ILP32_OFFBIG_LDFLAGS, "_XBS5_ILP32_OFFBIG_LDFLAGS", 315 CONFSTR, NOFLAGS, 316 317 _CS_XBS5_ILP32_OFFBIG_LIBS, "XBS5_ILP32_OFFBIG_LIBS", 318 CONFSTR, NOFLAGS, 319 _CS_XBS5_ILP32_OFFBIG_LIBS, "_XBS5_ILP32_OFFBIG_LIBS", 320 CONFSTR, NOFLAGS, 321 322 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, "XBS5_ILP32_OFFBIG_LINTFLAGS", 323 CONFSTR, NOFLAGS, 324 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, "_XBS5_ILP32_OFFBIG_LINTFLAGS", 325 CONFSTR, NOFLAGS, 326 327 _CS_XBS5_LP64_OFF64_CFLAGS, "XBS5_LP64_OFF64_CFLAGS", 328 CONFSTR, NOFLAGS, 329 _CS_XBS5_LP64_OFF64_CFLAGS, "_XBS5_LP64_OFF64_CFLAGS", 330 CONFSTR, NOFLAGS, 331 332 _CS_XBS5_LP64_OFF64_LDFLAGS, "XBS5_LP64_OFF64_LDFLAGS", 333 CONFSTR, NOFLAGS, 334 _CS_XBS5_LP64_OFF64_LDFLAGS, "_XBS5_LP64_OFF64_LDFLAGS", 335 CONFSTR, NOFLAGS, 336 337 _CS_XBS5_LP64_OFF64_LIBS, "XBS5_LP64_OFF64_LIBS", 338 CONFSTR, NOFLAGS, 339 _CS_XBS5_LP64_OFF64_LIBS, "_XBS5_LP64_OFF64_LIBS", 340 CONFSTR, NOFLAGS, 341 342 _CS_XBS5_LP64_OFF64_LINTFLAGS, "XBS5_LP64_OFF64_LINTFLAGS", 343 CONFSTR, NOFLAGS, 344 _CS_XBS5_LP64_OFF64_LINTFLAGS, "_XBS5_LP64_OFF64_LINTFLAGS", 345 CONFSTR, NOFLAGS, 346 347 _CS_XBS5_LPBIG_OFFBIG_CFLAGS, "XBS5_LPBIG_OFFBIG_CFLAGS", 348 CONFSTR, NOFLAGS, 349 _CS_XBS5_LPBIG_OFFBIG_CFLAGS, "_XBS5_LPBIG_OFFBIG_CFLAGS", 350 CONFSTR, NOFLAGS, 351 352 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, "XBS5_LPBIG_OFFBIG_LDFLAGS", 353 CONFSTR, NOFLAGS, 354 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, "_XBS5_LPBIG_OFFBIG_LDFLAGS", 355 CONFSTR, NOFLAGS, 356 357 _CS_XBS5_LPBIG_OFFBIG_LIBS, "XBS5_LPBIG_OFFBIG_LIBS", 358 CONFSTR, NOFLAGS, 359 _CS_XBS5_LPBIG_OFFBIG_LIBS, "_XBS5_LPBIG_OFFBIG_LIBS", 360 CONFSTR, NOFLAGS, 361 362 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, "XBS5_LPBIG_OFFBIG_LINTFLAGS", 363 CONFSTR, NOFLAGS, 364 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, "_XBS5_LPBIG_OFFBIG_LINTFLAGS", 365 CONFSTR, NOFLAGS, 366 367 /* 368 * UNIX 03 confstr() additions for compilation environments 369 */ 370 _CS_POSIX_V6_ILP32_OFF32_CFLAGS, "POSIX_V6_ILP32_OFF32_CFLAGS", 371 CONFSTR, NOFLAGS, 372 _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, "POSIX_V6_ILP32_OFF32_LDFLAGS", 373 CONFSTR, NOFLAGS, 374 _CS_POSIX_V6_ILP32_OFF32_LIBS, "POSIX_V6_ILP32_OFF32_LIBS", 375 CONFSTR, NOFLAGS, 376 _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, "POSIX_V6_ILP32_OFFBIG_CFLAGS", 377 CONFSTR, NOFLAGS, 378 _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, "POSIX_V6_ILP32_OFFBIG_LDFLAGS", 379 CONFSTR, NOFLAGS, 380 _CS_POSIX_V6_ILP32_OFFBIG_LIBS, "POSIX_V6_ILP32_OFFBIG_LIBS", 381 CONFSTR, NOFLAGS, 382 _CS_POSIX_V6_LP64_OFF64_CFLAGS, "POSIX_V6_LP64_OFF64_CFLAGS", 383 CONFSTR, NOFLAGS, 384 _CS_POSIX_V6_LP64_OFF64_LDFLAGS, "POSIX_V6_LP64_OFF64_LDFLAGS", 385 CONFSTR, NOFLAGS, 386 _CS_POSIX_V6_LP64_OFF64_LIBS, "POSIX_V6_LP64_OFF64_LIBS", 387 CONFSTR, NOFLAGS, 388 _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, "POSIX_V6_LPBIG_OFFBIG_CFLAGS", 389 CONFSTR, NOFLAGS, 390 _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, "POSIX_V6_LPBIG_OFFBIG_LDFLAGS", 391 CONFSTR, NOFLAGS, 392 _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, "POSIX_V6_LPBIG_OFFBIG_LIBS", 393 CONFSTR, NOFLAGS, 394 _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS, "POSIX_V6_WIDTH_RESTRICTED_ENVS", 395 CONFSTR, NOFLAGS, 396 /* End of UNIX 03 compilation environments */ 397 398 #ifdef _SC_2_C_VERSION /* POSIX.2 table B-4 */ 399 _SC_2_C_VERSION, "_POSIX2_C_VERSION", SYSCONF, NOFLAGS, 400 #else 401 _POSIX2_C_VERSION, "_POSIX2_C_VERSION", SELFCONF, NOFLAGS, 402 #endif 403 404 /* 405 * XPG4 support BEGINS 406 */ 407 408 #ifndef CHARCLASS_NAME_MAX 409 #define CHARCLASS_NAME_MAX -1 410 #endif 411 #ifndef CHAR_BIT 412 #define CHAR_BIT -1 413 #endif 414 #ifndef CHAR_MAX 415 #define CHAR_MAX -1 416 #endif 417 #ifndef CHAR_MIN 418 #define CHAR_MIN -1 419 #endif 420 #ifndef INT_MAX 421 #define INT_MAX -1 422 #endif 423 #ifndef INT_MIN 424 #define INT_MIN -1 425 #endif 426 #ifndef LONG_BIT 427 #define LONG_BIT -1 428 #endif 429 #ifndef LONG_MAX 430 #define LONG_MAX -1 431 #endif 432 #ifndef LONG_MIN 433 #define LONG_MIN -1 434 #endif 435 #ifndef MB_LEN_MAX 436 #define MB_LEN_MAX -1 437 #endif 438 #ifndef NL_NMAX 439 #define NL_NMAX -1 440 #endif 441 #ifndef NL_ARGMAX 442 #define NL_ARGMAX -1 443 #endif 444 #ifndef NL_LANGMAX 445 #define NL_LANGMAX -1 446 #endif 447 #ifndef NL_MSGMAX 448 #define NL_MSGMAX -1 449 #endif 450 #ifndef NL_SETMAX 451 #define NL_SETMAX -1 452 #endif 453 #ifndef NL_TEXTMAX 454 #define NL_TEXTMAX -1 455 #endif 456 #ifndef NZERO 457 #define NZERO -1 458 #endif 459 #ifndef SCHAR_MAX 460 #define SCHAR_MAX -1 461 #endif 462 #ifndef SCHAR_MIN 463 #define SCHAR_MIN -1 464 #endif 465 #ifndef SHRT_MAX 466 #define SHRT_MAX -1 467 #endif 468 #ifndef SHRT_MIN 469 #define SHRT_MIN -1 470 #endif 471 #ifndef TMP_MAX 472 #define TMP_MAX -1 473 #endif 474 #ifndef WORD_BIT 475 #define WORD_BIT -1 476 #endif 477 478 479 #ifndef _XOPEN_XPG2 480 #define _XOPEN_XPG2 -1 481 #endif 482 #ifndef _XOPEN_XPG3 483 #define _XOPEN_XPG3 -1 484 #endif 485 #ifndef _XOPEN_XPG4 486 #define _XOPEN_XPG4 -1 487 #endif 488 489 /* 490 * the following are values that we should find in <limits.h> 491 * so we use SELFCONF here. 492 * 493 */ 494 495 /* POSIX.1-1990 */ 496 CHARCLASS_NAME_MAX, "CHARCLASS_NAME_MAX", SELFCONF, NOFLAGS, 497 SSIZE_MAX, "SSIZE_MAX", SELFCONF, NOFLAGS, 498 499 /* POSIX.1-1988 */ 500 CHAR_BIT, "CHAR_BIT", SELFCONF, NOFLAGS, 501 CHAR_MAX, "CHAR_MAX", SELFCONF, NOFLAGS, 502 CHAR_MIN, "CHAR_MIN", SELFCONF, NOFLAGS, 503 INT_MAX, "INT_MAX", SELFCONF, NOFLAGS, 504 INT_MIN, "INT_MIN", SELFCONF, NOFLAGS, 505 LONG_BIT, "LONG_BIT", SELFCONF, NOFLAGS, 506 LONG_MAX, "LONG_MAX", SELFCONF, NOFLAGS, 507 LONG_MIN, "LONG_MIN", SELFCONF, NOFLAGS, 508 MB_LEN_MAX, "MB_LEN_MAX", SELFCONF, NOFLAGS, 509 NL_NMAX, "NL_NMAX", SELFCONF, NOFLAGS, 510 NL_ARGMAX, "NL_ARGMAX", SELFCONF, NOFLAGS, 511 NL_LANGMAX, "NL_LANGMAX", SELFCONF, NOFLAGS, 512 NL_MSGMAX, "NL_MSGMAX", SELFCONF, NOFLAGS, 513 NL_SETMAX, "NL_SETMAX", SELFCONF, NOFLAGS, 514 NL_TEXTMAX, "NL_TEXTMAX", SELFCONF, NOFLAGS, 515 NZERO, "NZERO", SELFCONF, NOFLAGS, 516 SCHAR_MAX, "SCHAR_MAX", SELFCONF, NOFLAGS, 517 SCHAR_MIN, "SCHAR_MIN", SELFCONF, NOFLAGS, 518 SHRT_MAX, "SHRT_MAX", SELFCONF, NOFLAGS, 519 SHRT_MIN, "SHRT_MIN", SELFCONF, NOFLAGS, 520 TMP_MAX, "TMP_MAX", SELFCONF, NOFLAGS, 521 522 /* 523 * for the unsigned maximums, we cannot rely on the value -1 524 * to indicate "undefined". 525 */ 526 #ifndef UCHAR_MAX 527 0, "UCHAR_MAX", SELFCONF, UNDEFINED, 528 #else 529 (long)UCHAR_MAX, "UCHAR_MAX", SELFCONF, UNSIGNED_VALUE, 530 #endif /* UCHAR_MAX */ 531 #ifndef UINT_MAX 532 0, "UINT_MAX", SELFCONF, UNDEFINED, 533 #else 534 (long)UINT_MAX, "UINT_MAX", SELFCONF, UNSIGNED_VALUE, 535 #endif /* UINT_MAX */ 536 #ifndef ULONG_MAX 537 0, "ULONG_MAX", SELFCONF, UNDEFINED, 538 #else 539 (long)ULONG_MAX, "ULONG_MAX", SELFCONF, UNSIGNED_VALUE, 540 #endif /* ULONG_MAX */ 541 #ifndef USHRT_MAX 542 0, "USHRT_MAX", SELFCONF, UNDEFINED, 543 #else 544 (long)USHRT_MAX, "USHRT_MAX", SELFCONF, UNSIGNED_VALUE, 545 #endif /* USHRT_MAX */ 546 #ifndef SIZE_MAX 547 0, "SIZE_MAX", SELFCONF, UNDEFINED, 548 #else 549 (long)SIZE_MAX, "SIZE_MAX", SELFCONF, UNSIGNED_VALUE, 550 #endif /* SIZE_MAX */ 551 552 WORD_BIT, "WORD_BIT", SELFCONF, NOFLAGS, 553 554 /* XPG4 Version 2 */ 555 _XOPEN_IOV_MAX, "_XOPEN_IOV_MAX", SELFCONF, NOFLAGS, 556 557 /* UNIX 03 */ 558 _XOPEN_NAME_MAX, "_XOPEN_NAME_MAX", SELFCONF, NOFLAGS, 559 _XOPEN_PATH_MAX, "_XOPEN_PATH_MAX", SELFCONF, NOFLAGS, 560 561 /* 562 * The following are defined via sysconf(). These are considered 563 * an extension to sysconf(). 564 * The -0 is needed if _XOPEN_XPG? is defined to be an empty string. 565 */ 566 _XOPEN_XPG2-0, "_XOPEN_XPG2", SELFCONF, NOFLAGS, 567 _XOPEN_XPG3-0, "_XOPEN_XPG3", SELFCONF, NOFLAGS, 568 _XOPEN_XPG4-0, "_XOPEN_XPG4", SELFCONF, NOFLAGS, 569 570 /* 571 * The following should be provided by sysconf() (e.g use SYSCONF), 572 * so we look for the appropriate _SC_* symbol in <unistd.h>. 573 * If it is not defined, then we use SELFCONF with the value of -1. 574 */ 575 _SC_XOPEN_VERSION, "_XOPEN_VERSION", SYSCONF, NOFLAGS, 576 _SC_XOPEN_XCU_VERSION, "_XOPEN_XCU_VERSION", SYSCONF, NOFLAGS, 577 _SC_XOPEN_CRYPT, "_XOPEN_CRYPT", SYSCONF, NOFLAGS, 578 _SC_XOPEN_ENH_I18N, "_XOPEN_ENH_I18N", SYSCONF, NOFLAGS, 579 _SC_XOPEN_SHM, "_XOPEN_SHM", SYSCONF, NOFLAGS, 580 581 /* 582 * XPG4 support ends 583 */ 584 585 /* XPG4, Version 2 support */ 586 587 _SC_ATEXIT_MAX, "ATEXIT_MAX", SYSCONF, NOFLAGS, 588 _SC_PAGESIZE, "PAGESIZE", SYSCONF, NOFLAGS, 589 _SC_PAGE_SIZE, "PAGE_SIZE", SYSCONF, NOFLAGS, 590 _SC_XOPEN_UNIX, "_XOPEN_UNIX", SYSCONF, NOFLAGS, 591 _SC_IOV_MAX, "IOV_MAX", SYSCONF, NOFLAGS, 592 593 /* 594 * UNIX 98 - XPG5 additions 595 */ 596 _SC_XOPEN_LEGACY, "_XOPEN_LEGACY", SYSCONF, NOFLAGS, 597 _SC_PASS_MAX, "PASS_MAX", SYSCONF, NOFLAGS, 598 _SC_AIO_LISTIO_MAX, "AIO_LISTIO_MAX", SYSCONF, NOFLAGS, 599 _SC_AIO_MAX, "AIO_MAX", SYSCONF, NOFLAGS, 600 _SC_AIO_PRIO_DELTA_MAX, "AIO_PRIO_DELTA_MAX", SYSCONF, NOFLAGS, 601 _SC_DELAYTIMER_MAX, "DELAYTIMER_MAX", SYSCONF, NOFLAGS, 602 _SC_MQ_OPEN_MAX, "MQ_OPEN_MAX", SYSCONF, NOFLAGS, 603 _SC_MQ_PRIO_MAX, "MQ_PRIO_MAX", SYSCONF, NOFLAGS, 604 _SC_RTSIG_MAX, "RTSIG_MAX", SYSCONF, NOFLAGS, 605 _SC_SEM_NSEMS_MAX, "SEM_NSEMS_MAX", SYSCONF, NOFLAGS, 606 _SC_SEM_VALUE_MAX, "SEM_VALUE_MAX", SYSCONF, NOFLAGS, 607 _SC_SIGQUEUE_MAX, "SIGQUEUE_MAX", SYSCONF, NOFLAGS, 608 _SC_TIMER_MAX, "TIMER_MAX", SYSCONF, NOFLAGS, 609 610 _SC_ASYNCHRONOUS_IO, "_POSIX_ASYNCHRONOUS_IO", SYSCONF, NOFLAGS, 611 _SC_FSYNC, "_POSIX_FSYNC", SYSCONF, NOFLAGS, 612 _SC_MAPPED_FILES, "_POSIX_MAPPED_FILES", SYSCONF, NOFLAGS, 613 _SC_MEMLOCK, "_POSIX_MEMLOCK", SYSCONF, NOFLAGS, 614 _SC_MEMLOCK_RANGE, "_POSIX_MEMLOCK_RANGE", SYSCONF, NOFLAGS, 615 _SC_MEMORY_PROTECTION, "_POSIX_MEMORY_PROTECTION", SYSCONF, NOFLAGS, 616 _SC_MESSAGE_PASSING, "_POSIX_MESSAGE_PASSING", SYSCONF, NOFLAGS, 617 _SC_PRIORITIZED_IO, "_POSIX_PRIORITIZED_IO", SYSCONF, NOFLAGS, 618 _SC_PRIORITY_SCHEDULING, "_POSIX_PRIORITY_SCHEDULING", SYSCONF, NOFLAGS, 619 _SC_REALTIME_SIGNALS, "_POSIX_REALTIME_SIGNALS", SYSCONF, NOFLAGS, 620 _SC_SEMAPHORES, "_POSIX_SEMAPHORES", SYSCONF, NOFLAGS, 621 622 _SC_SHARED_MEMORY_OBJECTS, "_POSIX_SHARED_MEMORY_OBJECTS", 623 SYSCONF, NOFLAGS, 624 625 _SC_SYNCHRONIZED_IO, "_POSIX_SYNCHRONIZED_IO", SYSCONF, NOFLAGS, 626 _SC_TIMERS, "_POSIX_TIMERS", SYSCONF, NOFLAGS, 627 628 _SC_LOGIN_NAME_MAX, "LOGIN_NAME_MAX", SYSCONF, NOFLAGS, 629 630 _SC_THREAD_DESTRUCTOR_ITERATIONS, "PTHREAD_DESTRUCTOR_ITERATIONS", 631 SYSCONF, NOFLAGS, 632 633 _SC_THREAD_KEYS_MAX, "PTHREAD_KEYS_MAX", SYSCONF, NOFLAGS, 634 _SC_THREAD_STACK_MIN, "PTHREAD_STACK_MIN", SYSCONF, NOFLAGS, 635 _SC_THREAD_THREADS_MAX, "PTHREAD_THREADS_MAX", SYSCONF, NOFLAGS, 636 637 _SC_THREADS, "_POSIX_THREADS", SYSCONF, NOFLAGS, 638 639 _SC_THREAD_ATTR_STACKADDR, "POSIX_THREAD_ATTR_STACKADDR", 640 SYSCONF, NOFLAGS, 641 _SC_THREAD_ATTR_STACKADDR, "_POSIX_THREAD_ATTR_STACKADDR", 642 SYSCONF, NOFLAGS, 643 644 _SC_THREAD_ATTR_STACKSIZE, "POSIX_THREAD_ATTR_STACKSIZE", 645 SYSCONF, NOFLAGS, 646 _SC_THREAD_ATTR_STACKSIZE, "_POSIX_THREAD_ATTR_STACKSIZE", 647 SYSCONF, NOFLAGS, 648 649 _SC_THREAD_PRIORITY_SCHEDULING, "POSIX_THREAD_PRIORITY_SCHEDULING", 650 SYSCONF, NOFLAGS, 651 _SC_THREAD_PRIORITY_SCHEDULING, "_POSIX_THREAD_PRIORITY_SCHEDULING", 652 SYSCONF, NOFLAGS, 653 654 _SC_THREAD_PRIO_INHERIT, "POSIX_THREAD_PRIO_INHERIT", 655 SYSCONF, NOFLAGS, 656 _SC_THREAD_PRIO_INHERIT, "_POSIX_THREAD_PRIO_INHERIT", 657 SYSCONF, NOFLAGS, 658 659 _SC_THREAD_PRIO_PROTECT, "POSIX_THREAD_PRIO_PROTECT", 660 SYSCONF, NOFLAGS, 661 _SC_THREAD_PRIO_PROTECT, "_POSIX_THREAD_PRIO_PROTECT", 662 SYSCONF, NOFLAGS, 663 664 _SC_THREAD_PROCESS_SHARED, "POSIX_THREAD_PROCESS_SHARED", 665 SYSCONF, NOFLAGS, 666 _SC_THREAD_PROCESS_SHARED, "_POSIX_THREAD_PROCESS_SHARED", 667 SYSCONF, NOFLAGS, 668 669 _SC_THREAD_SAFE_FUNCTIONS, "POSIX_THREAD_SAFE_FUNCTIONS", 670 SYSCONF, NOFLAGS, 671 _SC_THREAD_SAFE_FUNCTIONS, "_POSIX_THREAD_SAFE_FUNCTIONS", 672 SYSCONF, NOFLAGS, 673 674 _SC_TTY_NAME_MAX, "TTY_NAME_MAX", SYSCONF, NOFLAGS, 675 _SC_XOPEN_REALTIME, "_XOPEN_REALTIME", SYSCONF, NOFLAGS, 676 _SC_XOPEN_REALTIME_THREADS, "_XOPEN_REALTIME_THREADS", SYSCONF, NOFLAGS, 677 678 /* 679 * Due to ambiguity in the standard we need 680 * to recognize both the underscored name 681 * and the non-underscored version in the 682 * following variables. 683 */ 684 _SC_XBS5_ILP32_OFF32, "XBS5_ILP32_OFF32", SYSCONF, NOFLAGS, 685 _SC_XBS5_ILP32_OFF32, "_XBS5_ILP32_OFF32", SYSCONF, NOFLAGS, 686 687 _SC_XBS5_ILP32_OFFBIG, "XBS5_ILP32_OFFBIG", SYSCONF, NOFLAGS, 688 _SC_XBS5_ILP32_OFFBIG, "_XBS5_ILP32_OFFBIG", SYSCONF, NOFLAGS, 689 690 _SC_XBS5_LP64_OFF64, "XBS5_LP64_OFF64", SYSCONF, NOFLAGS, 691 _SC_XBS5_LP64_OFF64, "_XBS5_LP64_OFF64", SYSCONF, NOFLAGS, 692 693 _SC_XBS5_LPBIG_OFFBIG, "XBS5_LPBIG_OFFBIG", SYSCONF, NOFLAGS, 694 _SC_XBS5_LPBIG_OFFBIG, "_XBS5_LPBIG_OFFBIG", SYSCONF, NOFLAGS, 695 696 /* 697 * UNIX 03 additions for sysconf() names, and names that are not in interfaces 698 */ 699 _SC_REGEXP, "_POSIX_REGEXP", SYSCONF, NOFLAGS, 700 _SC_SHELL, "_POSIX_SHELL", SYSCONF, NOFLAGS, 701 _SC_HOST_NAME_MAX, "HOST_NAME_MAX", SYSCONF, NOFLAGS, 702 _SC_READER_WRITER_LOCKS, "_POSIX_READER_WRITER_LOCKS", SYSCONF, NOFLAGS, 703 _SC_IPV6, "_POSIX_IPV6", SYSCONF, NOFLAGS, 704 _SC_RAW_SOCKETS, "_POSIX_RAW_SOCKETS", SYSCONF, NOFLAGS, 705 _SC_XOPEN_STREAMS, "_XOPEN_STREAMS", SYSCONF, NOFLAGS, 706 _SC_SYMLOOP_MAX, "SYMLOOP_MAX", SYSCONF, NOFLAGS, 707 _SC_2_PBS, "_POSIX2_PBS", SYSCONF, NOFLAGS, 708 _SC_2_PBS_ACCOUNTING, "_POSIX2_PBS_ACCOUNTING", SYSCONF, NOFLAGS, 709 _SC_2_PBS_CHECKPOINT, "_POSIX2_PBS_CHECKPOINT", SYSCONF, NOFLAGS, 710 _SC_2_PBS_LOCATE, "_POSIX2_PBS_LOCATE", SYSCONF, NOFLAGS, 711 _SC_2_PBS_MESSAGE, "_POSIX2_PBS_MESSAGE", SYSCONF, NOFLAGS, 712 _SC_2_PBS_TRACK, "_POSIX2_PBS_TRACK", SYSCONF, NOFLAGS, 713 714 _SC_ADVISORY_INFO, "_POSIX_ADVISORY_INFO", SYSCONF, NOFLAGS, 715 _SC_BARRIERS, "_POSIX_BARRIERS", SYSCONF, NOFLAGS, 716 _SC_CLOCK_SELECTION, "_POSIX_CLOCK_SELECTION", SYSCONF, NOFLAGS, 717 _SC_CPUTIME, "_POSIX_CPUTIME", SYSCONF, NOFLAGS, 718 _SC_MONOTONIC_CLOCK, "_POSIX_MONOTONIC_CLOCK", SYSCONF, NOFLAGS, 719 _SC_SPAWN, "_POSIX_SPAWN", SYSCONF, NOFLAGS, 720 _SC_SPIN_LOCKS, "_POSIX_SPIN_LOCKS", SYSCONF, NOFLAGS, 721 _SC_SPORADIC_SERVER, "_POSIX_SPORADIC_SERVER", SYSCONF, NOFLAGS, 722 _SC_SS_REPL_MAX, "_POSIX_SS_REPL_MAX", SYSCONF, NOFLAGS, 723 _SC_THREAD_CPUTIME, "_POSIX_THREAD_CPUTIME", SYSCONF, NOFLAGS, 724 _SC_THREAD_SPORADIC_SERVER, "_POSIX_THREAD_SPORADIC_SERVER", SYSCONF, 725 NOFLAGS, 726 _SC_TIMEOUTS, "_POSIX_TIMEOUTS", SYSCONF, NOFLAGS, 727 _SC_TRACE, "_POSIX_TRACE", SYSCONF, NOFLAGS, 728 _SC_TRACE_EVENT_FILTER, "_POSIX_TRACE_EVENT_FILTER", SYSCONF, NOFLAGS, 729 _SC_TRACE_EVENT_NAME_MAX, "_POSIX_TRACE_EVENT_NAME_MAX", SYSCONF, 730 NOFLAGS, 731 _SC_TRACE_INHERIT, "_POSIX_TRACE_INHERIT", SYSCONF, NOFLAGS, 732 _SC_TRACE_LOG, "_POSIX_TRACE_LOG", SYSCONF, NOFLAGS, 733 _SC_TRACE_NAME_MAX, "_POSIX_TRACE_NAME_MAX", SYSCONF, NOFLAGS, 734 _SC_TRACE_SYS_MAX, "_POSIX_TRACE_SYS_MAX", SYSCONF, NOFLAGS, 735 _SC_TRACE_USER_EVENT_MAX, "_POSIX_TRACE_USER_EVENT_MAX", SYSCONF, 736 NOFLAGS, 737 _SC_TYPED_MEMORY_OBJECTS, "_POSIX_TYPED_MEMORY_OBJECTS", SYSCONF, 738 NOFLAGS, 739 740 /* 741 * Due to an ambiguity in the specification, we need to recognize both 742 * the underscored POSIX name and the non-underscored name. In addition, 743 * we need to permit the use of the _V6_* environment names specified 744 * in unistd.h. 745 */ 746 _SC_V6_ILP32_OFF32, "_V6_ILP32_OFF32", SYSCONF, NOFLAGS, 747 _SC_V6_ILP32_OFF32, "_POSIX_V6_ILP32_OFF32", SYSCONF, NOFLAGS, 748 _SC_V6_ILP32_OFF32, "POSIX_V6_ILP32_OFF32", SYSCONF, NOFLAGS, 749 750 _SC_V6_ILP32_OFFBIG, "_V6_ILP32_OFFBIG", SYSCONF, NOFLAGS, 751 _SC_V6_ILP32_OFFBIG, "_POSIX_V6_ILP32_OFFBIG", SYSCONF, NOFLAGS, 752 _SC_V6_ILP32_OFFBIG, "POSIX_V6_ILP32_OFFBIG", SYSCONF, NOFLAGS, 753 754 _SC_V6_LP64_OFF64, "_V6_LP64_OFF64", SYSCONF, NOFLAGS, 755 _SC_V6_LP64_OFF64, "_POSIX_V6_LP64_OFF64", SYSCONF, NOFLAGS, 756 _SC_V6_LP64_OFF64, "POSIX_V6_LP64_OFF64", SYSCONF, NOFLAGS, 757 758 _SC_V6_LPBIG_OFFBIG, "_V6_LPBIG_OFFBIG", SYSCONF, NOFLAGS, 759 _SC_V6_LPBIG_OFFBIG, "_POSIX_V6_LPBIG_OFFBIG", SYSCONF, NOFLAGS, 760 _SC_V6_LPBIG_OFFBIG, "POSIX_V6_LPBIG_OFFBIG", SYSCONF, NOFLAGS, 761 /* 762 * System V Interface Definition 763 */ 764 _SC_NPROCESSORS_CONF, "NPROCESSORS_CONF", SYSCONF, NOFLAGS, 765 _SC_NPROCESSORS_MAX, "NPROCESSORS_MAX", SYSCONF, NOFLAGS, 766 _SC_NPROCESSORS_ONLN, "NPROCESSORS_ONLN", SYSCONF, NOFLAGS, 767 0, NULL, 0, 0 /* end of table */ 768 }; 769 770 771 /* 772 * Print usage message. 773 */ 774 static int 775 usage() 776 { 777 778 (void) fputs(gettext( 779 "usage:\tgetconf [-v specification] system_var\n" 780 "\tgetconf [-v specification] path_var pathname\n" 781 "\tgetconf -a\n"), stderr); 782 return (2); 783 } 784 785 786 static int 787 namecmp(const void *a, const void *b) 788 { 789 return (strcoll(((const struct sctab *)a)->name, 790 ((const struct sctab *)b)->name)); 791 } 792 793 794 static int 795 getconf(struct sctab *scp, int argc, char *name, char *file) 796 { 797 register size_t len; 798 register char *buffer; 799 long value; 800 801 switch (scp->type) { 802 case SELFCONF: 803 if (argc > 2) 804 return (usage()); 805 if (scp->flag & UNDEFINED || 806 (!(scp->flag&UNSIGNED_VALUE) && scp->value == -1)) { 807 /* DO NOT TRANSLATE */ 808 (void) printf("undefined\n"); 809 } else 810 if (scp->flag & UNSIGNED_VALUE) 811 (void) printf("%lu\n", scp->value); 812 else 813 (void) printf("%ld\n", scp->value); 814 break; 815 816 case SYSCONF: 817 if (argc > 2) 818 return (usage()); 819 errno = 0; 820 if (scp->flag & UNDEFINED || 821 (value = sysconf((int)scp->value)) == -1) { 822 if (errno == EINVAL) { 823 (void) fprintf(stderr, 824 gettext(INVAL_ARG), name); 825 return (1); 826 } else { 827 /* DO NOT TRANSLATE */ 828 (void) printf("undefined\n"); 829 return (0); 830 } 831 } else 832 (void) printf("%ld\n", value); 833 break; 834 835 case CONFSTR: 836 if (argc > 2) 837 return (usage()); 838 errno = 0; 839 len = confstr((int)scp->value, NULL, (size_t)0); 840 if (len == 0) { 841 if (errno == EINVAL) { 842 (void) fprintf(stderr, gettext(INVAL_ARG), 843 name); 844 return (1); 845 } else { 846 /* DO NOT TRANSLATE */ 847 (void) printf("undefined\n"); 848 return (0); 849 } 850 } 851 /* 852 * allocate space to store result of constr() into 853 */ 854 if ((buffer = malloc(len)) == NULL) { 855 (void) fprintf(stderr, 856 gettext("insufficient memory available")); 857 return (1); 858 } 859 860 assert(confstr((int)scp->value, buffer, len) != 0); 861 862 (void) printf("%s\n", buffer); 863 free(buffer); 864 break; 865 866 case PATHCONF: 867 if (argc != 3) 868 return (usage()); 869 errno = 0; 870 if ((value = pathconf(file, (int)scp->value)) == -1) { 871 if (errno == EINVAL || errno == 0) { 872 /* Does not support the association */ 873 /* DO NOT TRANSLATE */ 874 (void) printf("undefined\n"); 875 return (0); 876 } else { 877 /* Probably problems with the pathname itself */ 878 if (aflag) { 879 (void) printf("%s\n", file); 880 } else { 881 (void) printf("%s", file); 882 } 883 return (1); 884 } 885 } 886 (void) printf("%ld\n", value); 887 break; 888 } 889 return (0); 890 } 891 892 int 893 main(int argc, char **argv) 894 { 895 register struct sctab *scp; 896 int c; 897 int exstat = 0; 898 899 (void) setlocale(LC_ALL, ""); 900 #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */ 901 #define TEXT_DOMAIN "SYS_TEST" 902 #endif 903 (void) textdomain(TEXT_DOMAIN); 904 905 while ((c = getopt(argc, argv, "av:")) != -1) 906 switch (c) { 907 case 'a': 908 aflag = 1; 909 break; 910 case 'v': 911 /* 912 * Unix98 adds the -v option to allow 913 * programming 'specifications' to be 914 * indicated, for present purposes 915 * the specification isn't really 916 * doing anything of value, so for 917 * the moment getopt just processes the 918 * option value and argv[1] is adjusted. 919 * 920 * At some later date we might want to 921 * do specification processing at this 922 * point. 923 */ 924 break; 925 case '?': 926 return (usage()); 927 } 928 argc -= optind-1; 929 argv += optind-1; 930 931 if ((aflag && argc >= 2) || (!aflag && argc < 2)) 932 return (usage()); 933 if (aflag) { 934 935 #define TabStop 8 936 #define RightColumn 32 937 #define DefPathName "." 938 939 /* 940 * sort the table by the "name" field 941 * so we print it in sorted order 942 */ 943 qsort(&sctab[0], (sizeof (sctab) / 944 sizeof (struct sctab)) - 1, 945 sizeof (struct sctab), namecmp); 946 947 /* 948 * print all the known symbols and their values 949 */ 950 for (scp = &sctab[0]; scp->name != NULL; ++scp) { 951 int stat; 952 953 /* 954 * create 2 columns: 955 * variable name in the left column, 956 * value in the right column. 957 * The right column starts at a tab stop. 958 */ 959 (void) printf("%s:\t", scp->name); 960 961 c = strlen(scp->name) + 1; 962 c = (c+TabStop) / TabStop, c *= TabStop; 963 for (; c < RightColumn; c += TabStop) 964 (void) putchar('\t'); 965 966 /* 967 * for pathconf() related variables that require 968 * a pathname, use "." 969 */ 970 stat = getconf(scp, scp->type == PATHCONF ? 3 : 2, 971 scp->name, DefPathName); 972 973 exstat |= stat; 974 975 /* 976 * if stat != 0, then an error message was already 977 * printed in getconf(), 978 * so don't need to print one here 979 */ 980 } 981 } else { 982 983 /* 984 * find the name of the specified variable (argv[1]) 985 * and print its value. 986 */ 987 for (scp = &sctab[0]; scp->name != NULL; ++scp) 988 if (strcmp(argv[1], scp->name) == 0) { 989 exstat = getconf(scp, argc, argv[1], argv[2]); 990 break; 991 } 992 993 /* 994 * if at last entry in table, then the user specified 995 * variable is invalid 996 */ 997 if (scp->name == NULL) { 998 errno = EINVAL; 999 (void) fprintf(stderr, gettext(INVAL_ARG), argv[1]); 1000 return (1); 1001 } 1002 } 1003 return (exstat); 1004 } 1005