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.
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.
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]
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
28 * Copyright 1985, 1993 by Mortice Kern Systems Inc. All rights reserved.
33 * getconf -- POSIX.2 compatible utility to query configuration specific
35 * -- XPG4 support added June/93
37 * -- XPG5 support added Dec/97
39 * -- XPG6 support added May/2003
52 extern size_t confstr(int, char *, size_t);
56 #define INVAL_ARG "getconf: Invalid argument (%s)\n"
57 #define INVAL_PATHARG "getconf: Invalid argument (%s or %s)\n"
61 * The sctab.value field is defined to be a long.
62 * There are some values that are "unsigned long"; these values
63 * can be stored in a "long" field but when output, must be printed
64 * as an unsigned value. Thus, these values must have UNSIGNED_VALUE bit
65 * set in sctab.flag field.
67 * There are 2 different ways to indicate a symbol is undefined:
68 * 1) sctab.flag = UNDEFINED
69 * 2) or sctab.value = -1 (and if !UNDEFINED and !UNSIGNED_VALUE)
71 * There are a group of symbols (e.g CHAR_MIN, INT_MAX, INT_MIN, LONG_BIT ...)
72 * which we may set to -1 if they are not pre-defined in a system header file.
73 * This is used to indicate that these symbols are "undefined".
74 * We are assuming that these symbols cannot reasonably have a value of -1
75 * if they were defined in a system header file.
76 * (Unless of course -1 can be used to indicate "undefined" for that symbol)
82 enum { SELFCONF
, SYSCONF
, PATHCONF
, CONFSTR
} type
;
84 /* bit fields for sctab.flag member */
85 #define NOFLAGS 0 /* no special indicators */
86 #define UNDEFINED 1 /* value is known undefined at compile time */
87 #define UNSIGNED_VALUE 2 /* value is an unsigned */
90 * Some entries in this structure have both leading _ and non leading _
91 * versions for compatibility with various versions of the specifications.
92 * It is not expected that both forms will be required for new entries.
95 /* POSIX.2-1992 table 2-17 */
96 _POSIX2_BC_BASE_MAX
, "POSIX2_BC_BASE_MAX", SELFCONF
, NOFLAGS
,
97 _POSIX2_BC_BASE_MAX
, "_POSIX2_BC_BASE_MAX", SELFCONF
, NOFLAGS
,
98 _POSIX2_BC_DIM_MAX
, "POSIX2_BC_DIM_MAX", SELFCONF
, NOFLAGS
,
99 _POSIX2_BC_DIM_MAX
, "_POSIX2_BC_DIM_MAX", SELFCONF
, NOFLAGS
,
100 _POSIX2_BC_SCALE_MAX
, "POSIX2_BC_SCALE_MAX", SELFCONF
, NOFLAGS
,
101 _POSIX2_BC_SCALE_MAX
, "_POSIX2_BC_SCALE_MAX", SELFCONF
, NOFLAGS
,
102 _POSIX2_BC_STRING_MAX
, "POSIX2_BC_STRING_MAX", SELFCONF
, NOFLAGS
,
103 _POSIX2_BC_STRING_MAX
, "_POSIX2_BC_STRING_MAX", SELFCONF
, NOFLAGS
,
104 _POSIX2_COLL_WEIGHTS_MAX
, "POSIX2_COLL_WEIGHTS_MAX", SELFCONF
, NOFLAGS
,
105 _POSIX2_COLL_WEIGHTS_MAX
, "_POSIX2_COLL_WEIGHTS_MAX", SELFCONF
, NOFLAGS
,
106 _POSIX2_EXPR_NEST_MAX
, "POSIX2_EXPR_NEST_MAX", SELFCONF
, NOFLAGS
,
107 _POSIX2_EXPR_NEST_MAX
, "_POSIX2_EXPR_NEST_MAX", SELFCONF
, NOFLAGS
,
108 _POSIX2_LINE_MAX
, "POSIX2_LINE_MAX", SELFCONF
, NOFLAGS
,
109 _POSIX2_LINE_MAX
, "_POSIX2_LINE_MAX", SELFCONF
, NOFLAGS
,
110 _POSIX2_RE_DUP_MAX
, "POSIX2_RE_DUP_MAX", SELFCONF
, NOFLAGS
,
111 _POSIX2_RE_DUP_MAX
, "_POSIX2_RE_DUP_MAX", SELFCONF
, NOFLAGS
,
112 /* See limits.h section below for _POSIX_RE_DUP_MAX */
115 _POSIX_AIO_LISTIO_MAX
, "_POSIX_AIO_LISTIO_MAX", SELFCONF
, NOFLAGS
,
116 _POSIX_AIO_MAX
, "_POSIX_AIO_MAX", SELFCONF
, NOFLAGS
,
117 _POSIX_DELAYTIMER_MAX
, "_POSIX_DELAYTIMER_MAX", SELFCONF
, NOFLAGS
,
118 _POSIX_LOGIN_NAME_MAX
, "_POSIX_LOGIN_NAME_MAX", SELFCONF
, NOFLAGS
,
119 _POSIX_MQ_OPEN_MAX
, "_POSIX_MQ_OPEN_MAX", SELFCONF
, NOFLAGS
,
120 _POSIX_MQ_PRIO_MAX
, "_POSIX_MQ_PRIO_MAX", SELFCONF
, NOFLAGS
,
121 _POSIX_RTSIG_MAX
, "_POSIX_RTSIG_MAX", SELFCONF
, NOFLAGS
,
122 _POSIX_SEM_NSEMS_MAX
, "_POSIX_SEM_NSEMS_MAX", SELFCONF
, NOFLAGS
,
123 _POSIX_SEM_VALUE_MAX
, "_POSIX_SEM_VALUE_MAX", SELFCONF
, NOFLAGS
,
124 _POSIX_SIGQUEUE_MAX
, "_POSIX_SIGQUEUE_MAX", SELFCONF
, NOFLAGS
,
125 _POSIX_TTY_NAME_MAX
, "_POSIX_TTY_NAME_MAX", SELFCONF
, NOFLAGS
,
128 _POSIX_HOST_NAME_MAX
, "_POSIX_HOST_NAME_MAX", SELFCONF
, NOFLAGS
,
129 _POSIX_RE_DUP_MAX
, "_POSIX_RE_DUP_MAX", SELFCONF
, NOFLAGS
,
130 _POSIX_CLOCKRES_MIN
, "_POSIX_CLOCKRES_MIN", SELFCONF
, NOFLAGS
,
131 _POSIX_SYMLINK_MAX
, "_POSIX_SYMLINK_MAX", SELFCONF
, NOFLAGS
,
132 _POSIX_SYMLOOP_MAX
, "_POSIX_SYMLOOP_MAX", SELFCONF
, NOFLAGS
,
133 CHARCLASS_NAME_MAX
, "_POSIX2_CHARCLASS_NAME_MAX", SELFCONF
, NOFLAGS
,
135 /* POSIX.2-1992 table 2-17 */
136 _SC_2_VERSION
, "POSIX2_VERSION", SYSCONF
, NOFLAGS
,
137 _SC_2_VERSION
, "_POSIX2_VERSION", SYSCONF
, NOFLAGS
,
139 /* POSIX.2-1992 table 2-18 */
140 _SC_BC_BASE_MAX
, "BC_BASE_MAX", SYSCONF
, NOFLAGS
,
141 _SC_BC_DIM_MAX
, "BC_DIM_MAX", SYSCONF
, NOFLAGS
,
142 _SC_BC_SCALE_MAX
, "BC_SCALE_MAX", SYSCONF
, NOFLAGS
,
143 _SC_BC_STRING_MAX
, "BC_STRING_MAX", SYSCONF
, NOFLAGS
,
144 _SC_COLL_WEIGHTS_MAX
, "COLL_WEIGHTS_MAX", SYSCONF
, NOFLAGS
,
145 _SC_EXPR_NEST_MAX
, "EXPR_NEST_MAX", SYSCONF
, NOFLAGS
,
146 _SC_LINE_MAX
, "LINE_MAX", SYSCONF
, NOFLAGS
,
147 _SC_RE_DUP_MAX
, "RE_DUP_MAX", SYSCONF
, NOFLAGS
,
149 /* POSIX.2-1992 table 2-19 */
150 _SC_2_C_BIND
, "POSIX2_C_BIND", SYSCONF
, NOFLAGS
,
151 _SC_2_C_BIND
, "_POSIX2_C_BIND", SYSCONF
, NOFLAGS
,
152 _SC_2_C_DEV
, "POSIX2_C_DEV", SYSCONF
, NOFLAGS
,
153 _SC_2_C_DEV
, "_POSIX2_C_DEV", SYSCONF
, NOFLAGS
,
154 _SC_2_CHAR_TERM
, "POSIX2_CHAR_TERM", SYSCONF
, NOFLAGS
,
155 _SC_2_CHAR_TERM
, "_POSIX2_CHAR_TERM", SYSCONF
, NOFLAGS
,
156 _SC_2_FORT_DEV
, "POSIX2_FORT_DEV", SYSCONF
, NOFLAGS
,
157 _SC_2_FORT_DEV
, "_POSIX2_FORT_DEV", SYSCONF
, NOFLAGS
,
158 _SC_2_FORT_RUN
, "POSIX2_FORT_RUN", SYSCONF
, NOFLAGS
,
159 _SC_2_FORT_RUN
, "_POSIX2_FORT_RUN", SYSCONF
, NOFLAGS
,
160 _SC_2_LOCALEDEF
, "POSIX2_LOCALEDEF", SYSCONF
, NOFLAGS
,
161 _SC_2_LOCALEDEF
, "_POSIX2_LOCALEDEF", SYSCONF
, NOFLAGS
,
162 _SC_2_SW_DEV
, "POSIX2_SW_DEV", SYSCONF
, NOFLAGS
,
163 _SC_2_SW_DEV
, "_POSIX2_SW_DEV", SYSCONF
, NOFLAGS
,
164 _SC_2_UPE
, "POSIX2_UPE", SYSCONF
, NOFLAGS
,
165 _SC_2_UPE
, "_POSIX2_UPE", SYSCONF
, NOFLAGS
,
167 /* POSIX.1-1990 table 2-3 */
168 _POSIX_ARG_MAX
, "_POSIX_ARG_MAX", SELFCONF
, NOFLAGS
,
169 _POSIX_CHILD_MAX
, "_POSIX_CHILD_MAX", SELFCONF
, NOFLAGS
,
170 _POSIX_LINK_MAX
, "_POSIX_LINK_MAX", SELFCONF
, NOFLAGS
,
171 _POSIX_MAX_CANON
, "_POSIX_MAX_CANON", SELFCONF
, NOFLAGS
,
172 _POSIX_MAX_INPUT
, "_POSIX_MAX_INPUT", SELFCONF
, NOFLAGS
,
173 _POSIX_NAME_MAX
, "_POSIX_NAME_MAX", SELFCONF
, NOFLAGS
,
174 _POSIX_NGROUPS_MAX
, "_POSIX_NGROUPS_MAX", SELFCONF
, NOFLAGS
,
175 _POSIX_OPEN_MAX
, "_POSIX_OPEN_MAX", SELFCONF
, NOFLAGS
,
176 _POSIX_PATH_MAX
, "_POSIX_PATH_MAX", SELFCONF
, NOFLAGS
,
177 _POSIX_PIPE_BUF
, "_POSIX_PIPE_BUF", SELFCONF
, NOFLAGS
,
178 _POSIX_SSIZE_MAX
, "_POSIX_SSIZE_MAX", SELFCONF
, NOFLAGS
,
179 _POSIX_STREAM_MAX
, "_POSIX_STREAM_MAX", SELFCONF
, NOFLAGS
,
180 _POSIX_TIMER_MAX
, "_POSIX_TIMER_MAX", SELFCONF
, NOFLAGS
,
181 _POSIX_THREAD_DESTRUCTOR_ITERATIONS
,
182 "_POSIX_THREAD_DESTRUCTOR_ITERATIONS", SELFCONF
, NOFLAGS
,
183 _POSIX_THREAD_KEYS_MAX
,
184 "_POSIX_THREAD_KEYS_MAX", SELFCONF
, NOFLAGS
,
185 _POSIX_THREAD_THREADS_MAX
,
186 "_POSIX_THREAD_THREADS_MAX", SELFCONF
, NOFLAGS
,
187 _POSIX_TZNAME_MAX
, "_POSIX_TZNAME_MAX", SELFCONF
, NOFLAGS
,
189 /* POSIX.1-1990 table 4-2 */
190 _SC_ARG_MAX
, "ARG_MAX", SYSCONF
, NOFLAGS
,
191 _SC_CHILD_MAX
, "CHILD_MAX", SYSCONF
, NOFLAGS
,
192 _SC_CLK_TCK
, "CLK_TCK", SYSCONF
, NOFLAGS
,
193 _SC_JOB_CONTROL
, "_POSIX_JOB_CONTROL", SYSCONF
, NOFLAGS
,
194 _SC_NGROUPS_MAX
, "NGROUPS_MAX", SYSCONF
, NOFLAGS
,
195 _SC_OPEN_MAX
, "OPEN_MAX", SYSCONF
, NOFLAGS
,
196 _SC_SAVED_IDS
, "_POSIX_SAVED_IDS", SYSCONF
, NOFLAGS
,
197 _SC_STREAM_MAX
, "STREAM_MAX", SYSCONF
, NOFLAGS
,
198 _SC_TZNAME_MAX
, "TZNAME_MAX", SYSCONF
, NOFLAGS
,
199 _SC_VERSION
, "_POSIX_VERSION", SYSCONF
, NOFLAGS
,
201 /* pathconf() variables */
203 /* POSIX.1-1990 table 5-2 */
205 _PC_LINK_MAX
, "LINK_MAX", PATHCONF
, NOFLAGS
,
206 _PC_MAX_CANON
, "MAX_CANON", PATHCONF
, NOFLAGS
,
207 _PC_MAX_INPUT
, "MAX_INPUT", PATHCONF
, NOFLAGS
,
208 _PC_NAME_MAX
, "NAME_MAX", PATHCONF
, NOFLAGS
,
209 _PC_PATH_MAX
, "PATH_MAX", PATHCONF
, NOFLAGS
,
210 _PC_PIPE_BUF
, "PIPE_BUF", PATHCONF
, NOFLAGS
,
211 _PC_CHOWN_RESTRICTED
, "_POSIX_CHOWN_RESTRICTED", PATHCONF
, NOFLAGS
,
212 _PC_NO_TRUNC
, "_POSIX_NO_TRUNC", PATHCONF
, NOFLAGS
,
213 _PC_VDISABLE
, "_POSIX_VDISABLE", PATHCONF
, NOFLAGS
,
215 /* UNIX 98 additions */
217 _PC_ASYNC_IO
, "_POSIX_ASYNC_IO", PATHCONF
, NOFLAGS
,
218 _PC_PRIO_IO
, "_POSIX_PRIO_IO", PATHCONF
, NOFLAGS
,
219 _PC_SYNC_IO
, "_POSIX_SYNC_IO", PATHCONF
, NOFLAGS
,
221 /* Large File Summit name (UNIX 98) */
223 _PC_FILESIZEBITS
, "FILESIZEBITS", PATHCONF
, NOFLAGS
,
224 _PC_XATTR_ENABLED
, "XATTR_ENABLED", PATHCONF
, NOFLAGS
,
225 _PC_XATTR_EXISTS
, "XATTR_EXISTS", PATHCONF
, NOFLAGS
,
227 /* UNIX 03 Additions */
229 /* Advisory Information (ADV) */
230 _PC_ALLOC_SIZE_MIN
, "POSIX_ALLOC_SIZE_MIN", PATHCONF
, NOFLAGS
,
231 _PC_REC_INCR_XFER_SIZE
, "POSIX_REC_INCR_XFER_SIZE", PATHCONF
, NOFLAGS
,
232 _PC_REC_MAX_XFER_SIZE
, "POSIX_REC_MAX_XFER_SIZE", PATHCONF
, NOFLAGS
,
233 _PC_REC_MIN_XFER_SIZE
, "POSIX_REC_MIN_XFER_SIZE", PATHCONF
, NOFLAGS
,
234 _PC_REC_XFER_ALIGN
, "POSIX_REC_XFER_ALIGN", PATHCONF
, NOFLAGS
,
236 _PC_2_SYMLINKS
, "POSIX2_SYMLINKS", PATHCONF
, NOFLAGS
,
237 _PC_SYMLINK_MAX
, "SYMLINK_MAX", PATHCONF
, NOFLAGS
,
239 _PC_ACL_ENABLED
, "ACL_ENABLED", PATHCONF
, NOFLAGS
,
240 _PC_MIN_HOLE_SIZE
, "MIN_HOLE_SIZE", PATHCONF
, NOFLAGS
,
241 _PC_SATTR_ENABLED
, "SATTR_ENABLED", PATHCONF
, NOFLAGS
,
242 _PC_SATTR_EXISTS
, "SATTR_EXISTS", PATHCONF
, NOFLAGS
,
244 /* UNIX 08 additions */
246 _PC_TIMESTAMP_RESOLUTION
, "_POSIX_TIMESTAMP_RESOLUTION",
249 /* confstr() variables */
251 /* POSIX.2-1992 description of getconf utility */
252 _CS_PATH
, "PATH", CONFSTR
, NOFLAGS
,
254 /* POSIX.2-1992 table B-18 */
255 _CS_PATH
, "CS_PATH", CONFSTR
, NOFLAGS
,
256 _CS_PATH
, "_CS_PATH", CONFSTR
, NOFLAGS
,
258 /* command names for large file configuration information */
259 /* large file compilation environment configuration */
261 _CS_LFS_CFLAGS
, "LFS_CFLAGS", CONFSTR
, NOFLAGS
,
262 _CS_LFS_LDFLAGS
, "LFS_LDFLAGS", CONFSTR
, NOFLAGS
,
263 _CS_LFS_LIBS
, "LFS_LIBS", CONFSTR
, NOFLAGS
,
264 _CS_LFS_LINTFLAGS
, "LFS_LINTFLAGS", CONFSTR
, NOFLAGS
,
266 /* transitional large file interface configuration */
268 _CS_LFS64_CFLAGS
, "LFS64_CFLAGS", CONFSTR
, NOFLAGS
,
269 _CS_LFS64_LDFLAGS
, "LFS64_LDFLAGS", CONFSTR
, NOFLAGS
,
270 _CS_LFS64_LIBS
, "LFS64_LIBS", CONFSTR
, NOFLAGS
,
271 _CS_LFS64_LINTFLAGS
, "LFS64_LINTFLAGS", CONFSTR
, NOFLAGS
,
275 * confstr additions, these support
276 * programming specifications/environments.
278 * Unfortunately there is some uncertainty with
279 * the standard at this point about the constant
280 * name, thus we need to recognize BOTH with and
281 * without the initial underscore.
283 _CS_XBS5_ILP32_OFF32_CFLAGS
, "XBS5_ILP32_OFF32_CFLAGS",
285 _CS_XBS5_ILP32_OFF32_CFLAGS
, "_XBS5_ILP32_OFF32_CFLAGS",
288 _CS_XBS5_ILP32_OFF32_LDFLAGS
, "XBS5_ILP32_OFF32_LDFLAGS",
290 _CS_XBS5_ILP32_OFF32_LDFLAGS
, "_XBS5_ILP32_OFF32_LDFLAGS",
293 _CS_XBS5_ILP32_OFF32_LIBS
, "XBS5_ILP32_OFF32_LIBS",
295 _CS_XBS5_ILP32_OFF32_LIBS
, "_XBS5_ILP32_OFF32_LIBS",
298 _CS_XBS5_ILP32_OFF32_LINTFLAGS
, "XBS5_ILP32_OFF32_LINTFLAGS",
300 _CS_XBS5_ILP32_OFF32_LINTFLAGS
, "_XBS5_ILP32_OFF32_LINTFLAGS",
303 _CS_XBS5_ILP32_OFFBIG_CFLAGS
, "XBS5_ILP32_OFFBIG_CFLAGS",
305 _CS_XBS5_ILP32_OFFBIG_CFLAGS
, "_XBS5_ILP32_OFFBIG_CFLAGS",
308 _CS_XBS5_ILP32_OFFBIG_LDFLAGS
, "XBS5_ILP32_OFFBIG_LDFLAGS",
310 _CS_XBS5_ILP32_OFFBIG_LDFLAGS
, "_XBS5_ILP32_OFFBIG_LDFLAGS",
313 _CS_XBS5_ILP32_OFFBIG_LIBS
, "XBS5_ILP32_OFFBIG_LIBS",
315 _CS_XBS5_ILP32_OFFBIG_LIBS
, "_XBS5_ILP32_OFFBIG_LIBS",
318 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
, "XBS5_ILP32_OFFBIG_LINTFLAGS",
320 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
, "_XBS5_ILP32_OFFBIG_LINTFLAGS",
323 _CS_XBS5_LP64_OFF64_CFLAGS
, "XBS5_LP64_OFF64_CFLAGS",
325 _CS_XBS5_LP64_OFF64_CFLAGS
, "_XBS5_LP64_OFF64_CFLAGS",
328 _CS_XBS5_LP64_OFF64_LDFLAGS
, "XBS5_LP64_OFF64_LDFLAGS",
330 _CS_XBS5_LP64_OFF64_LDFLAGS
, "_XBS5_LP64_OFF64_LDFLAGS",
333 _CS_XBS5_LP64_OFF64_LIBS
, "XBS5_LP64_OFF64_LIBS",
335 _CS_XBS5_LP64_OFF64_LIBS
, "_XBS5_LP64_OFF64_LIBS",
338 _CS_XBS5_LP64_OFF64_LINTFLAGS
, "XBS5_LP64_OFF64_LINTFLAGS",
340 _CS_XBS5_LP64_OFF64_LINTFLAGS
, "_XBS5_LP64_OFF64_LINTFLAGS",
343 _CS_XBS5_LPBIG_OFFBIG_CFLAGS
, "XBS5_LPBIG_OFFBIG_CFLAGS",
345 _CS_XBS5_LPBIG_OFFBIG_CFLAGS
, "_XBS5_LPBIG_OFFBIG_CFLAGS",
348 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
, "XBS5_LPBIG_OFFBIG_LDFLAGS",
350 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
, "_XBS5_LPBIG_OFFBIG_LDFLAGS",
353 _CS_XBS5_LPBIG_OFFBIG_LIBS
, "XBS5_LPBIG_OFFBIG_LIBS",
355 _CS_XBS5_LPBIG_OFFBIG_LIBS
, "_XBS5_LPBIG_OFFBIG_LIBS",
358 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
, "XBS5_LPBIG_OFFBIG_LINTFLAGS",
360 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
, "_XBS5_LPBIG_OFFBIG_LINTFLAGS",
364 * UNIX 03 confstr() additions for compilation environments
366 _CS_POSIX_V6_ILP32_OFF32_CFLAGS
, "POSIX_V6_ILP32_OFF32_CFLAGS",
368 _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
, "POSIX_V6_ILP32_OFF32_LDFLAGS",
370 _CS_POSIX_V6_ILP32_OFF32_LIBS
, "POSIX_V6_ILP32_OFF32_LIBS",
372 _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
, "POSIX_V6_ILP32_OFFBIG_CFLAGS",
374 _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
, "POSIX_V6_ILP32_OFFBIG_LDFLAGS",
376 _CS_POSIX_V6_ILP32_OFFBIG_LIBS
, "POSIX_V6_ILP32_OFFBIG_LIBS",
378 _CS_POSIX_V6_LP64_OFF64_CFLAGS
, "POSIX_V6_LP64_OFF64_CFLAGS",
380 _CS_POSIX_V6_LP64_OFF64_LDFLAGS
, "POSIX_V6_LP64_OFF64_LDFLAGS",
382 _CS_POSIX_V6_LP64_OFF64_LIBS
, "POSIX_V6_LP64_OFF64_LIBS",
384 _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
, "POSIX_V6_LPBIG_OFFBIG_CFLAGS",
386 _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
, "POSIX_V6_LPBIG_OFFBIG_LDFLAGS",
388 _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
, "POSIX_V6_LPBIG_OFFBIG_LIBS",
390 _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
, "POSIX_V6_WIDTH_RESTRICTED_ENVS",
392 /* End of UNIX 03 compilation environments */
394 #ifdef _SC_2_C_VERSION /* POSIX.2 table B-4 */
395 _SC_2_C_VERSION
, "_POSIX2_C_VERSION", SYSCONF
, NOFLAGS
,
397 _POSIX2_C_VERSION
, "_POSIX2_C_VERSION", SELFCONF
, NOFLAGS
,
401 * XPG4 support BEGINS
404 #ifndef CHARCLASS_NAME_MAX
405 #define CHARCLASS_NAME_MAX -1
432 #define MB_LEN_MAX -1
441 #define NL_LANGMAX -1
450 #define NL_TEXTMAX -1
476 #define _XOPEN_XPG2 -1
479 #define _XOPEN_XPG3 -1
482 #define _XOPEN_XPG4 -1
486 * the following are values that we should find in <limits.h>
487 * so we use SELFCONF here.
492 CHARCLASS_NAME_MAX
, "CHARCLASS_NAME_MAX", SELFCONF
, NOFLAGS
,
493 SSIZE_MAX
, "SSIZE_MAX", SELFCONF
, NOFLAGS
,
496 CHAR_BIT
, "CHAR_BIT", SELFCONF
, NOFLAGS
,
497 CHAR_MAX
, "CHAR_MAX", SELFCONF
, NOFLAGS
,
498 CHAR_MIN
, "CHAR_MIN", SELFCONF
, NOFLAGS
,
499 INT_MAX
, "INT_MAX", SELFCONF
, NOFLAGS
,
500 INT_MIN
, "INT_MIN", SELFCONF
, NOFLAGS
,
501 LONG_BIT
, "LONG_BIT", SELFCONF
, NOFLAGS
,
502 LONG_MAX
, "LONG_MAX", SELFCONF
, NOFLAGS
,
503 LONG_MIN
, "LONG_MIN", SELFCONF
, NOFLAGS
,
504 MB_LEN_MAX
, "MB_LEN_MAX", SELFCONF
, NOFLAGS
,
505 NL_NMAX
, "NL_NMAX", SELFCONF
, NOFLAGS
,
506 NL_ARGMAX
, "NL_ARGMAX", SELFCONF
, NOFLAGS
,
507 NL_LANGMAX
, "NL_LANGMAX", SELFCONF
, NOFLAGS
,
508 NL_MSGMAX
, "NL_MSGMAX", SELFCONF
, NOFLAGS
,
509 NL_SETMAX
, "NL_SETMAX", SELFCONF
, NOFLAGS
,
510 NL_TEXTMAX
, "NL_TEXTMAX", SELFCONF
, NOFLAGS
,
511 NZERO
, "NZERO", SELFCONF
, NOFLAGS
,
512 SCHAR_MAX
, "SCHAR_MAX", SELFCONF
, NOFLAGS
,
513 SCHAR_MIN
, "SCHAR_MIN", SELFCONF
, NOFLAGS
,
514 SHRT_MAX
, "SHRT_MAX", SELFCONF
, NOFLAGS
,
515 SHRT_MIN
, "SHRT_MIN", SELFCONF
, NOFLAGS
,
516 TMP_MAX
, "TMP_MAX", SELFCONF
, NOFLAGS
,
519 * for the unsigned maximums, we cannot rely on the value -1
520 * to indicate "undefined".
523 0, "UCHAR_MAX", SELFCONF
, UNDEFINED
,
525 (long)UCHAR_MAX
, "UCHAR_MAX", SELFCONF
, UNSIGNED_VALUE
,
526 #endif /* UCHAR_MAX */
528 0, "UINT_MAX", SELFCONF
, UNDEFINED
,
530 (long)UINT_MAX
, "UINT_MAX", SELFCONF
, UNSIGNED_VALUE
,
531 #endif /* UINT_MAX */
533 0, "ULONG_MAX", SELFCONF
, UNDEFINED
,
535 (long)ULONG_MAX
, "ULONG_MAX", SELFCONF
, UNSIGNED_VALUE
,
536 #endif /* ULONG_MAX */
538 0, "USHRT_MAX", SELFCONF
, UNDEFINED
,
540 (long)USHRT_MAX
, "USHRT_MAX", SELFCONF
, UNSIGNED_VALUE
,
541 #endif /* USHRT_MAX */
543 0, "SIZE_MAX", SELFCONF
, UNDEFINED
,
545 (long)SIZE_MAX
, "SIZE_MAX", SELFCONF
, UNSIGNED_VALUE
,
546 #endif /* SIZE_MAX */
548 WORD_BIT
, "WORD_BIT", SELFCONF
, NOFLAGS
,
551 _XOPEN_IOV_MAX
, "_XOPEN_IOV_MAX", SELFCONF
, NOFLAGS
,
554 _XOPEN_NAME_MAX
, "_XOPEN_NAME_MAX", SELFCONF
, NOFLAGS
,
555 _XOPEN_PATH_MAX
, "_XOPEN_PATH_MAX", SELFCONF
, NOFLAGS
,
558 * The following are defined via sysconf(). These are considered
559 * an extension to sysconf().
560 * The -0 is needed if _XOPEN_XPG? is defined to be an empty string.
562 _XOPEN_XPG2
-0, "_XOPEN_XPG2", SELFCONF
, NOFLAGS
,
563 _XOPEN_XPG3
-0, "_XOPEN_XPG3", SELFCONF
, NOFLAGS
,
564 _XOPEN_XPG4
-0, "_XOPEN_XPG4", SELFCONF
, NOFLAGS
,
567 * The following should be provided by sysconf() (e.g use SYSCONF),
568 * so we look for the appropriate _SC_* symbol in <unistd.h>.
569 * If it is not defined, then we use SELFCONF with the value of -1.
571 _SC_XOPEN_VERSION
, "_XOPEN_VERSION", SYSCONF
, NOFLAGS
,
572 _SC_XOPEN_XCU_VERSION
, "_XOPEN_XCU_VERSION", SYSCONF
, NOFLAGS
,
573 _SC_XOPEN_CRYPT
, "_XOPEN_CRYPT", SYSCONF
, NOFLAGS
,
574 _SC_XOPEN_ENH_I18N
, "_XOPEN_ENH_I18N", SYSCONF
, NOFLAGS
,
575 _SC_XOPEN_SHM
, "_XOPEN_SHM", SYSCONF
, NOFLAGS
,
581 /* XPG4, Version 2 support */
583 _SC_ATEXIT_MAX
, "ATEXIT_MAX", SYSCONF
, NOFLAGS
,
584 _SC_PAGESIZE
, "PAGESIZE", SYSCONF
, NOFLAGS
,
585 _SC_PAGE_SIZE
, "PAGE_SIZE", SYSCONF
, NOFLAGS
,
586 _SC_XOPEN_UNIX
, "_XOPEN_UNIX", SYSCONF
, NOFLAGS
,
587 _SC_IOV_MAX
, "IOV_MAX", SYSCONF
, NOFLAGS
,
590 * UNIX 98 - XPG5 additions
592 _SC_XOPEN_LEGACY
, "_XOPEN_LEGACY", SYSCONF
, NOFLAGS
,
593 _SC_PASS_MAX
, "PASS_MAX", SYSCONF
, NOFLAGS
,
594 _SC_AIO_LISTIO_MAX
, "AIO_LISTIO_MAX", SYSCONF
, NOFLAGS
,
595 _SC_AIO_MAX
, "AIO_MAX", SYSCONF
, NOFLAGS
,
596 _SC_AIO_PRIO_DELTA_MAX
, "AIO_PRIO_DELTA_MAX", SYSCONF
, NOFLAGS
,
597 _SC_DELAYTIMER_MAX
, "DELAYTIMER_MAX", SYSCONF
, NOFLAGS
,
598 _SC_MQ_OPEN_MAX
, "MQ_OPEN_MAX", SYSCONF
, NOFLAGS
,
599 _SC_MQ_PRIO_MAX
, "MQ_PRIO_MAX", SYSCONF
, NOFLAGS
,
600 _SC_RTSIG_MAX
, "RTSIG_MAX", SYSCONF
, NOFLAGS
,
601 _SC_SEM_NSEMS_MAX
, "SEM_NSEMS_MAX", SYSCONF
, NOFLAGS
,
602 _SC_SEM_VALUE_MAX
, "SEM_VALUE_MAX", SYSCONF
, NOFLAGS
,
603 _SC_SIGQUEUE_MAX
, "SIGQUEUE_MAX", SYSCONF
, NOFLAGS
,
604 _SC_TIMER_MAX
, "TIMER_MAX", SYSCONF
, NOFLAGS
,
606 _SC_ASYNCHRONOUS_IO
, "_POSIX_ASYNCHRONOUS_IO", SYSCONF
, NOFLAGS
,
607 _SC_FSYNC
, "_POSIX_FSYNC", SYSCONF
, NOFLAGS
,
608 _SC_MAPPED_FILES
, "_POSIX_MAPPED_FILES", SYSCONF
, NOFLAGS
,
609 _SC_MEMLOCK
, "_POSIX_MEMLOCK", SYSCONF
, NOFLAGS
,
610 _SC_MEMLOCK_RANGE
, "_POSIX_MEMLOCK_RANGE", SYSCONF
, NOFLAGS
,
611 _SC_MEMORY_PROTECTION
, "_POSIX_MEMORY_PROTECTION", SYSCONF
, NOFLAGS
,
612 _SC_MESSAGE_PASSING
, "_POSIX_MESSAGE_PASSING", SYSCONF
, NOFLAGS
,
613 _SC_PRIORITIZED_IO
, "_POSIX_PRIORITIZED_IO", SYSCONF
, NOFLAGS
,
614 _SC_PRIORITY_SCHEDULING
, "_POSIX_PRIORITY_SCHEDULING", SYSCONF
, NOFLAGS
,
615 _SC_REALTIME_SIGNALS
, "_POSIX_REALTIME_SIGNALS", SYSCONF
, NOFLAGS
,
616 _SC_SEMAPHORES
, "_POSIX_SEMAPHORES", SYSCONF
, NOFLAGS
,
618 _SC_SHARED_MEMORY_OBJECTS
, "_POSIX_SHARED_MEMORY_OBJECTS",
621 _SC_SYNCHRONIZED_IO
, "_POSIX_SYNCHRONIZED_IO", SYSCONF
, NOFLAGS
,
622 _SC_TIMERS
, "_POSIX_TIMERS", SYSCONF
, NOFLAGS
,
624 _SC_LOGIN_NAME_MAX
, "LOGIN_NAME_MAX", SYSCONF
, NOFLAGS
,
626 _SC_THREAD_DESTRUCTOR_ITERATIONS
, "PTHREAD_DESTRUCTOR_ITERATIONS",
629 _SC_THREAD_KEYS_MAX
, "PTHREAD_KEYS_MAX", SYSCONF
, NOFLAGS
,
630 _SC_THREAD_STACK_MIN
, "PTHREAD_STACK_MIN", SYSCONF
, NOFLAGS
,
631 _SC_THREAD_THREADS_MAX
, "PTHREAD_THREADS_MAX", SYSCONF
, NOFLAGS
,
633 _SC_THREADS
, "_POSIX_THREADS", SYSCONF
, NOFLAGS
,
635 _SC_THREAD_ATTR_STACKADDR
, "POSIX_THREAD_ATTR_STACKADDR",
637 _SC_THREAD_ATTR_STACKADDR
, "_POSIX_THREAD_ATTR_STACKADDR",
640 _SC_THREAD_ATTR_STACKSIZE
, "POSIX_THREAD_ATTR_STACKSIZE",
642 _SC_THREAD_ATTR_STACKSIZE
, "_POSIX_THREAD_ATTR_STACKSIZE",
645 _SC_THREAD_PRIORITY_SCHEDULING
, "POSIX_THREAD_PRIORITY_SCHEDULING",
647 _SC_THREAD_PRIORITY_SCHEDULING
, "_POSIX_THREAD_PRIORITY_SCHEDULING",
650 _SC_THREAD_PRIO_INHERIT
, "POSIX_THREAD_PRIO_INHERIT",
652 _SC_THREAD_PRIO_INHERIT
, "_POSIX_THREAD_PRIO_INHERIT",
655 _SC_THREAD_PRIO_PROTECT
, "POSIX_THREAD_PRIO_PROTECT",
657 _SC_THREAD_PRIO_PROTECT
, "_POSIX_THREAD_PRIO_PROTECT",
660 _SC_THREAD_PROCESS_SHARED
, "POSIX_THREAD_PROCESS_SHARED",
662 _SC_THREAD_PROCESS_SHARED
, "_POSIX_THREAD_PROCESS_SHARED",
665 _SC_THREAD_SAFE_FUNCTIONS
, "POSIX_THREAD_SAFE_FUNCTIONS",
667 _SC_THREAD_SAFE_FUNCTIONS
, "_POSIX_THREAD_SAFE_FUNCTIONS",
670 _SC_TTY_NAME_MAX
, "TTY_NAME_MAX", SYSCONF
, NOFLAGS
,
671 _SC_XOPEN_REALTIME
, "_XOPEN_REALTIME", SYSCONF
, NOFLAGS
,
672 _SC_XOPEN_REALTIME_THREADS
, "_XOPEN_REALTIME_THREADS", SYSCONF
, NOFLAGS
,
675 * Due to ambiguity in the standard we need
676 * to recognize both the underscored name
677 * and the non-underscored version in the
678 * following variables.
680 _SC_XBS5_ILP32_OFF32
, "XBS5_ILP32_OFF32", SYSCONF
, NOFLAGS
,
681 _SC_XBS5_ILP32_OFF32
, "_XBS5_ILP32_OFF32", SYSCONF
, NOFLAGS
,
683 _SC_XBS5_ILP32_OFFBIG
, "XBS5_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
684 _SC_XBS5_ILP32_OFFBIG
, "_XBS5_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
686 _SC_XBS5_LP64_OFF64
, "XBS5_LP64_OFF64", SYSCONF
, NOFLAGS
,
687 _SC_XBS5_LP64_OFF64
, "_XBS5_LP64_OFF64", SYSCONF
, NOFLAGS
,
689 _SC_XBS5_LPBIG_OFFBIG
, "XBS5_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
690 _SC_XBS5_LPBIG_OFFBIG
, "_XBS5_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
693 * UNIX 03 additions for sysconf() names, and names that are not in interfaces
695 _SC_REGEXP
, "_POSIX_REGEXP", SYSCONF
, NOFLAGS
,
696 _SC_SHELL
, "_POSIX_SHELL", SYSCONF
, NOFLAGS
,
697 _SC_HOST_NAME_MAX
, "HOST_NAME_MAX", SYSCONF
, NOFLAGS
,
698 _SC_READER_WRITER_LOCKS
, "_POSIX_READER_WRITER_LOCKS", SYSCONF
, NOFLAGS
,
699 _SC_IPV6
, "_POSIX_IPV6", SYSCONF
, NOFLAGS
,
700 _SC_RAW_SOCKETS
, "_POSIX_RAW_SOCKETS", SYSCONF
, NOFLAGS
,
701 _SC_XOPEN_STREAMS
, "_XOPEN_STREAMS", SYSCONF
, NOFLAGS
,
702 _SC_SYMLOOP_MAX
, "SYMLOOP_MAX", SYSCONF
, NOFLAGS
,
703 _SC_2_PBS
, "_POSIX2_PBS", SYSCONF
, NOFLAGS
,
704 _SC_2_PBS_ACCOUNTING
, "_POSIX2_PBS_ACCOUNTING", SYSCONF
, NOFLAGS
,
705 _SC_2_PBS_CHECKPOINT
, "_POSIX2_PBS_CHECKPOINT", SYSCONF
, NOFLAGS
,
706 _SC_2_PBS_LOCATE
, "_POSIX2_PBS_LOCATE", SYSCONF
, NOFLAGS
,
707 _SC_2_PBS_MESSAGE
, "_POSIX2_PBS_MESSAGE", SYSCONF
, NOFLAGS
,
708 _SC_2_PBS_TRACK
, "_POSIX2_PBS_TRACK", SYSCONF
, NOFLAGS
,
710 _SC_ADVISORY_INFO
, "_POSIX_ADVISORY_INFO", SYSCONF
, NOFLAGS
,
711 _SC_BARRIERS
, "_POSIX_BARRIERS", SYSCONF
, NOFLAGS
,
712 _SC_CLOCK_SELECTION
, "_POSIX_CLOCK_SELECTION", SYSCONF
, NOFLAGS
,
713 _SC_CPUTIME
, "_POSIX_CPUTIME", SYSCONF
, NOFLAGS
,
714 _SC_MONOTONIC_CLOCK
, "_POSIX_MONOTONIC_CLOCK", SYSCONF
, NOFLAGS
,
715 _SC_SPAWN
, "_POSIX_SPAWN", SYSCONF
, NOFLAGS
,
716 _SC_SPIN_LOCKS
, "_POSIX_SPIN_LOCKS", SYSCONF
, NOFLAGS
,
717 _SC_SPORADIC_SERVER
, "_POSIX_SPORADIC_SERVER", SYSCONF
, NOFLAGS
,
718 _SC_SS_REPL_MAX
, "_POSIX_SS_REPL_MAX", SYSCONF
, NOFLAGS
,
719 _SC_THREAD_CPUTIME
, "_POSIX_THREAD_CPUTIME", SYSCONF
, NOFLAGS
,
720 _SC_THREAD_SPORADIC_SERVER
, "_POSIX_THREAD_SPORADIC_SERVER", SYSCONF
,
722 _SC_TIMEOUTS
, "_POSIX_TIMEOUTS", SYSCONF
, NOFLAGS
,
723 _SC_TRACE
, "_POSIX_TRACE", SYSCONF
, NOFLAGS
,
724 _SC_TRACE_EVENT_FILTER
, "_POSIX_TRACE_EVENT_FILTER", SYSCONF
, NOFLAGS
,
725 _SC_TRACE_EVENT_NAME_MAX
, "_POSIX_TRACE_EVENT_NAME_MAX", SYSCONF
,
727 _SC_TRACE_INHERIT
, "_POSIX_TRACE_INHERIT", SYSCONF
, NOFLAGS
,
728 _SC_TRACE_LOG
, "_POSIX_TRACE_LOG", SYSCONF
, NOFLAGS
,
729 _SC_TRACE_NAME_MAX
, "_POSIX_TRACE_NAME_MAX", SYSCONF
, NOFLAGS
,
730 _SC_TRACE_SYS_MAX
, "_POSIX_TRACE_SYS_MAX", SYSCONF
, NOFLAGS
,
731 _SC_TRACE_USER_EVENT_MAX
, "_POSIX_TRACE_USER_EVENT_MAX", SYSCONF
,
733 _SC_TYPED_MEMORY_OBJECTS
, "_POSIX_TYPED_MEMORY_OBJECTS", SYSCONF
,
737 * Due to an ambiguity in the specification, we need to recognize both
738 * the underscored POSIX name and the non-underscored name. In addition,
739 * we need to permit the use of the _V6_* environment names specified
742 _SC_V6_ILP32_OFF32
, "_V6_ILP32_OFF32", SYSCONF
, NOFLAGS
,
743 _SC_V6_ILP32_OFF32
, "_POSIX_V6_ILP32_OFF32", SYSCONF
, NOFLAGS
,
744 _SC_V6_ILP32_OFF32
, "POSIX_V6_ILP32_OFF32", SYSCONF
, NOFLAGS
,
746 _SC_V6_ILP32_OFFBIG
, "_V6_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
747 _SC_V6_ILP32_OFFBIG
, "_POSIX_V6_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
748 _SC_V6_ILP32_OFFBIG
, "POSIX_V6_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
750 _SC_V6_LP64_OFF64
, "_V6_LP64_OFF64", SYSCONF
, NOFLAGS
,
751 _SC_V6_LP64_OFF64
, "_POSIX_V6_LP64_OFF64", SYSCONF
, NOFLAGS
,
752 _SC_V6_LP64_OFF64
, "POSIX_V6_LP64_OFF64", SYSCONF
, NOFLAGS
,
754 _SC_V6_LPBIG_OFFBIG
, "_V6_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
755 _SC_V6_LPBIG_OFFBIG
, "_POSIX_V6_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
756 _SC_V6_LPBIG_OFFBIG
, "POSIX_V6_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
758 * System V Interface Definition
760 _SC_NPROCESSORS_CONF
, "NPROCESSORS_CONF", SYSCONF
, NOFLAGS
,
761 _SC_NPROCESSORS_MAX
, "NPROCESSORS_MAX", SYSCONF
, NOFLAGS
,
762 _SC_NPROCESSORS_ONLN
, "NPROCESSORS_ONLN", SYSCONF
, NOFLAGS
,
763 0, NULL
, 0, 0 /* end of table */
768 * Print usage message.
774 (void) fputs(gettext(
775 "usage:\tgetconf [-v specification] system_var\n"
776 "\tgetconf [-v specification] path_var pathname\n"
777 "\tgetconf -a\n"), stderr
);
783 namecmp(const void *a
, const void *b
)
785 return (strcoll(((const struct sctab
*)a
)->name
,
786 ((const struct sctab
*)b
)->name
));
791 getconf(struct sctab
*scp
, int argc
, char *name
, char *file
)
794 register char *buffer
;
801 if (scp
->flag
& UNDEFINED
||
802 (!(scp
->flag
&UNSIGNED_VALUE
) && scp
->value
== -1)) {
803 /* DO NOT TRANSLATE */
804 (void) printf("undefined\n");
806 if (scp
->flag
& UNSIGNED_VALUE
)
807 (void) printf("%lu\n", scp
->value
);
809 (void) printf("%ld\n", scp
->value
);
816 if (scp
->flag
& UNDEFINED
||
817 (value
= sysconf((int)scp
->value
)) == -1) {
818 if (errno
== EINVAL
) {
819 (void) fprintf(stderr
,
820 gettext(INVAL_ARG
), name
);
823 /* DO NOT TRANSLATE */
824 (void) printf("undefined\n");
828 (void) printf("%ld\n", value
);
835 len
= confstr((int)scp
->value
, NULL
, (size_t)0);
837 if (errno
== EINVAL
) {
838 (void) fprintf(stderr
, gettext(INVAL_ARG
),
842 /* DO NOT TRANSLATE */
843 (void) printf("undefined\n");
848 * allocate space to store result of constr() into
850 if ((buffer
= malloc(len
)) == NULL
) {
851 (void) fprintf(stderr
,
852 gettext("insufficient memory available"));
856 assert(confstr((int)scp
->value
, buffer
, len
) != 0);
858 (void) printf("%s\n", buffer
);
866 if ((value
= pathconf(file
, (int)scp
->value
)) == -1) {
867 if (errno
== EINVAL
|| errno
== 0) {
868 /* Does not support the association */
869 /* DO NOT TRANSLATE */
870 (void) printf("undefined\n");
873 /* Probably problems with the pathname itself */
875 (void) printf("%s\n", file
);
877 (void) printf("%s", file
);
882 (void) printf("%ld\n", value
);
889 main(int argc
, char **argv
)
891 register struct sctab
*scp
;
895 (void) setlocale(LC_ALL
, "");
896 #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */
897 #define TEXT_DOMAIN "SYS_TEST"
899 (void) textdomain(TEXT_DOMAIN
);
901 while ((c
= getopt(argc
, argv
, "av:")) != -1)
908 * Unix98 adds the -v option to allow
909 * programming 'specifications' to be
910 * indicated, for present purposes
911 * the specification isn't really
912 * doing anything of value, so for
913 * the moment getopt just processes the
914 * option value and argv[1] is adjusted.
916 * At some later date we might want to
917 * do specification processing at this
927 if ((aflag
&& argc
>= 2) || (!aflag
&& argc
< 2))
932 #define RightColumn 32
933 #define DefPathName "."
936 * sort the table by the "name" field
937 * so we print it in sorted order
939 qsort(&sctab
[0], (sizeof (sctab
)/sizeof (struct sctab
))-1,
940 sizeof (struct sctab
), namecmp
);
943 * print all the known symbols and their values
945 for (scp
= &sctab
[0]; scp
->name
!= NULL
; ++scp
) {
950 * variable name in the left column,
951 * value in the right column.
952 * The right column starts at a tab stop.
954 (void) printf("%s:\t", scp
->name
);
956 c
= strlen(scp
->name
) + 1;
957 c
= (c
+TabStop
) / TabStop
, c
*= TabStop
;
958 for (; c
< RightColumn
; c
+= TabStop
)
959 (void) putchar('\t');
962 * for pathconf() related variables that require
963 * a pathname, use "."
965 stat
= getconf(scp
, scp
->type
== PATHCONF
? 3 : 2,
966 scp
->name
, DefPathName
);
971 * if stat != 0, then an error message was already
972 * printed in getconf(),
973 * so don't need to print one here
979 * find the name of the specified variable (argv[1])
980 * and print its value.
982 for (scp
= &sctab
[0]; scp
->name
!= NULL
; ++scp
)
983 if (strcmp(argv
[1], scp
->name
) == 0) {
984 exstat
= getconf(scp
, argc
, argv
[1], argv
[2]);
989 * if at last entry in table, then the user specified
990 * variable is invalid
992 if (scp
->name
== NULL
) {
994 (void) fprintf(stderr
, gettext(INVAL_ARG
), argv
[1]);