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
,
260 * confstr additions, these support
261 * programming specifications/environments.
263 * Unfortunately there is some uncertainty with
264 * the standard at this point about the constant
265 * name, thus we need to recognize BOTH with and
266 * without the initial underscore.
268 _CS_XBS5_ILP32_OFF32_CFLAGS
, "XBS5_ILP32_OFF32_CFLAGS",
270 _CS_XBS5_ILP32_OFF32_CFLAGS
, "_XBS5_ILP32_OFF32_CFLAGS",
273 _CS_XBS5_ILP32_OFF32_LDFLAGS
, "XBS5_ILP32_OFF32_LDFLAGS",
275 _CS_XBS5_ILP32_OFF32_LDFLAGS
, "_XBS5_ILP32_OFF32_LDFLAGS",
278 _CS_XBS5_ILP32_OFF32_LIBS
, "XBS5_ILP32_OFF32_LIBS",
280 _CS_XBS5_ILP32_OFF32_LIBS
, "_XBS5_ILP32_OFF32_LIBS",
283 _CS_XBS5_ILP32_OFF32_LINTFLAGS
, "XBS5_ILP32_OFF32_LINTFLAGS",
285 _CS_XBS5_ILP32_OFF32_LINTFLAGS
, "_XBS5_ILP32_OFF32_LINTFLAGS",
288 _CS_XBS5_ILP32_OFFBIG_CFLAGS
, "XBS5_ILP32_OFFBIG_CFLAGS",
290 _CS_XBS5_ILP32_OFFBIG_CFLAGS
, "_XBS5_ILP32_OFFBIG_CFLAGS",
293 _CS_XBS5_ILP32_OFFBIG_LDFLAGS
, "XBS5_ILP32_OFFBIG_LDFLAGS",
295 _CS_XBS5_ILP32_OFFBIG_LDFLAGS
, "_XBS5_ILP32_OFFBIG_LDFLAGS",
298 _CS_XBS5_ILP32_OFFBIG_LIBS
, "XBS5_ILP32_OFFBIG_LIBS",
300 _CS_XBS5_ILP32_OFFBIG_LIBS
, "_XBS5_ILP32_OFFBIG_LIBS",
303 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
, "XBS5_ILP32_OFFBIG_LINTFLAGS",
305 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
, "_XBS5_ILP32_OFFBIG_LINTFLAGS",
308 _CS_XBS5_LP64_OFF64_CFLAGS
, "XBS5_LP64_OFF64_CFLAGS",
310 _CS_XBS5_LP64_OFF64_CFLAGS
, "_XBS5_LP64_OFF64_CFLAGS",
313 _CS_XBS5_LP64_OFF64_LDFLAGS
, "XBS5_LP64_OFF64_LDFLAGS",
315 _CS_XBS5_LP64_OFF64_LDFLAGS
, "_XBS5_LP64_OFF64_LDFLAGS",
318 _CS_XBS5_LP64_OFF64_LIBS
, "XBS5_LP64_OFF64_LIBS",
320 _CS_XBS5_LP64_OFF64_LIBS
, "_XBS5_LP64_OFF64_LIBS",
323 _CS_XBS5_LP64_OFF64_LINTFLAGS
, "XBS5_LP64_OFF64_LINTFLAGS",
325 _CS_XBS5_LP64_OFF64_LINTFLAGS
, "_XBS5_LP64_OFF64_LINTFLAGS",
328 _CS_XBS5_LPBIG_OFFBIG_CFLAGS
, "XBS5_LPBIG_OFFBIG_CFLAGS",
330 _CS_XBS5_LPBIG_OFFBIG_CFLAGS
, "_XBS5_LPBIG_OFFBIG_CFLAGS",
333 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
, "XBS5_LPBIG_OFFBIG_LDFLAGS",
335 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
, "_XBS5_LPBIG_OFFBIG_LDFLAGS",
338 _CS_XBS5_LPBIG_OFFBIG_LIBS
, "XBS5_LPBIG_OFFBIG_LIBS",
340 _CS_XBS5_LPBIG_OFFBIG_LIBS
, "_XBS5_LPBIG_OFFBIG_LIBS",
343 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
, "XBS5_LPBIG_OFFBIG_LINTFLAGS",
345 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
, "_XBS5_LPBIG_OFFBIG_LINTFLAGS",
349 * UNIX 03 confstr() additions for compilation environments
351 _CS_POSIX_V6_ILP32_OFF32_CFLAGS
, "POSIX_V6_ILP32_OFF32_CFLAGS",
353 _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
, "POSIX_V6_ILP32_OFF32_LDFLAGS",
355 _CS_POSIX_V6_ILP32_OFF32_LIBS
, "POSIX_V6_ILP32_OFF32_LIBS",
357 _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
, "POSIX_V6_ILP32_OFFBIG_CFLAGS",
359 _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
, "POSIX_V6_ILP32_OFFBIG_LDFLAGS",
361 _CS_POSIX_V6_ILP32_OFFBIG_LIBS
, "POSIX_V6_ILP32_OFFBIG_LIBS",
363 _CS_POSIX_V6_LP64_OFF64_CFLAGS
, "POSIX_V6_LP64_OFF64_CFLAGS",
365 _CS_POSIX_V6_LP64_OFF64_LDFLAGS
, "POSIX_V6_LP64_OFF64_LDFLAGS",
367 _CS_POSIX_V6_LP64_OFF64_LIBS
, "POSIX_V6_LP64_OFF64_LIBS",
369 _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
, "POSIX_V6_LPBIG_OFFBIG_CFLAGS",
371 _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
, "POSIX_V6_LPBIG_OFFBIG_LDFLAGS",
373 _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
, "POSIX_V6_LPBIG_OFFBIG_LIBS",
375 _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
, "POSIX_V6_WIDTH_RESTRICTED_ENVS",
377 /* End of UNIX 03 compilation environments */
379 #ifdef _SC_2_C_VERSION /* POSIX.2 table B-4 */
380 _SC_2_C_VERSION
, "_POSIX2_C_VERSION", SYSCONF
, NOFLAGS
,
382 _POSIX2_C_VERSION
, "_POSIX2_C_VERSION", SELFCONF
, NOFLAGS
,
386 * XPG4 support BEGINS
389 #ifndef CHARCLASS_NAME_MAX
390 #define CHARCLASS_NAME_MAX -1
417 #define MB_LEN_MAX -1
426 #define NL_LANGMAX -1
435 #define NL_TEXTMAX -1
461 #define _XOPEN_XPG2 -1
464 #define _XOPEN_XPG3 -1
467 #define _XOPEN_XPG4 -1
471 * the following are values that we should find in <limits.h>
472 * so we use SELFCONF here.
477 CHARCLASS_NAME_MAX
, "CHARCLASS_NAME_MAX", SELFCONF
, NOFLAGS
,
478 SSIZE_MAX
, "SSIZE_MAX", SELFCONF
, NOFLAGS
,
481 CHAR_BIT
, "CHAR_BIT", SELFCONF
, NOFLAGS
,
482 CHAR_MAX
, "CHAR_MAX", SELFCONF
, NOFLAGS
,
483 CHAR_MIN
, "CHAR_MIN", SELFCONF
, NOFLAGS
,
484 INT_MAX
, "INT_MAX", SELFCONF
, NOFLAGS
,
485 INT_MIN
, "INT_MIN", SELFCONF
, NOFLAGS
,
486 LONG_BIT
, "LONG_BIT", SELFCONF
, NOFLAGS
,
487 LONG_MAX
, "LONG_MAX", SELFCONF
, NOFLAGS
,
488 LONG_MIN
, "LONG_MIN", SELFCONF
, NOFLAGS
,
489 MB_LEN_MAX
, "MB_LEN_MAX", SELFCONF
, NOFLAGS
,
490 NL_NMAX
, "NL_NMAX", SELFCONF
, NOFLAGS
,
491 NL_ARGMAX
, "NL_ARGMAX", SELFCONF
, NOFLAGS
,
492 NL_LANGMAX
, "NL_LANGMAX", SELFCONF
, NOFLAGS
,
493 NL_MSGMAX
, "NL_MSGMAX", SELFCONF
, NOFLAGS
,
494 NL_SETMAX
, "NL_SETMAX", SELFCONF
, NOFLAGS
,
495 NL_TEXTMAX
, "NL_TEXTMAX", SELFCONF
, NOFLAGS
,
496 NZERO
, "NZERO", SELFCONF
, NOFLAGS
,
497 SCHAR_MAX
, "SCHAR_MAX", SELFCONF
, NOFLAGS
,
498 SCHAR_MIN
, "SCHAR_MIN", SELFCONF
, NOFLAGS
,
499 SHRT_MAX
, "SHRT_MAX", SELFCONF
, NOFLAGS
,
500 SHRT_MIN
, "SHRT_MIN", SELFCONF
, NOFLAGS
,
501 TMP_MAX
, "TMP_MAX", SELFCONF
, NOFLAGS
,
504 * for the unsigned maximums, we cannot rely on the value -1
505 * to indicate "undefined".
508 0, "UCHAR_MAX", SELFCONF
, UNDEFINED
,
510 (long)UCHAR_MAX
, "UCHAR_MAX", SELFCONF
, UNSIGNED_VALUE
,
511 #endif /* UCHAR_MAX */
513 0, "UINT_MAX", SELFCONF
, UNDEFINED
,
515 (long)UINT_MAX
, "UINT_MAX", SELFCONF
, UNSIGNED_VALUE
,
516 #endif /* UINT_MAX */
518 0, "ULONG_MAX", SELFCONF
, UNDEFINED
,
520 (long)ULONG_MAX
, "ULONG_MAX", SELFCONF
, UNSIGNED_VALUE
,
521 #endif /* ULONG_MAX */
523 0, "USHRT_MAX", SELFCONF
, UNDEFINED
,
525 (long)USHRT_MAX
, "USHRT_MAX", SELFCONF
, UNSIGNED_VALUE
,
526 #endif /* USHRT_MAX */
528 0, "SIZE_MAX", SELFCONF
, UNDEFINED
,
530 (long)SIZE_MAX
, "SIZE_MAX", SELFCONF
, UNSIGNED_VALUE
,
531 #endif /* SIZE_MAX */
533 WORD_BIT
, "WORD_BIT", SELFCONF
, NOFLAGS
,
536 _XOPEN_IOV_MAX
, "_XOPEN_IOV_MAX", SELFCONF
, NOFLAGS
,
539 _XOPEN_NAME_MAX
, "_XOPEN_NAME_MAX", SELFCONF
, NOFLAGS
,
540 _XOPEN_PATH_MAX
, "_XOPEN_PATH_MAX", SELFCONF
, NOFLAGS
,
543 * The following are defined via sysconf(). These are considered
544 * an extension to sysconf().
545 * The -0 is needed if _XOPEN_XPG? is defined to be an empty string.
547 _XOPEN_XPG2
-0, "_XOPEN_XPG2", SELFCONF
, NOFLAGS
,
548 _XOPEN_XPG3
-0, "_XOPEN_XPG3", SELFCONF
, NOFLAGS
,
549 _XOPEN_XPG4
-0, "_XOPEN_XPG4", SELFCONF
, NOFLAGS
,
552 * The following should be provided by sysconf() (e.g use SYSCONF),
553 * so we look for the appropriate _SC_* symbol in <unistd.h>.
554 * If it is not defined, then we use SELFCONF with the value of -1.
556 _SC_XOPEN_VERSION
, "_XOPEN_VERSION", SYSCONF
, NOFLAGS
,
557 _SC_XOPEN_XCU_VERSION
, "_XOPEN_XCU_VERSION", SYSCONF
, NOFLAGS
,
558 _SC_XOPEN_CRYPT
, "_XOPEN_CRYPT", SYSCONF
, NOFLAGS
,
559 _SC_XOPEN_ENH_I18N
, "_XOPEN_ENH_I18N", SYSCONF
, NOFLAGS
,
560 _SC_XOPEN_SHM
, "_XOPEN_SHM", SYSCONF
, NOFLAGS
,
566 /* XPG4, Version 2 support */
568 _SC_ATEXIT_MAX
, "ATEXIT_MAX", SYSCONF
, NOFLAGS
,
569 _SC_PAGESIZE
, "PAGESIZE", SYSCONF
, NOFLAGS
,
570 _SC_PAGE_SIZE
, "PAGE_SIZE", SYSCONF
, NOFLAGS
,
571 _SC_XOPEN_UNIX
, "_XOPEN_UNIX", SYSCONF
, NOFLAGS
,
572 _SC_IOV_MAX
, "IOV_MAX", SYSCONF
, NOFLAGS
,
575 * UNIX 98 - XPG5 additions
577 _SC_XOPEN_LEGACY
, "_XOPEN_LEGACY", SYSCONF
, NOFLAGS
,
578 _SC_PASS_MAX
, "PASS_MAX", SYSCONF
, NOFLAGS
,
579 _SC_AIO_LISTIO_MAX
, "AIO_LISTIO_MAX", SYSCONF
, NOFLAGS
,
580 _SC_AIO_MAX
, "AIO_MAX", SYSCONF
, NOFLAGS
,
581 _SC_AIO_PRIO_DELTA_MAX
, "AIO_PRIO_DELTA_MAX", SYSCONF
, NOFLAGS
,
582 _SC_DELAYTIMER_MAX
, "DELAYTIMER_MAX", SYSCONF
, NOFLAGS
,
583 _SC_MQ_OPEN_MAX
, "MQ_OPEN_MAX", SYSCONF
, NOFLAGS
,
584 _SC_MQ_PRIO_MAX
, "MQ_PRIO_MAX", SYSCONF
, NOFLAGS
,
585 _SC_RTSIG_MAX
, "RTSIG_MAX", SYSCONF
, NOFLAGS
,
586 _SC_SEM_NSEMS_MAX
, "SEM_NSEMS_MAX", SYSCONF
, NOFLAGS
,
587 _SC_SEM_VALUE_MAX
, "SEM_VALUE_MAX", SYSCONF
, NOFLAGS
,
588 _SC_SIGQUEUE_MAX
, "SIGQUEUE_MAX", SYSCONF
, NOFLAGS
,
589 _SC_TIMER_MAX
, "TIMER_MAX", SYSCONF
, NOFLAGS
,
591 _SC_ASYNCHRONOUS_IO
, "_POSIX_ASYNCHRONOUS_IO", SYSCONF
, NOFLAGS
,
592 _SC_FSYNC
, "_POSIX_FSYNC", SYSCONF
, NOFLAGS
,
593 _SC_MAPPED_FILES
, "_POSIX_MAPPED_FILES", SYSCONF
, NOFLAGS
,
594 _SC_MEMLOCK
, "_POSIX_MEMLOCK", SYSCONF
, NOFLAGS
,
595 _SC_MEMLOCK_RANGE
, "_POSIX_MEMLOCK_RANGE", SYSCONF
, NOFLAGS
,
596 _SC_MEMORY_PROTECTION
, "_POSIX_MEMORY_PROTECTION", SYSCONF
, NOFLAGS
,
597 _SC_MESSAGE_PASSING
, "_POSIX_MESSAGE_PASSING", SYSCONF
, NOFLAGS
,
598 _SC_PRIORITIZED_IO
, "_POSIX_PRIORITIZED_IO", SYSCONF
, NOFLAGS
,
599 _SC_PRIORITY_SCHEDULING
, "_POSIX_PRIORITY_SCHEDULING", SYSCONF
, NOFLAGS
,
600 _SC_REALTIME_SIGNALS
, "_POSIX_REALTIME_SIGNALS", SYSCONF
, NOFLAGS
,
601 _SC_SEMAPHORES
, "_POSIX_SEMAPHORES", SYSCONF
, NOFLAGS
,
603 _SC_SHARED_MEMORY_OBJECTS
, "_POSIX_SHARED_MEMORY_OBJECTS",
606 _SC_SYNCHRONIZED_IO
, "_POSIX_SYNCHRONIZED_IO", SYSCONF
, NOFLAGS
,
607 _SC_TIMERS
, "_POSIX_TIMERS", SYSCONF
, NOFLAGS
,
609 _SC_LOGIN_NAME_MAX
, "LOGIN_NAME_MAX", SYSCONF
, NOFLAGS
,
611 _SC_THREAD_DESTRUCTOR_ITERATIONS
, "PTHREAD_DESTRUCTOR_ITERATIONS",
614 _SC_THREAD_KEYS_MAX
, "PTHREAD_KEYS_MAX", SYSCONF
, NOFLAGS
,
615 _SC_THREAD_STACK_MIN
, "PTHREAD_STACK_MIN", SYSCONF
, NOFLAGS
,
616 _SC_THREAD_THREADS_MAX
, "PTHREAD_THREADS_MAX", SYSCONF
, NOFLAGS
,
618 _SC_THREADS
, "_POSIX_THREADS", SYSCONF
, NOFLAGS
,
620 _SC_THREAD_ATTR_STACKADDR
, "POSIX_THREAD_ATTR_STACKADDR",
622 _SC_THREAD_ATTR_STACKADDR
, "_POSIX_THREAD_ATTR_STACKADDR",
625 _SC_THREAD_ATTR_STACKSIZE
, "POSIX_THREAD_ATTR_STACKSIZE",
627 _SC_THREAD_ATTR_STACKSIZE
, "_POSIX_THREAD_ATTR_STACKSIZE",
630 _SC_THREAD_PRIORITY_SCHEDULING
, "POSIX_THREAD_PRIORITY_SCHEDULING",
632 _SC_THREAD_PRIORITY_SCHEDULING
, "_POSIX_THREAD_PRIORITY_SCHEDULING",
635 _SC_THREAD_PRIO_INHERIT
, "POSIX_THREAD_PRIO_INHERIT",
637 _SC_THREAD_PRIO_INHERIT
, "_POSIX_THREAD_PRIO_INHERIT",
640 _SC_THREAD_PRIO_PROTECT
, "POSIX_THREAD_PRIO_PROTECT",
642 _SC_THREAD_PRIO_PROTECT
, "_POSIX_THREAD_PRIO_PROTECT",
645 _SC_THREAD_PROCESS_SHARED
, "POSIX_THREAD_PROCESS_SHARED",
647 _SC_THREAD_PROCESS_SHARED
, "_POSIX_THREAD_PROCESS_SHARED",
650 _SC_THREAD_SAFE_FUNCTIONS
, "POSIX_THREAD_SAFE_FUNCTIONS",
652 _SC_THREAD_SAFE_FUNCTIONS
, "_POSIX_THREAD_SAFE_FUNCTIONS",
655 _SC_TTY_NAME_MAX
, "TTY_NAME_MAX", SYSCONF
, NOFLAGS
,
656 _SC_XOPEN_REALTIME
, "_XOPEN_REALTIME", SYSCONF
, NOFLAGS
,
657 _SC_XOPEN_REALTIME_THREADS
, "_XOPEN_REALTIME_THREADS", SYSCONF
, NOFLAGS
,
660 * Due to ambiguity in the standard we need
661 * to recognize both the underscored name
662 * and the non-underscored version in the
663 * following variables.
665 _SC_XBS5_ILP32_OFF32
, "XBS5_ILP32_OFF32", SYSCONF
, NOFLAGS
,
666 _SC_XBS5_ILP32_OFF32
, "_XBS5_ILP32_OFF32", SYSCONF
, NOFLAGS
,
668 _SC_XBS5_ILP32_OFFBIG
, "XBS5_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
669 _SC_XBS5_ILP32_OFFBIG
, "_XBS5_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
671 _SC_XBS5_LP64_OFF64
, "XBS5_LP64_OFF64", SYSCONF
, NOFLAGS
,
672 _SC_XBS5_LP64_OFF64
, "_XBS5_LP64_OFF64", SYSCONF
, NOFLAGS
,
674 _SC_XBS5_LPBIG_OFFBIG
, "XBS5_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
675 _SC_XBS5_LPBIG_OFFBIG
, "_XBS5_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
678 * UNIX 03 additions for sysconf() names, and names that are not in interfaces
680 _SC_REGEXP
, "_POSIX_REGEXP", SYSCONF
, NOFLAGS
,
681 _SC_SHELL
, "_POSIX_SHELL", SYSCONF
, NOFLAGS
,
682 _SC_HOST_NAME_MAX
, "HOST_NAME_MAX", SYSCONF
, NOFLAGS
,
683 _SC_READER_WRITER_LOCKS
, "_POSIX_READER_WRITER_LOCKS", SYSCONF
, NOFLAGS
,
684 _SC_IPV6
, "_POSIX_IPV6", SYSCONF
, NOFLAGS
,
685 _SC_RAW_SOCKETS
, "_POSIX_RAW_SOCKETS", SYSCONF
, NOFLAGS
,
686 _SC_XOPEN_STREAMS
, "_XOPEN_STREAMS", SYSCONF
, NOFLAGS
,
687 _SC_SYMLOOP_MAX
, "SYMLOOP_MAX", SYSCONF
, NOFLAGS
,
688 _SC_2_PBS
, "_POSIX2_PBS", SYSCONF
, NOFLAGS
,
689 _SC_2_PBS_ACCOUNTING
, "_POSIX2_PBS_ACCOUNTING", SYSCONF
, NOFLAGS
,
690 _SC_2_PBS_CHECKPOINT
, "_POSIX2_PBS_CHECKPOINT", SYSCONF
, NOFLAGS
,
691 _SC_2_PBS_LOCATE
, "_POSIX2_PBS_LOCATE", SYSCONF
, NOFLAGS
,
692 _SC_2_PBS_MESSAGE
, "_POSIX2_PBS_MESSAGE", SYSCONF
, NOFLAGS
,
693 _SC_2_PBS_TRACK
, "_POSIX2_PBS_TRACK", SYSCONF
, NOFLAGS
,
695 _SC_ADVISORY_INFO
, "_POSIX_ADVISORY_INFO", SYSCONF
, NOFLAGS
,
696 _SC_BARRIERS
, "_POSIX_BARRIERS", SYSCONF
, NOFLAGS
,
697 _SC_CLOCK_SELECTION
, "_POSIX_CLOCK_SELECTION", SYSCONF
, NOFLAGS
,
698 _SC_CPUTIME
, "_POSIX_CPUTIME", SYSCONF
, NOFLAGS
,
699 _SC_MONOTONIC_CLOCK
, "_POSIX_MONOTONIC_CLOCK", SYSCONF
, NOFLAGS
,
700 _SC_SPAWN
, "_POSIX_SPAWN", SYSCONF
, NOFLAGS
,
701 _SC_SPIN_LOCKS
, "_POSIX_SPIN_LOCKS", SYSCONF
, NOFLAGS
,
702 _SC_SPORADIC_SERVER
, "_POSIX_SPORADIC_SERVER", SYSCONF
, NOFLAGS
,
703 _SC_SS_REPL_MAX
, "_POSIX_SS_REPL_MAX", SYSCONF
, NOFLAGS
,
704 _SC_THREAD_CPUTIME
, "_POSIX_THREAD_CPUTIME", SYSCONF
, NOFLAGS
,
705 _SC_THREAD_SPORADIC_SERVER
, "_POSIX_THREAD_SPORADIC_SERVER", SYSCONF
,
707 _SC_TIMEOUTS
, "_POSIX_TIMEOUTS", SYSCONF
, NOFLAGS
,
708 _SC_TRACE
, "_POSIX_TRACE", SYSCONF
, NOFLAGS
,
709 _SC_TRACE_EVENT_FILTER
, "_POSIX_TRACE_EVENT_FILTER", SYSCONF
, NOFLAGS
,
710 _SC_TRACE_EVENT_NAME_MAX
, "_POSIX_TRACE_EVENT_NAME_MAX", SYSCONF
,
712 _SC_TRACE_INHERIT
, "_POSIX_TRACE_INHERIT", SYSCONF
, NOFLAGS
,
713 _SC_TRACE_LOG
, "_POSIX_TRACE_LOG", SYSCONF
, NOFLAGS
,
714 _SC_TRACE_NAME_MAX
, "_POSIX_TRACE_NAME_MAX", SYSCONF
, NOFLAGS
,
715 _SC_TRACE_SYS_MAX
, "_POSIX_TRACE_SYS_MAX", SYSCONF
, NOFLAGS
,
716 _SC_TRACE_USER_EVENT_MAX
, "_POSIX_TRACE_USER_EVENT_MAX", SYSCONF
,
718 _SC_TYPED_MEMORY_OBJECTS
, "_POSIX_TYPED_MEMORY_OBJECTS", SYSCONF
,
722 * Due to an ambiguity in the specification, we need to recognize both
723 * the underscored POSIX name and the non-underscored name. In addition,
724 * we need to permit the use of the _V6_* environment names specified
727 _SC_V6_ILP32_OFF32
, "_V6_ILP32_OFF32", SYSCONF
, NOFLAGS
,
728 _SC_V6_ILP32_OFF32
, "_POSIX_V6_ILP32_OFF32", SYSCONF
, NOFLAGS
,
729 _SC_V6_ILP32_OFF32
, "POSIX_V6_ILP32_OFF32", SYSCONF
, NOFLAGS
,
731 _SC_V6_ILP32_OFFBIG
, "_V6_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
732 _SC_V6_ILP32_OFFBIG
, "_POSIX_V6_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
733 _SC_V6_ILP32_OFFBIG
, "POSIX_V6_ILP32_OFFBIG", SYSCONF
, NOFLAGS
,
735 _SC_V6_LP64_OFF64
, "_V6_LP64_OFF64", SYSCONF
, NOFLAGS
,
736 _SC_V6_LP64_OFF64
, "_POSIX_V6_LP64_OFF64", SYSCONF
, NOFLAGS
,
737 _SC_V6_LP64_OFF64
, "POSIX_V6_LP64_OFF64", SYSCONF
, NOFLAGS
,
739 _SC_V6_LPBIG_OFFBIG
, "_V6_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
740 _SC_V6_LPBIG_OFFBIG
, "_POSIX_V6_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
741 _SC_V6_LPBIG_OFFBIG
, "POSIX_V6_LPBIG_OFFBIG", SYSCONF
, NOFLAGS
,
743 * System V Interface Definition
745 _SC_NPROCESSORS_CONF
, "NPROCESSORS_CONF", SYSCONF
, NOFLAGS
,
746 _SC_NPROCESSORS_MAX
, "NPROCESSORS_MAX", SYSCONF
, NOFLAGS
,
747 _SC_NPROCESSORS_ONLN
, "NPROCESSORS_ONLN", SYSCONF
, NOFLAGS
,
748 0, NULL
, 0, 0 /* end of table */
753 * Print usage message.
759 (void) fputs(gettext(
760 "usage:\tgetconf [-v specification] system_var\n"
761 "\tgetconf [-v specification] path_var pathname\n"
762 "\tgetconf -a\n"), stderr
);
768 namecmp(const void *a
, const void *b
)
770 return (strcoll(((const struct sctab
*)a
)->name
,
771 ((const struct sctab
*)b
)->name
));
776 getconf(struct sctab
*scp
, int argc
, char *name
, char *file
)
779 register char *buffer
;
786 if (scp
->flag
& UNDEFINED
||
787 (!(scp
->flag
&UNSIGNED_VALUE
) && scp
->value
== -1)) {
788 /* DO NOT TRANSLATE */
789 (void) printf("undefined\n");
791 if (scp
->flag
& UNSIGNED_VALUE
)
792 (void) printf("%lu\n", scp
->value
);
794 (void) printf("%ld\n", scp
->value
);
801 if (scp
->flag
& UNDEFINED
||
802 (value
= sysconf((int)scp
->value
)) == -1) {
803 if (errno
== EINVAL
) {
804 (void) fprintf(stderr
,
805 gettext(INVAL_ARG
), name
);
808 /* DO NOT TRANSLATE */
809 (void) printf("undefined\n");
813 (void) printf("%ld\n", value
);
820 len
= confstr((int)scp
->value
, NULL
, (size_t)0);
822 if (errno
== EINVAL
) {
823 (void) fprintf(stderr
, gettext(INVAL_ARG
),
827 /* DO NOT TRANSLATE */
828 (void) printf("undefined\n");
833 * allocate space to store result of constr() into
835 if ((buffer
= malloc(len
)) == NULL
) {
836 (void) fprintf(stderr
,
837 gettext("insufficient memory available"));
841 assert(confstr((int)scp
->value
, buffer
, len
) != 0);
843 (void) printf("%s\n", buffer
);
851 if ((value
= pathconf(file
, (int)scp
->value
)) == -1) {
852 if (errno
== EINVAL
|| errno
== 0) {
853 /* Does not support the association */
854 /* DO NOT TRANSLATE */
855 (void) printf("undefined\n");
858 /* Probably problems with the pathname itself */
860 (void) printf("%s\n", file
);
862 (void) printf("%s", file
);
867 (void) printf("%ld\n", value
);
874 main(int argc
, char **argv
)
876 register struct sctab
*scp
;
880 (void) setlocale(LC_ALL
, "");
881 #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */
882 #define TEXT_DOMAIN "SYS_TEST"
884 (void) textdomain(TEXT_DOMAIN
);
886 while ((c
= getopt(argc
, argv
, "av:")) != -1)
893 * Unix98 adds the -v option to allow
894 * programming 'specifications' to be
895 * indicated, for present purposes
896 * the specification isn't really
897 * doing anything of value, so for
898 * the moment getopt just processes the
899 * option value and argv[1] is adjusted.
901 * At some later date we might want to
902 * do specification processing at this
912 if ((aflag
&& argc
>= 2) || (!aflag
&& argc
< 2))
917 #define RightColumn 32
918 #define DefPathName "."
921 * sort the table by the "name" field
922 * so we print it in sorted order
924 qsort(&sctab
[0], (sizeof (sctab
)/sizeof (struct sctab
))-1,
925 sizeof (struct sctab
), namecmp
);
928 * print all the known symbols and their values
930 for (scp
= &sctab
[0]; scp
->name
!= NULL
; ++scp
) {
935 * variable name in the left column,
936 * value in the right column.
937 * The right column starts at a tab stop.
939 (void) printf("%s:\t", scp
->name
);
941 c
= strlen(scp
->name
) + 1;
942 c
= (c
+TabStop
) / TabStop
, c
*= TabStop
;
943 for (; c
< RightColumn
; c
+= TabStop
)
944 (void) putchar('\t');
947 * for pathconf() related variables that require
948 * a pathname, use "."
950 stat
= getconf(scp
, scp
->type
== PATHCONF
? 3 : 2,
951 scp
->name
, DefPathName
);
956 * if stat != 0, then an error message was already
957 * printed in getconf(),
958 * so don't need to print one here
964 * find the name of the specified variable (argv[1])
965 * and print its value.
967 for (scp
= &sctab
[0]; scp
->name
!= NULL
; ++scp
)
968 if (strcmp(argv
[1], scp
->name
) == 0) {
969 exstat
= getconf(scp
, argc
, argv
[1], argv
[2]);
974 * if at last entry in table, then the user specified
975 * variable is invalid
977 if (scp
->name
== NULL
) {
979 (void) fprintf(stderr
, gettext(INVAL_ARG
), argv
[1]);