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