]> git.ipfire.org Git - thirdparty/glibc.git/blame - posix/getconf.c
Update copyright year
[thirdparty/glibc.git] / posix / getconf.c
CommitLineData
81fb02b0 1/* Copyright (C) 1991, 1992, 1995-2011, 2012 Free Software Foundation, Inc.
2c6fe0bd 2 This file is part of the GNU C Library.
28f540f4 3
43bc8ac6 4 This program is free software; you can redistribute it and/or modify
2e2efe65
RM
5 it under the terms of the GNU General Public License as published
6 by the Free Software Foundation; version 2 of the License, or
7 (at your option) any later version.
28f540f4 8
43bc8ac6 9 This program is distributed in the hope that it will be useful,
2c6fe0bd 10 but WITHOUT ANY WARRANTY; without even the implied warranty of
43bc8ac6
UD
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
28f540f4 13
43bc8ac6
UD
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software Foundation,
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
28f540f4 17
28f540f4
RM
18#include <unistd.h>
19#include <errno.h>
036cc82f
RM
20#include <error.h>
21#include <libintl.h>
9756dfe1 22#include <locale.h>
28f540f4
RM
23#include <string.h>
24#include <stdlib.h>
25#include <stdio.h>
26
9756dfe1
UD
27#include "../version.h"
28#define PACKAGE _libc_intl_domainname
29
28f540f4
RM
30struct conf
31 {
036cc82f
RM
32 const char *name;
33 const int call_name;
34 const enum { SYSCONF, CONFSTR, PATHCONF } call;
28f540f4
RM
35 };
36
dfd2257a 37static const struct conf vars[] =
28f540f4 38 {
9d141cae 39#ifdef _PC_LINK_MAX
28f540f4 40 { "LINK_MAX", _PC_LINK_MAX, PATHCONF },
9d141cae
UD
41#endif
42#ifdef _PC_LINK_MAX
2c6fe0bd 43 { "_POSIX_LINK_MAX", _PC_LINK_MAX, PATHCONF },
9d141cae
UD
44#endif
45#ifdef _PC_MAX_CANON
28f540f4 46 { "MAX_CANON", _PC_MAX_CANON, PATHCONF },
9d141cae
UD
47#endif
48#ifdef _PC_MAX_CANON
2c6fe0bd 49 { "_POSIX_MAX_CANON", _PC_MAX_CANON, PATHCONF },
9d141cae
UD
50#endif
51#ifdef _PC_MAX_INPUT
28f540f4 52 { "MAX_INPUT", _PC_MAX_INPUT, PATHCONF },
9d141cae
UD
53#endif
54#ifdef _PC_MAX_INPUT
2c6fe0bd 55 { "_POSIX_MAX_INPUT", _PC_MAX_INPUT, PATHCONF },
9d141cae
UD
56#endif
57#ifdef _PC_NAME_MAX
28f540f4 58 { "NAME_MAX", _PC_NAME_MAX, PATHCONF },
9d141cae
UD
59#endif
60#ifdef _PC_NAME_MAX
2c6fe0bd 61 { "_POSIX_NAME_MAX", _PC_NAME_MAX, PATHCONF },
9d141cae
UD
62#endif
63#ifdef _PC_PATH_MAX
28f540f4 64 { "PATH_MAX", _PC_PATH_MAX, PATHCONF },
9d141cae
UD
65#endif
66#ifdef _PC_PATH_MAX
2c6fe0bd 67 { "_POSIX_PATH_MAX", _PC_PATH_MAX, PATHCONF },
9d141cae
UD
68#endif
69#ifdef _PC_PIPE_BUF
28f540f4 70 { "PIPE_BUF", _PC_PIPE_BUF, PATHCONF },
9d141cae
UD
71#endif
72#ifdef _PC_PIPE_BUF
2c6fe0bd 73 { "_POSIX_PIPE_BUF", _PC_PIPE_BUF, PATHCONF },
9d141cae
UD
74#endif
75#ifdef _PC_SOCK_MAXBUF
503054c0 76 { "SOCK_MAXBUF", _PC_SOCK_MAXBUF, PATHCONF },
9d141cae
UD
77#endif
78#ifdef _PC_ASYNC_IO
2c6fe0bd 79 { "_POSIX_ASYNC_IO", _PC_ASYNC_IO, PATHCONF },
9d141cae
UD
80#endif
81#ifdef _PC_CHOWN_RESTRICTED
28f540f4 82 { "_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED, PATHCONF },
9d141cae
UD
83#endif
84#ifdef _PC_NO_TRUNC
28f540f4 85 { "_POSIX_NO_TRUNC", _PC_NO_TRUNC, PATHCONF },
9d141cae
UD
86#endif
87#ifdef _PC_PRIO_IO
75cd5204 88 { "_POSIX_PRIO_IO", _PC_PRIO_IO, PATHCONF },
9d141cae
UD
89#endif
90#ifdef _PC_SYNC_IO
2c6fe0bd 91 { "_POSIX_SYNC_IO", _PC_SYNC_IO, PATHCONF },
9d141cae
UD
92#endif
93#ifdef _PC_VDISABLE
2c6fe0bd 94 { "_POSIX_VDISABLE", _PC_VDISABLE, PATHCONF },
9d141cae 95#endif
28f540f4 96
9d141cae 97#ifdef _SC_ARG_MAX
28f540f4 98 { "ARG_MAX", _SC_ARG_MAX, SYSCONF },
9d141cae
UD
99#endif
100#ifdef _SC_ATEXIT_MAX
2c6fe0bd 101 { "ATEXIT_MAX", _SC_ATEXIT_MAX, SYSCONF },
9d141cae
UD
102#endif
103#ifdef _SC_CHAR_BIT
2c6fe0bd 104 { "CHAR_BIT", _SC_CHAR_BIT, SYSCONF },
9d141cae
UD
105#endif
106#ifdef _SC_CHAR_MAX
2c6fe0bd 107 { "CHAR_MAX", _SC_CHAR_MAX, SYSCONF },
9d141cae
UD
108#endif
109#ifdef _SC_CHAR_MIN
2c6fe0bd 110 { "CHAR_MIN", _SC_CHAR_MIN, SYSCONF },
9d141cae
UD
111#endif
112#ifdef _SC_CHILD_MAX
28f540f4 113 { "CHILD_MAX", _SC_CHILD_MAX, SYSCONF },
9d141cae
UD
114#endif
115#ifdef _SC_CLK_TCK
28f540f4 116 { "CLK_TCK", _SC_CLK_TCK, SYSCONF },
9d141cae
UD
117#endif
118#ifdef _SC_INT_MAX
2c6fe0bd 119 { "INT_MAX", _SC_INT_MAX, SYSCONF },
9d141cae
UD
120#endif
121#ifdef _SC_INT_MIN
2c6fe0bd 122 { "INT_MIN", _SC_INT_MIN, SYSCONF },
9d141cae
UD
123#endif
124#ifdef _SC_UIO_MAXIOV
2c6fe0bd 125 { "IOV_MAX", _SC_UIO_MAXIOV, SYSCONF },
9d141cae
UD
126#endif
127#ifdef _SC_LOGIN_NAME_MAX
2c6fe0bd 128 { "LOGNAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF },
9d141cae
UD
129#endif
130#ifdef _SC_LONG_BIT
2c6fe0bd 131 { "LONG_BIT", _SC_LONG_BIT, SYSCONF },
9d141cae
UD
132#endif
133#ifdef _SC_MB_LEN_MAX
2c6fe0bd 134 { "MB_LEN_MAX", _SC_MB_LEN_MAX, SYSCONF },
9d141cae
UD
135#endif
136#ifdef _SC_NGROUPS_MAX
28f540f4 137 { "NGROUPS_MAX", _SC_NGROUPS_MAX, SYSCONF },
9d141cae
UD
138#endif
139#ifdef _SC_NL_ARGMAX
2c6fe0bd 140 { "NL_ARGMAX", _SC_NL_ARGMAX, SYSCONF },
9d141cae
UD
141#endif
142#ifdef _SC_NL_LANGMAX
2c6fe0bd 143 { "NL_LANGMAX", _SC_NL_LANGMAX, SYSCONF },
9d141cae
UD
144#endif
145#ifdef _SC_NL_MSGMAX
2c6fe0bd 146 { "NL_MSGMAX", _SC_NL_MSGMAX, SYSCONF },
9d141cae
UD
147#endif
148#ifdef _SC_NL_NMAX
2c6fe0bd 149 { "NL_NMAX", _SC_NL_NMAX, SYSCONF },
9d141cae
UD
150#endif
151#ifdef _SC_NL_SETMAX
2c6fe0bd 152 { "NL_SETMAX", _SC_NL_SETMAX, SYSCONF },
9d141cae
UD
153#endif
154#ifdef _SC_NL_TEXTMAX
2c6fe0bd 155 { "NL_TEXTMAX", _SC_NL_TEXTMAX, SYSCONF },
9d141cae
UD
156#endif
157#ifdef _SC_GETGR_R_SIZE_MAX
2c6fe0bd 158 { "NSS_BUFLEN_GROUP", _SC_GETGR_R_SIZE_MAX, SYSCONF },
9d141cae
UD
159#endif
160#ifdef _SC_GETPW_R_SIZE_MAX
2c6fe0bd 161 { "NSS_BUFLEN_PASSWD", _SC_GETPW_R_SIZE_MAX, SYSCONF },
9d141cae
UD
162#endif
163#ifdef _SC_NZERO
2c6fe0bd 164 { "NZERO", _SC_NZERO, SYSCONF },
9d141cae
UD
165#endif
166#ifdef _SC_OPEN_MAX
28f540f4 167 { "OPEN_MAX", _SC_OPEN_MAX, SYSCONF },
9d141cae
UD
168#endif
169#ifdef _SC_PAGESIZE
2c6fe0bd 170 { "PAGESIZE", _SC_PAGESIZE, SYSCONF },
9d141cae
UD
171#endif
172#ifdef _SC_PAGESIZE
2c6fe0bd 173 { "PAGE_SIZE", _SC_PAGESIZE, SYSCONF },
9d141cae
UD
174#endif
175#ifdef _SC_PASS_MAX
2c6fe0bd 176 { "PASS_MAX", _SC_PASS_MAX, SYSCONF },
9d141cae
UD
177#endif
178#ifdef _SC_THREAD_DESTRUCTOR_ITERATIONS
2c6fe0bd 179 { "PTHREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS, SYSCONF },
9d141cae
UD
180#endif
181#ifdef _SC_THREAD_KEYS_MAX
2c6fe0bd 182 { "PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX, SYSCONF },
9d141cae
UD
183#endif
184#ifdef _SC_THREAD_STACK_MIN
2c6fe0bd 185 { "PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN, SYSCONF },
9d141cae
UD
186#endif
187#ifdef _SC_THREAD_THREADS_MAX
2c6fe0bd 188 { "PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX, SYSCONF },
9d141cae
UD
189#endif
190#ifdef _SC_SCHAR_MAX
2c6fe0bd 191 { "SCHAR_MAX", _SC_SCHAR_MAX, SYSCONF },
9d141cae
UD
192#endif
193#ifdef _SC_SCHAR_MIN
2c6fe0bd 194 { "SCHAR_MIN", _SC_SCHAR_MIN, SYSCONF },
9d141cae
UD
195#endif
196#ifdef _SC_SHRT_MAX
2c6fe0bd 197 { "SHRT_MAX", _SC_SHRT_MAX, SYSCONF },
9d141cae
UD
198#endif
199#ifdef _SC_SHRT_MIN
2c6fe0bd 200 { "SHRT_MIN", _SC_SHRT_MIN, SYSCONF },
9d141cae
UD
201#endif
202#ifdef _SC_SSIZE_MAX
2c6fe0bd 203 { "SSIZE_MAX", _SC_SSIZE_MAX, SYSCONF },
9d141cae
UD
204#endif
205#ifdef _SC_TTY_NAME_MAX
2c6fe0bd 206 { "TTY_NAME_MAX", _SC_TTY_NAME_MAX, SYSCONF },
9d141cae
UD
207#endif
208#ifdef _SC_TZNAME_MAX
2c6fe0bd 209 { "TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF },
9d141cae
UD
210#endif
211#ifdef _SC_UCHAR_MAX
2c6fe0bd 212 { "UCHAR_MAX", _SC_UCHAR_MAX, SYSCONF },
9d141cae
UD
213#endif
214#ifdef _SC_UINT_MAX
2c6fe0bd 215 { "UINT_MAX", _SC_UINT_MAX, SYSCONF },
9d141cae
UD
216#endif
217#ifdef _SC_UIO_MAXIOV
2c6fe0bd 218 { "UIO_MAXIOV", _SC_UIO_MAXIOV, SYSCONF },
9d141cae
UD
219#endif
220#ifdef _SC_ULONG_MAX
2c6fe0bd 221 { "ULONG_MAX", _SC_ULONG_MAX, SYSCONF },
9d141cae
UD
222#endif
223#ifdef _SC_USHRT_MAX
2c6fe0bd 224 { "USHRT_MAX", _SC_USHRT_MAX, SYSCONF },
9d141cae
UD
225#endif
226#ifdef _SC_WORD_BIT
2c6fe0bd 227 { "WORD_BIT", _SC_WORD_BIT, SYSCONF },
9d141cae
UD
228#endif
229#ifdef _SC_AVPHYS_PAGES
2c6fe0bd 230 { "_AVPHYS_PAGES", _SC_AVPHYS_PAGES, SYSCONF },
9d141cae
UD
231#endif
232#ifdef _SC_NPROCESSORS_CONF
2c6fe0bd 233 { "_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF, SYSCONF },
9d141cae
UD
234#endif
235#ifdef _SC_NPROCESSORS_ONLN
2c6fe0bd 236 { "_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN, SYSCONF },
9d141cae
UD
237#endif
238#ifdef _SC_PHYS_PAGES
2c6fe0bd 239 { "_PHYS_PAGES", _SC_PHYS_PAGES, SYSCONF },
9d141cae
UD
240#endif
241#ifdef _SC_ARG_MAX
2c6fe0bd 242 { "_POSIX_ARG_MAX", _SC_ARG_MAX, SYSCONF },
9d141cae
UD
243#endif
244#ifdef _SC_ASYNCHRONOUS_IO
7b3547eb 245 { "_POSIX_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO, SYSCONF },
9d141cae
UD
246#endif
247#ifdef _SC_CHILD_MAX
2c6fe0bd 248 { "_POSIX_CHILD_MAX", _SC_CHILD_MAX, SYSCONF },
9d141cae
UD
249#endif
250#ifdef _SC_FSYNC
7b3547eb 251 { "_POSIX_FSYNC", _SC_FSYNC, SYSCONF },
9d141cae
UD
252#endif
253#ifdef _SC_JOB_CONTROL
2c6fe0bd 254 { "_POSIX_JOB_CONTROL", _SC_JOB_CONTROL, SYSCONF },
9d141cae
UD
255#endif
256#ifdef _SC_MAPPED_FILES
7b3547eb 257 { "_POSIX_MAPPED_FILES", _SC_MAPPED_FILES, SYSCONF },
9d141cae
UD
258#endif
259#ifdef _SC_MEMLOCK
7b3547eb 260 { "_POSIX_MEMLOCK", _SC_MEMLOCK, SYSCONF },
9d141cae
UD
261#endif
262#ifdef _SC_MEMLOCK_RANGE
7b3547eb 263 { "_POSIX_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE, SYSCONF },
9d141cae
UD
264#endif
265#ifdef _SC_MEMORY_PROTECTION
7b3547eb 266 { "_POSIX_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION, SYSCONF },
9d141cae
UD
267#endif
268#ifdef _SC_MESSAGE_PASSING
7b3547eb 269 { "_POSIX_MESSAGE_PASSING", _SC_MESSAGE_PASSING, SYSCONF },
9d141cae
UD
270#endif
271#ifdef _SC_NGROUPS_MAX
2c6fe0bd 272 { "_POSIX_NGROUPS_MAX", _SC_NGROUPS_MAX, SYSCONF },
9d141cae
UD
273#endif
274#ifdef _SC_OPEN_MAX
2c6fe0bd 275 { "_POSIX_OPEN_MAX", _SC_OPEN_MAX, SYSCONF },
9d141cae
UD
276#endif
277#ifdef _SC_PII
503054c0 278 { "_POSIX_PII", _SC_PII, SYSCONF },
9d141cae
UD
279#endif
280#ifdef _SC_PII_INTERNET
503054c0 281 { "_POSIX_PII_INTERNET", _SC_PII_INTERNET, SYSCONF },
9d141cae
UD
282#endif
283#ifdef _SC_PII_INTERNET_DGRAM
503054c0 284 { "_POSIX_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM, SYSCONF },
9d141cae
UD
285#endif
286#ifdef _SC_PII_INTERNET_STREAM
2c6fe0bd 287 { "_POSIX_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM, SYSCONF },
9d141cae
UD
288#endif
289#ifdef _SC_PII_OSI
2c6fe0bd 290 { "_POSIX_PII_OSI", _SC_PII_OSI, SYSCONF },
9d141cae
UD
291#endif
292#ifdef _SC_PII_OSI_CLTS
503054c0 293 { "_POSIX_PII_OSI_CLTS", _SC_PII_OSI_CLTS, SYSCONF },
9d141cae
UD
294#endif
295#ifdef _SC_PII_OSI_COTS
2c6fe0bd 296 { "_POSIX_PII_OSI_COTS", _SC_PII_OSI_COTS, SYSCONF },
9d141cae
UD
297#endif
298#ifdef _SC_PII_OSI_M
503054c0 299 { "_POSIX_PII_OSI_M", _SC_PII_OSI_M, SYSCONF },
9d141cae
UD
300#endif
301#ifdef _SC_PII_SOCKET
2c6fe0bd 302 { "_POSIX_PII_SOCKET", _SC_PII_SOCKET, SYSCONF },
9d141cae
UD
303#endif
304#ifdef _SC_PII_XTI
2c6fe0bd 305 { "_POSIX_PII_XTI", _SC_PII_XTI, SYSCONF },
9d141cae
UD
306#endif
307#ifdef _SC_POLL
2c6fe0bd 308 { "_POSIX_POLL", _SC_POLL, SYSCONF },
9d141cae
UD
309#endif
310#ifdef _SC_PRIORITIZED_IO
2c6fe0bd 311 { "_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO, SYSCONF },
9d141cae
UD
312#endif
313#ifdef _SC_PRIORITY_SCHEDULING
2c6fe0bd 314 { "_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING, SYSCONF },
9d141cae
UD
315#endif
316#ifdef _SC_REALTIME_SIGNALS
2c6fe0bd 317 { "_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS, SYSCONF },
9d141cae
UD
318#endif
319#ifdef _SC_SAVED_IDS
2c6fe0bd 320 { "_POSIX_SAVED_IDS", _SC_SAVED_IDS, SYSCONF },
9d141cae
UD
321#endif
322#ifdef _SC_SELECT
2c6fe0bd 323 { "_POSIX_SELECT", _SC_SELECT, SYSCONF },
9d141cae
UD
324#endif
325#ifdef _SC_SEMAPHORES
2c6fe0bd 326 { "_POSIX_SEMAPHORES", _SC_SEMAPHORES, SYSCONF },
9d141cae
UD
327#endif
328#ifdef _SC_SHARED_MEMORY_OBJECTS
2c6fe0bd 329 { "_POSIX_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS, SYSCONF },
9d141cae
UD
330#endif
331#ifdef _SC_SSIZE_MAX
2c6fe0bd 332 { "_POSIX_SSIZE_MAX", _SC_SSIZE_MAX, SYSCONF },
9d141cae
UD
333#endif
334#ifdef _SC_STREAM_MAX
2c6fe0bd 335 { "_POSIX_STREAM_MAX", _SC_STREAM_MAX, SYSCONF },
9d141cae
UD
336#endif
337#ifdef _SC_SYNCHRONIZED_IO
2c6fe0bd 338 { "_POSIX_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO, SYSCONF },
9d141cae
UD
339#endif
340#ifdef _SC_THREADS
23396375 341 { "_POSIX_THREADS", _SC_THREADS, SYSCONF },
9d141cae
UD
342#endif
343#ifdef _SC_THREAD_ATTR_STACKADDR
23396375 344 { "_POSIX_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR, SYSCONF },
9d141cae
UD
345#endif
346#ifdef _SC_THREAD_ATTR_STACKSIZE
23396375 347 { "_POSIX_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE, SYSCONF },
9d141cae
UD
348#endif
349#ifdef _SC_THREAD_PRIORITY_SCHEDULING
23396375 350 { "_POSIX_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING, SYSCONF },
9d141cae
UD
351#endif
352#ifdef _SC_THREAD_PRIO_INHERIT
23396375 353 { "_POSIX_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT, SYSCONF },
9d141cae
UD
354#endif
355#ifdef _SC_THREAD_PRIO_PROTECT
23396375 356 { "_POSIX_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT, SYSCONF },
9d141cae 357#endif
6cbe890a
UD
358#ifdef _SC_THREAD_ROBUST_PRIO_INHERIT
359 { "_POSIX_THREAD_ROBUST_PRIO_INHERIT", _SC_THREAD_ROBUST_PRIO_INHERIT,
360 SYSCONF },
361#endif
362#ifdef _SC_THREAD_ROBUST_PRIO_PROTECT
363 { "_POSIX_THREAD_ROBUST_PRIO_PROTECT", _SC_THREAD_ROBUST_PRIO_PROTECT,
364 SYSCONF },
365#endif
9d141cae 366#ifdef _SC_THREAD_PROCESS_SHARED
23396375 367 { "_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED, SYSCONF },
9d141cae
UD
368#endif
369#ifdef _SC_THREAD_SAFE_FUNCTIONS
2c6fe0bd 370 { "_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS, SYSCONF },
9d141cae
UD
371#endif
372#ifdef _SC_TIMERS
2c6fe0bd 373 { "_POSIX_TIMERS", _SC_TIMERS, SYSCONF },
9d141cae 374#endif
a3bbce5b
UD
375#ifdef _SC_TIMER_MAX
376 { "TIMER_MAX", _SC_TIMER_MAX, SYSCONF },
377#endif
9d141cae 378#ifdef _SC_TZNAME_MAX
2c6fe0bd 379 { "_POSIX_TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF },
9d141cae
UD
380#endif
381#ifdef _SC_VERSION
2c6fe0bd 382 { "_POSIX_VERSION", _SC_VERSION, SYSCONF },
9d141cae
UD
383#endif
384#ifdef _SC_T_IOV_MAX
2c6fe0bd 385 { "_T_IOV_MAX", _SC_T_IOV_MAX, SYSCONF },
9d141cae
UD
386#endif
387#ifdef _SC_XOPEN_CRYPT
2c6fe0bd 388 { "_XOPEN_CRYPT", _SC_XOPEN_CRYPT, SYSCONF },
9d141cae
UD
389#endif
390#ifdef _SC_XOPEN_ENH_I18N
2c6fe0bd 391 { "_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N, SYSCONF },
9d141cae
UD
392#endif
393#ifdef _SC_XOPEN_LEGACY
9756dfe1 394 { "_XOPEN_LEGACY", _SC_XOPEN_LEGACY, SYSCONF },
9d141cae
UD
395#endif
396#ifdef _SC_XOPEN_REALTIME
9756dfe1 397 { "_XOPEN_REALTIME", _SC_XOPEN_REALTIME, SYSCONF },
9d141cae
UD
398#endif
399#ifdef _SC_XOPEN_REALTIME_THREADS
9756dfe1 400 { "_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS, SYSCONF },
9d141cae
UD
401#endif
402#ifdef _SC_XOPEN_SHM
2c6fe0bd 403 { "_XOPEN_SHM", _SC_XOPEN_SHM, SYSCONF },
9d141cae
UD
404#endif
405#ifdef _SC_XOPEN_UNIX
2c6fe0bd 406 { "_XOPEN_UNIX", _SC_XOPEN_UNIX, SYSCONF },
9d141cae
UD
407#endif
408#ifdef _SC_XOPEN_VERSION
2c6fe0bd 409 { "_XOPEN_VERSION", _SC_XOPEN_VERSION, SYSCONF },
9d141cae
UD
410#endif
411#ifdef _SC_XOPEN_XCU_VERSION
2c6fe0bd 412 { "_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION, SYSCONF },
9d141cae
UD
413#endif
414#ifdef _SC_XOPEN_XPG2
2c6fe0bd 415 { "_XOPEN_XPG2", _SC_XOPEN_XPG2, SYSCONF },
9d141cae
UD
416#endif
417#ifdef _SC_XOPEN_XPG3
2c6fe0bd 418 { "_XOPEN_XPG3", _SC_XOPEN_XPG3, SYSCONF },
9d141cae
UD
419#endif
420#ifdef _SC_XOPEN_XPG4
2c6fe0bd 421 { "_XOPEN_XPG4", _SC_XOPEN_XPG4, SYSCONF },
9d141cae 422#endif
036cc82f 423 /* POSIX.2 */
9d141cae 424#ifdef _SC_BC_BASE_MAX
036cc82f 425 { "BC_BASE_MAX", _SC_BC_BASE_MAX, SYSCONF },
9d141cae
UD
426#endif
427#ifdef _SC_BC_DIM_MAX
036cc82f 428 { "BC_DIM_MAX", _SC_BC_DIM_MAX, SYSCONF },
9d141cae
UD
429#endif
430#ifdef _SC_BC_SCALE_MAX
036cc82f 431 { "BC_SCALE_MAX", _SC_BC_SCALE_MAX, SYSCONF },
9d141cae
UD
432#endif
433#ifdef _SC_BC_STRING_MAX
036cc82f 434 { "BC_STRING_MAX", _SC_BC_STRING_MAX, SYSCONF },
9d141cae 435#endif
160698e2 436 { "CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX, SYSCONF },
9d141cae 437#ifdef _SC_COLL_WEIGHTS_MAX
036cc82f 438 { "COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX, SYSCONF },
9d141cae
UD
439#endif
440#ifdef _SC_EQUIV_CLASS_MAX
036cc82f 441 { "EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX, SYSCONF },
9d141cae
UD
442#endif
443#ifdef _SC_EXPR_NEST_MAX
036cc82f 444 { "EXPR_NEST_MAX", _SC_EXPR_NEST_MAX, SYSCONF },
9d141cae
UD
445#endif
446#ifdef _SC_LINE_MAX
036cc82f 447 { "LINE_MAX", _SC_LINE_MAX, SYSCONF },
9d141cae
UD
448#endif
449#ifdef _SC_BC_BASE_MAX
2c6fe0bd 450 { "POSIX2_BC_BASE_MAX", _SC_BC_BASE_MAX, SYSCONF },
9d141cae
UD
451#endif
452#ifdef _SC_BC_DIM_MAX
2c6fe0bd 453 { "POSIX2_BC_DIM_MAX", _SC_BC_DIM_MAX, SYSCONF },
9d141cae
UD
454#endif
455#ifdef _SC_BC_SCALE_MAX
2c6fe0bd 456 { "POSIX2_BC_SCALE_MAX", _SC_BC_SCALE_MAX, SYSCONF },
9d141cae
UD
457#endif
458#ifdef _SC_BC_STRING_MAX
2c6fe0bd 459 { "POSIX2_BC_STRING_MAX", _SC_BC_STRING_MAX, SYSCONF },
9d141cae
UD
460#endif
461#ifdef _SC_2_CHAR_TERM
2c6fe0bd 462 { "POSIX2_CHAR_TERM", _SC_2_CHAR_TERM, SYSCONF },
9d141cae
UD
463#endif
464#ifdef _SC_COLL_WEIGHTS_MAX
2c6fe0bd 465 { "POSIX2_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX, SYSCONF },
9d141cae
UD
466#endif
467#ifdef _SC_2_C_BIND
036cc82f 468 { "POSIX2_C_BIND", _SC_2_C_BIND, SYSCONF },
9d141cae
UD
469#endif
470#ifdef _SC_2_C_DEV
036cc82f 471 { "POSIX2_C_DEV", _SC_2_C_DEV, SYSCONF },
9d141cae
UD
472#endif
473#ifdef _SC_2_C_VERSION
2c6fe0bd 474 { "POSIX2_C_VERSION", _SC_2_C_VERSION, SYSCONF },
9d141cae
UD
475#endif
476#ifdef _SC_EXPR_NEST_MAX
2c6fe0bd 477 { "POSIX2_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX, SYSCONF },
9d141cae
UD
478#endif
479#ifdef _SC_2_FORT_DEV
036cc82f 480 { "POSIX2_FORT_DEV", _SC_2_FORT_DEV, SYSCONF },
9d141cae
UD
481#endif
482#ifdef _SC_2_FORT_RUN
036cc82f 483 { "POSIX2_FORT_RUN", _SC_2_FORT_RUN, SYSCONF },
9d141cae
UD
484#endif
485#ifdef _SC_LINE_MAX
a3bbce5b 486 { "_POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
d76da20f 487 { "POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
9d141cae
UD
488#endif
489#ifdef _SC_2_LOCALEDEF
036cc82f 490 { "POSIX2_LOCALEDEF", _SC_2_LOCALEDEF, SYSCONF },
9d141cae
UD
491#endif
492#ifdef _SC_RE_DUP_MAX
2c6fe0bd 493 { "POSIX2_RE_DUP_MAX", _SC_RE_DUP_MAX, SYSCONF },
9d141cae
UD
494#endif
495#ifdef _SC_2_SW_DEV
036cc82f 496 { "POSIX2_SW_DEV", _SC_2_SW_DEV, SYSCONF },
9d141cae
UD
497#endif
498#ifdef _SC_2_UPE
2c6fe0bd 499 { "POSIX2_UPE", _SC_2_UPE, SYSCONF },
9d141cae
UD
500#endif
501#ifdef _SC_2_VERSION
2c6fe0bd 502 { "POSIX2_VERSION", _SC_2_VERSION, SYSCONF },
9d141cae
UD
503#endif
504#ifdef _SC_RE_DUP_MAX
2c6fe0bd 505 { "RE_DUP_MAX", _SC_RE_DUP_MAX, SYSCONF },
9d141cae 506#endif
28f540f4 507
9d141cae 508#ifdef _CS_PATH
28f540f4 509 { "PATH", _CS_PATH, CONFSTR },
2c6fe0bd 510 { "CS_PATH", _CS_PATH, CONFSTR },
9d141cae 511#endif
28f540f4 512
dfd2257a 513 /* LFS */
9d141cae 514#ifdef _CS_LFS_CFLAGS
dfd2257a 515 { "LFS_CFLAGS", _CS_LFS_CFLAGS, CONFSTR },
9d141cae
UD
516#endif
517#ifdef _CS_LFS_LDFLAGS
dfd2257a 518 { "LFS_LDFLAGS", _CS_LFS_LDFLAGS, CONFSTR },
9d141cae
UD
519#endif
520#ifdef _CS_LFS_LIBS
dfd2257a 521 { "LFS_LIBS", _CS_LFS_LIBS, CONFSTR },
9d141cae
UD
522#endif
523#ifdef _CS_LFS_LINTFLAGS
dfd2257a 524 { "LFS_LINTFLAGS", _CS_LFS_LINTFLAGS, CONFSTR },
9d141cae
UD
525#endif
526#ifdef _CS_LFS64_CFLAGS
dfd2257a 527 { "LFS64_CFLAGS", _CS_LFS64_CFLAGS, CONFSTR },
9d141cae
UD
528#endif
529#ifdef _CS_LFS64_LDFLAGS
dfd2257a 530 { "LFS64_LDFLAGS", _CS_LFS64_LDFLAGS, CONFSTR },
9d141cae
UD
531#endif
532#ifdef _CS_LFS64_LIBS
dfd2257a 533 { "LFS64_LIBS", _CS_LFS64_LIBS, CONFSTR },
9d141cae
UD
534#endif
535#ifdef _CS_LFS64_LINTFLAGS
dfd2257a 536 { "LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS, CONFSTR },
9d141cae 537#endif
dfd2257a 538
9756dfe1 539 /* Programming environments. */
26b62243
UD
540#ifdef _CS_V5_WIDTH_RESTRICTED_ENVS
541 { "_XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
542 { "XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
543#endif
544
9d141cae 545#ifdef _SC_XBS5_ILP32_OFF32
a3bbce5b 546 { "_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32, SYSCONF },
9d141cae
UD
547#endif
548#ifdef _CS_XBS5_ILP32_OFF32_CFLAGS
9756dfe1 549 { "XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS, CONFSTR },
9d141cae
UD
550#endif
551#ifdef _CS_XBS5_ILP32_OFF32_LDFLAGS
9756dfe1 552 { "XBS5_ILP32_OFF32_LDFLAGS", _CS_XBS5_ILP32_OFF32_LDFLAGS, CONFSTR },
9d141cae
UD
553#endif
554#ifdef _CS_XBS5_ILP32_OFF32_LIBS
9756dfe1 555 { "XBS5_ILP32_OFF32_LIBS", _CS_XBS5_ILP32_OFF32_LIBS, CONFSTR },
9d141cae
UD
556#endif
557#ifdef _CS_XBS5_ILP32_OFF32_LINTFLAGS
9756dfe1 558 { "XBS5_ILP32_OFF32_LINTFLAGS", _CS_XBS5_ILP32_OFF32_LINTFLAGS, CONFSTR },
9d141cae 559#endif
9756dfe1 560
9d141cae 561#ifdef _SC_XBS5_ILP32_OFFBIG
a3bbce5b 562 { "_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG, SYSCONF },
9d141cae
UD
563#endif
564#ifdef _CS_XBS5_ILP32_OFFBIG_CFLAGS
9756dfe1 565 { "XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS, CONFSTR },
9d141cae
UD
566#endif
567#ifdef _CS_XBS5_ILP32_OFFBIG_LDFLAGS
9756dfe1 568 { "XBS5_ILP32_OFFBIG_LDFLAGS", _CS_XBS5_ILP32_OFFBIG_LDFLAGS, CONFSTR },
9d141cae
UD
569#endif
570#ifdef _CS_XBS5_ILP32_OFFBIG_LIBS
9756dfe1 571 { "XBS5_ILP32_OFFBIG_LIBS", _CS_XBS5_ILP32_OFFBIG_LIBS, CONFSTR },
9d141cae
UD
572#endif
573#ifdef _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
9756dfe1 574 { "XBS5_ILP32_OFFBIG_LINTFLAGS", _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
9d141cae 575#endif
9756dfe1 576
9d141cae 577#ifdef _SC_XBS5_LP64_OFF64
a3bbce5b 578 { "_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64, SYSCONF },
9d141cae
UD
579#endif
580#ifdef _CS_XBS5_LP64_OFF64_CFLAGS
9756dfe1 581 { "XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS, CONFSTR },
9d141cae
UD
582#endif
583#ifdef _CS_XBS5_LP64_OFF64_LDFLAGS
9756dfe1 584 { "XBS5_LP64_OFF64_LDFLAGS", _CS_XBS5_LP64_OFF64_LDFLAGS, CONFSTR },
9d141cae
UD
585#endif
586#ifdef _CS_XBS5_LP64_OFF64_LIBS
9756dfe1 587 { "XBS5_LP64_OFF64_LIBS", _CS_XBS5_LP64_OFF64_LIBS, CONFSTR },
9d141cae
UD
588#endif
589#ifdef _CS_XBS5_LP64_OFF64_LINTFLAGS
9756dfe1 590 { "XBS5_LP64_OFF64_LINTFLAGS", _CS_XBS5_LP64_OFF64_LINTFLAGS, CONFSTR },
9d141cae 591#endif
9756dfe1 592
9d141cae 593#ifdef _SC_XBS5_LPBIG_OFFBIG
a3bbce5b 594 { "_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG, SYSCONF },
9d141cae
UD
595#endif
596#ifdef _CS_XBS5_LPBIG_OFFBIG_CFLAGS
9756dfe1 597 { "XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS, CONFSTR },
9d141cae
UD
598#endif
599#ifdef _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
9756dfe1 600 { "XBS5_LPBIG_OFFBIG_LDFLAGS", _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
9d141cae
UD
601#endif
602#ifdef _CS_XBS5_LPBIG_OFFBIG_LIBS
9756dfe1 603 { "XBS5_LPBIG_OFFBIG_LIBS", _CS_XBS5_LPBIG_OFFBIG_LIBS, CONFSTR },
9d141cae
UD
604#endif
605#ifdef _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
9756dfe1 606 { "XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
9d141cae 607#endif
9756dfe1 608
d20f21a2
UD
609#ifdef _SC_V6_ILP32_OFF32
610 { "_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32, SYSCONF },
611#endif
612#ifdef _CS_POSIX_V6_ILP32_OFF32_CFLAGS
613 { "POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS, CONFSTR },
614#endif
615#ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
616 { "POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, CONFSTR },
617#endif
618#ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS
619 { "POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS, CONFSTR },
620#endif
621#ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
622 { "POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, CONFSTR },
623#endif
624
280f4add
UD
625#ifdef _CS_V6_WIDTH_RESTRICTED_ENVS
626 { "_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR },
d5078b9f 627 { "POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR },
280f4add
UD
628#endif
629
d20f21a2
UD
630#ifdef _SC_V6_ILP32_OFFBIG
631 { "_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG, SYSCONF },
632#endif
633#ifdef _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
634 { "POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, CONFSTR },
635#endif
636#ifdef _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
637 { "POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, CONFSTR },
638#endif
639#ifdef _CS_POSIX_V6_ILP32_OFFBIG_LIBS
640 { "POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS, CONFSTR },
641#endif
642#ifdef _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
643 { "POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
644#endif
645
646#ifdef _SC_V6_LP64_OFF64
647 { "_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64, SYSCONF },
648#endif
649#ifdef _CS_POSIX_V6_LP64_OFF64_CFLAGS
650 { "POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS, CONFSTR },
651#endif
652#ifdef _CS_POSIX_V6_LP64_OFF64_LDFLAGS
653 { "POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS, CONFSTR },
654#endif
655#ifdef _CS_POSIX_V6_LP64_OFF64_LIBS
656 { "POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS, CONFSTR },
657#endif
658#ifdef _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
659 { "POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, CONFSTR },
660#endif
661
662#ifdef _SC_V6_LPBIG_OFFBIG
663 { "_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG, SYSCONF },
664#endif
665#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
666 { "POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, CONFSTR },
667#endif
668#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
669 { "POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
670#endif
671#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
672 { "POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, CONFSTR },
673#endif
a3bbce5b
UD
674#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
675 { "POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
d20f21a2
UD
676#endif
677
26b62243
UD
678#ifdef _SC_V7_ILP32_OFF32
679 { "_POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32, SYSCONF },
680#endif
681#ifdef _CS_POSIX_V7_ILP32_OFF32_CFLAGS
682 { "POSIX_V7_ILP32_OFF32_CFLAGS", _CS_POSIX_V7_ILP32_OFF32_CFLAGS, CONFSTR },
683#endif
684#ifdef _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
685 { "POSIX_V7_ILP32_OFF32_LDFLAGS", _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, CONFSTR },
686#endif
687#ifdef _CS_POSIX_V7_ILP32_OFF32_LIBS
688 { "POSIX_V7_ILP32_OFF32_LIBS", _CS_POSIX_V7_ILP32_OFF32_LIBS, CONFSTR },
689#endif
690#ifdef _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
691 { "POSIX_V7_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, CONFSTR },
692#endif
693
694#ifdef _CS_V7_WIDTH_RESTRICTED_ENVS
695 { "_POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
696 { "POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
697#endif
698
699#ifdef _SC_V7_ILP32_OFFBIG
700 { "_POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG, SYSCONF },
701#endif
702#ifdef _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
703 { "POSIX_V7_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, CONFSTR },
704#endif
705#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
706 { "POSIX_V7_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, CONFSTR },
707#endif
708#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LIBS
709 { "POSIX_V7_ILP32_OFFBIG_LIBS", _CS_POSIX_V7_ILP32_OFFBIG_LIBS, CONFSTR },
710#endif
711#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
712 { "POSIX_V7_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
713#endif
714
715#ifdef _SC_V7_LP64_OFF64
716 { "_POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64, SYSCONF },
717#endif
718#ifdef _CS_POSIX_V7_LP64_OFF64_CFLAGS
719 { "POSIX_V7_LP64_OFF64_CFLAGS", _CS_POSIX_V7_LP64_OFF64_CFLAGS, CONFSTR },
720#endif
721#ifdef _CS_POSIX_V7_LP64_OFF64_LDFLAGS
722 { "POSIX_V7_LP64_OFF64_LDFLAGS", _CS_POSIX_V7_LP64_OFF64_LDFLAGS, CONFSTR },
723#endif
724#ifdef _CS_POSIX_V7_LP64_OFF64_LIBS
725 { "POSIX_V7_LP64_OFF64_LIBS", _CS_POSIX_V7_LP64_OFF64_LIBS, CONFSTR },
726#endif
727#ifdef _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
728 { "POSIX_V7_LP64_OFF64_LINTFLAGS", _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, CONFSTR },
729#endif
730
731#ifdef _SC_V7_LPBIG_OFFBIG
732 { "_POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG, SYSCONF },
733#endif
734#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
735 { "POSIX_V7_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, CONFSTR },
736#endif
737#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
738 { "POSIX_V7_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
739#endif
740#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
741 { "POSIX_V7_LPBIG_OFFBIG_LIBS", _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, CONFSTR },
742#endif
743#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
744 { "POSIX_V7_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
745#endif
746
b3ae0650 747#ifdef _SC_ADVISORY_INFO
a3bbce5b 748 { "_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO, SYSCONF },
b3ae0650
UD
749#endif
750#ifdef _SC_BARRIERS
a3bbce5b 751 { "_POSIX_BARRIERS", _SC_BARRIERS, SYSCONF },
b3ae0650
UD
752#endif
753#ifdef _SC_BASE
a3bbce5b 754 { "_POSIX_BASE", _SC_BASE, SYSCONF },
b3ae0650
UD
755#endif
756#ifdef _SC_C_LANG_SUPPORT
a3bbce5b 757 { "_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT, SYSCONF },
b3ae0650
UD
758#endif
759#ifdef _SC_C_LANG_SUPPORT_R
a3bbce5b 760 { "_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R, SYSCONF },
b3ae0650
UD
761#endif
762#ifdef _SC_CLOCK_SELECTION
a3bbce5b 763 { "_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION, SYSCONF },
b3ae0650
UD
764#endif
765#ifdef _SC_CPUTIME
a3bbce5b 766 { "_POSIX_CPUTIME", _SC_CPUTIME, SYSCONF },
b3ae0650
UD
767#endif
768#ifdef _SC_THREAD_CPUTIME
a3bbce5b 769 { "_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME, SYSCONF },
b3ae0650
UD
770#endif
771#ifdef _SC_DEVICE_SPECIFIC
a3bbce5b 772 { "_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC, SYSCONF },
b3ae0650
UD
773#endif
774#ifdef _SC_DEVICE_SPECIFIC_R
a3bbce5b 775 { "_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R, SYSCONF },
b3ae0650
UD
776#endif
777#ifdef _SC_FD_MGMT
a3bbce5b 778 { "_POSIX_FD_MGMT", _SC_FD_MGMT, SYSCONF },
b3ae0650
UD
779#endif
780#ifdef _SC_FIFO
a3bbce5b 781 { "_POSIX_FIFO", _SC_FIFO, SYSCONF },
b3ae0650
UD
782#endif
783#ifdef _SC_PIPE
a3bbce5b 784 { "_POSIX_PIPE", _SC_PIPE, SYSCONF },
b3ae0650
UD
785#endif
786#ifdef _SC_FILE_ATTRIBUTES
a3bbce5b 787 { "_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES, SYSCONF },
b3ae0650
UD
788#endif
789#ifdef _SC_FILE_LOCKING
a3bbce5b 790 { "_POSIX_FILE_LOCKING", _SC_FILE_LOCKING, SYSCONF },
b3ae0650
UD
791#endif
792#ifdef _SC_FILE_SYSTEM
a3bbce5b 793 { "_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM, SYSCONF },
b3ae0650
UD
794#endif
795#ifdef _SC_MONOTONIC_CLOCK
a3bbce5b 796 { "_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK, SYSCONF },
b3ae0650 797#endif
a3bbce5b
UD
798#ifdef _SC_MULTI_PROCESS
799 { "_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS, SYSCONF },
b3ae0650
UD
800#endif
801#ifdef _SC_SINGLE_PROCESS
a3bbce5b 802 { "_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS, SYSCONF },
b3ae0650
UD
803#endif
804#ifdef _SC_NETWORKING
a3bbce5b 805 { "_POSIX_NETWORKING", _SC_NETWORKING, SYSCONF },
b3ae0650
UD
806#endif
807#ifdef _SC_READER_WRITER_LOCKS
a3bbce5b 808 { "_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS, SYSCONF },
b3ae0650
UD
809#endif
810#ifdef _SC_SPIN_LOCKS
a3bbce5b 811 { "_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS, SYSCONF },
b3ae0650 812#endif
a3bbce5b
UD
813#ifdef _SC_REGEXP
814 { "_POSIX_REGEXP", _SC_REGEXP, SYSCONF },
b3ae0650 815#endif
a3bbce5b
UD
816#ifdef _SC_REGEX_VERSION
817 { "_REGEX_VERSION", _SC_REGEX_VERSION, SYSCONF },
b3ae0650
UD
818#endif
819#ifdef _SC_SHELL
a3bbce5b 820 { "_POSIX_SHELL", _SC_SHELL, SYSCONF },
b3ae0650
UD
821#endif
822#ifdef _SC_SIGNALS
a3bbce5b 823 { "_POSIX_SIGNALS", _SC_SIGNALS, SYSCONF },
b3ae0650
UD
824#endif
825#ifdef _SC_SPAWN
a3bbce5b 826 { "_POSIX_SPAWN", _SC_SPAWN, SYSCONF },
b3ae0650
UD
827#endif
828#ifdef _SC_SPORADIC_SERVER
a3bbce5b 829 { "_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER, SYSCONF },
b3ae0650
UD
830#endif
831#ifdef _SC_THREAD_SPORADIC_SERVER
a3bbce5b 832 { "_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER, SYSCONF },
b3ae0650
UD
833#endif
834#ifdef _SC_SYSTEM_DATABASE
a3bbce5b 835 { "_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE, SYSCONF },
b3ae0650
UD
836#endif
837#ifdef _SC_SYSTEM_DATABASE_R
a3bbce5b 838 { "_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R, SYSCONF },
b3ae0650
UD
839#endif
840#ifdef _SC_TIMEOUTS
a3bbce5b 841 { "_POSIX_TIMEOUTS", _SC_TIMEOUTS, SYSCONF },
b3ae0650
UD
842#endif
843#ifdef _SC_TYPED_MEMORY_OBJECTS
a3bbce5b 844 { "_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS, SYSCONF },
b3ae0650
UD
845#endif
846#ifdef _SC_USER_GROUPS
a3bbce5b 847 { "_POSIX_USER_GROUPS", _SC_USER_GROUPS, SYSCONF },
b3ae0650
UD
848#endif
849#ifdef _SC_USER_GROUPS_R
a3bbce5b
UD
850 { "_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R, SYSCONF },
851#endif
852#ifdef _SC_2_PBS
853 { "POSIX2_PBS", _SC_2_PBS, SYSCONF },
854#endif
855#ifdef _SC_2_PBS_ACCOUNTING
856 { "POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING, SYSCONF },
857#endif
858#ifdef _SC_2_PBS_LOCATE
859 { "POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE, SYSCONF },
860#endif
861#ifdef _SC_2_PBS_TRACK
862 { "POSIX2_PBS_TRACK", _SC_2_PBS_TRACK, SYSCONF },
863#endif
864#ifdef _SC_2_PBS_MESSAGE
865 { "POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE, SYSCONF },
866#endif
867#ifdef _SC_SYMLOOP_MAX
868 { "SYMLOOP_MAX", _SC_SYMLOOP_MAX, SYSCONF },
869#endif
870#ifdef _SC_STREAM_MAX
871 { "STREAM_MAX", _SC_STREAM_MAX, SYSCONF },
872#endif
873#ifdef _SC_AIO_LISTIO_MAX
874 { "AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX, SYSCONF },
875#endif
876#ifdef _SC_AIO_MAX
877 { "AIO_MAX", _SC_AIO_MAX, SYSCONF },
878#endif
879#ifdef _SC_AIO_PRIO_DELTA_MAX
880 { "AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX, SYSCONF },
881#endif
882#ifdef _SC_DELAYTIMER_MAX
883 { "DELAYTIMER_MAX", _SC_DELAYTIMER_MAX, SYSCONF },
884#endif
885#ifdef _SC_HOST_NAME_MAX
886 { "HOST_NAME_MAX", _SC_HOST_NAME_MAX, SYSCONF },
887#endif
888#ifdef _SC_LOGIN_NAME_MAX
889 { "LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF },
890#endif
891#ifdef _SC_MQ_OPEN_MAX
892 { "MQ_OPEN_MAX", _SC_MQ_OPEN_MAX, SYSCONF },
893#endif
894#ifdef _SC_MQ_PRIO_MAX
895 { "MQ_PRIO_MAX", _SC_MQ_PRIO_MAX, SYSCONF },
896#endif
897#ifdef _SC_DEVICE_IO
898 { "_POSIX_DEVICE_IO", _SC_DEVICE_IO, SYSCONF },
899#endif
900#ifdef _SC_TRACE
901 { "_POSIX_TRACE", _SC_TRACE, SYSCONF },
902#endif
903#ifdef _SC_TRACE_EVENT_FILTER
904 { "_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER, SYSCONF },
905#endif
906#ifdef _SC_TRACE_INHERIT
907 { "_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT, SYSCONF },
908#endif
909#ifdef _SC_TRACE_LOG
910 { "_POSIX_TRACE_LOG", _SC_TRACE_LOG, SYSCONF },
911#endif
912#ifdef _SC_RTSIG_MAX
913 { "RTSIG_MAX", _SC_RTSIG_MAX, SYSCONF },
914#endif
915#ifdef _SC_SEM_NSEMS_MAX
916 { "SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX, SYSCONF },
917#endif
918#ifdef _SC_SEM_VALUE_MAX
919 { "SEM_VALUE_MAX", _SC_SEM_VALUE_MAX, SYSCONF },
920#endif
921#ifdef _SC_SIGQUEUE_MAX
922 { "SIGQUEUE_MAX", _SC_SIGQUEUE_MAX, SYSCONF },
923#endif
924#ifdef _PC_FILESIZEBITS
925 { "FILESIZEBITS", _PC_FILESIZEBITS, PATHCONF },
b3ae0650 926#endif
a3bbce5b
UD
927#ifdef _PC_ALLOC_SIZE_MIN
928 { "POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN, PATHCONF },
b3ae0650 929#endif
a3bbce5b
UD
930#ifdef _PC_REC_INCR_XFER_SIZE
931 { "POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE, PATHCONF },
b3ae0650 932#endif
a3bbce5b
UD
933#ifdef _PC_REC_MAX_XFER_SIZE
934 { "POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE, PATHCONF },
b3ae0650 935#endif
a3bbce5b
UD
936#ifdef _PC_REC_MIN_XFER_SIZE
937 { "POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE, PATHCONF },
b3ae0650 938#endif
a3bbce5b
UD
939#ifdef _PC_REC_XFER_ALIGN
940 { "POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN, PATHCONF },
b3ae0650 941#endif
a3bbce5b
UD
942#ifdef _PC_SYMLINK_MAX
943 { "SYMLINK_MAX", _PC_SYMLINK_MAX, PATHCONF },
b3ae0650 944#endif
2067577c
UD
945#ifdef _CS_GNU_LIBC_VERSION
946 { "GNU_LIBC_VERSION", _CS_GNU_LIBC_VERSION, CONFSTR },
947#endif
948#ifdef _CS_GNU_LIBPTHREAD_VERSION
949 { "GNU_LIBPTHREAD_VERSION", _CS_GNU_LIBPTHREAD_VERSION, CONFSTR },
950#endif
564cd8b6
UD
951#ifdef _PC_2_SYMLINKS
952 { "POSIX2_SYMLINKS", _PC_2_SYMLINKS, PATHCONF },
953#endif
b3ae0650 954
bf067910
UD
955#ifdef _SC_LEVEL1_ICACHE_SIZE
956 { "LEVEL1_ICACHE_SIZE", _SC_LEVEL1_ICACHE_SIZE, SYSCONF },
957#endif
958#ifdef _SC_LEVEL1_ICACHE_ASSOC
959 { "LEVEL1_ICACHE_ASSOC", _SC_LEVEL1_ICACHE_ASSOC, SYSCONF },
960#endif
961#ifdef _SC_LEVEL1_ICACHE_LINESIZE
962 { "LEVEL1_ICACHE_LINESIZE", _SC_LEVEL1_ICACHE_LINESIZE, SYSCONF },
963#endif
964#ifdef _SC_LEVEL1_DCACHE_SIZE
965 { "LEVEL1_DCACHE_SIZE", _SC_LEVEL1_DCACHE_SIZE, SYSCONF },
966#endif
967#ifdef _SC_LEVEL1_DCACHE_ASSOC
968 { "LEVEL1_DCACHE_ASSOC", _SC_LEVEL1_DCACHE_ASSOC, SYSCONF },
969#endif
970#ifdef _SC_LEVEL1_DCACHE_LINESIZE
971 { "LEVEL1_DCACHE_LINESIZE", _SC_LEVEL1_DCACHE_LINESIZE, SYSCONF },
972#endif
973#ifdef _SC_LEVEL2_CACHE_SIZE
974 { "LEVEL2_CACHE_SIZE", _SC_LEVEL2_CACHE_SIZE, SYSCONF },
975#endif
976#ifdef _SC_LEVEL2_CACHE_ASSOC
977 { "LEVEL2_CACHE_ASSOC", _SC_LEVEL2_CACHE_ASSOC, SYSCONF },
978#endif
979#ifdef _SC_LEVEL2_CACHE_LINESIZE
980 { "LEVEL2_CACHE_LINESIZE", _SC_LEVEL2_CACHE_LINESIZE, SYSCONF },
981#endif
982#ifdef _SC_LEVEL3_CACHE_SIZE
983 { "LEVEL3_CACHE_SIZE", _SC_LEVEL3_CACHE_SIZE, SYSCONF },
984#endif
985#ifdef _SC_LEVEL3_CACHE_ASSOC
986 { "LEVEL3_CACHE_ASSOC", _SC_LEVEL3_CACHE_ASSOC, SYSCONF },
987#endif
988#ifdef _SC_LEVEL3_CACHE_LINESIZE
989 { "LEVEL3_CACHE_LINESIZE", _SC_LEVEL3_CACHE_LINESIZE, SYSCONF },
990#endif
991#ifdef _SC_LEVEL4_CACHE_SIZE
992 { "LEVEL4_CACHE_SIZE", _SC_LEVEL4_CACHE_SIZE, SYSCONF },
993#endif
994#ifdef _SC_LEVEL4_CACHE_ASSOC
995 { "LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC, SYSCONF },
996#endif
5b74caf6
UD
997#ifdef _SC_LEVEL4_CACHE_LINESIZE
998 { "LEVEL4_CACHE_LINESIZE", _SC_LEVEL4_CACHE_LINESIZE, SYSCONF },
999#endif
bf067910 1000
60e4523a
UD
1001#ifdef _SC_IPV6
1002 { "IPV6", _SC_IPV6, SYSCONF },
1003#endif
1004#ifdef _SC_RAW_SOCKETS
1005 { "RAW_SOCKETS", _SC_RAW_SOCKETS, SYSCONF },
1006#endif
bf067910 1007
28f540f4
RM
1008 { NULL, 0, SYSCONF }
1009 };
1010
d20f21a2 1011
26b62243 1012static const struct { const char *name; int num; } specs[] =
d20f21a2 1013 {
26b62243
UD
1014 { "XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32 },
1015 { "XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG },
1016 { "XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64 },
1017 { "XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG },
28f367c4
UD
1018 { "POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32 },
1019 { "POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG },
1020 { "POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64 },
26b62243
UD
1021 { "POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG },
1022 { "POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32 },
1023 { "POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG },
1024 { "POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64 },
1025 { "POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG },
d20f21a2
UD
1026 };
1027static const int nspecs = sizeof (specs) / sizeof (specs[0]);
1028
036cc82f
RM
1029extern const char *__progname;
1030
28f540f4
RM
1031
1032static void
036cc82f 1033usage (void)
28f540f4 1034{
d20f21a2
UD
1035 fprintf (stderr,
1036 _("Usage: %s [-v specification] variable_name [pathname]\n"),
1037 __progname);
9a593383
UD
1038 fprintf (stderr,
1039 _(" %s -a [pathname]\n"), __progname);
28f540f4
RM
1040 exit (2);
1041}
1042
26b62243 1043
9a593383
UD
1044static void
1045print_all (const char *path)
1046{
1047 register const struct conf *c;
1048 size_t clen;
1049 long int value;
1050 char *cvalue;
1051 for (c = vars; c->name != NULL; ++c) {
1052 printf("%-35s", c->name);
1053 switch (c->call) {
1054 case PATHCONF:
02bf610c
UD
1055 value = pathconf (path, c->call_name);
1056 if (value != -1) {
1057 printf("%ld", value);
1058 }
1059 printf("\n");
1060 break;
9a593383 1061 case SYSCONF:
02bf610c
UD
1062 value = sysconf (c->call_name);
1063 if (value == -1l) {
1064 if (c->call_name == _SC_UINT_MAX
1065 || c->call_name == _SC_ULONG_MAX)
1066 printf ("%lu", value);
1067 }
1068 else {
1069 printf ("%ld", value);
1070 }
1071 printf ("\n");
1072 break;
9a593383 1073 case CONFSTR:
02bf610c
UD
1074 clen = confstr (c->call_name, (char *) NULL, 0);
1075 cvalue = (char *) malloc (clen);
1076 if (cvalue == NULL)
1077 error (3, 0, _("memory exhausted"));
1078 if (confstr (c->call_name, cvalue, clen) != clen)
1079 error (3, errno, "confstr");
1080 printf ("%.*s\n", (int) clen, cvalue);
e7c8359e 1081 free (cvalue);
02bf610c 1082 break;
9a593383
UD
1083 }
1084 }
1085 exit (0);
1086}
1087
28f540f4 1088int
036cc82f 1089main (int argc, char *argv[])
28f540f4 1090{
036cc82f 1091 register const struct conf *c;
28f540f4 1092
9756dfe1
UD
1093 /* Set locale. Do not set LC_ALL because the other categories must
1094 not be affected (according to POSIX.2). */
1095 setlocale (LC_CTYPE, "");
1096 setlocale (LC_MESSAGES, "");
1097
1098 /* Initialize the message catalog. */
1099 textdomain (PACKAGE);
1100
1101 if (argc > 1 && strcmp (argv[1], "--version") == 0)
1102 {
cbbcaf23
UD
1103 printf ("getconf (GNU %s) %s\n", PACKAGE, VERSION);
1104 printf (gettext ("\
9756dfe1
UD
1105Copyright (C) %s Free Software Foundation, Inc.\n\
1106This is free software; see the source for copying conditions. There is NO\n\
1107warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
81fb02b0 1108"), "2012");
cbbcaf23
UD
1109 printf (gettext ("Written by %s.\n"), "Roland McGrath");
1110 return 0;
1111 }
1112
1113 if (argc > 1 && strcmp (argv[1], "--help") == 0)
1114 {
1115 printf (gettext ("\
1116Usage: getconf [-v SPEC] VAR\n\
1117 or: getconf [-v SPEC] PATH_VAR PATH\n\
1118\n\
1119Get the configuration value for variable VAR, or for variable PATH_VAR\n\
1120for path PATH. If SPEC is given, give values for compilation\n\
1121environment SPEC.\n\n"));
f60ddf9b
AS
1122 fputs (gettext ("For bug reporting instructions, please see:\n\
1123<http://www.gnu.org/software/libc/bugs.html>.\n"), stdout);
9756dfe1
UD
1124 return 0;
1125 }
1126
28f367c4
UD
1127 const char *getconf_dir = getenv ("GETCONF_DIR") ?: GETCONF_DIR;
1128 size_t getconf_dirlen = strlen (getconf_dir);
1129
1130 const char *spec = NULL;
1131 char buf[sizeof "POSIX_V6_LPBIG_OFFBIG"];
1132 char *argv0 = argv[0];
d20f21a2
UD
1133 if (argc > 1 && strncmp (argv[1], "-v", 2) == 0)
1134 {
d20f21a2
UD
1135 if (argv[1][2] == '\0')
1136 {
1137 if (argc < 3)
1138 usage ();
1139
1140 spec = argv[2];
1141 argv += 2;
1142 argc -= 2;
1143 }
1144 else
1145 {
1146 spec = &argv[1][2];
1147 argv += 1;
1148 argc += 1;
1149 }
28f367c4
UD
1150 }
1151 else
1152 {
1153 char default_name[getconf_dirlen + sizeof "/default"];
1154 memcpy (mempcpy (default_name, getconf_dir, getconf_dirlen),
13d91a6e 1155 "/default", sizeof "/default");
28f367c4
UD
1156 int len = readlink (default_name, buf, sizeof buf - 1);
1157 if (len > 0)
1158 {
1159 buf[len] = '\0';
1160 spec = buf;
1161 }
1162 }
d20f21a2 1163
28f367c4
UD
1164 /* Check for the specifications we know. */
1165 if (spec != NULL)
1166 {
1167 int i;
d20f21a2 1168 for (i = 0; i < nspecs; ++i)
28f367c4 1169 if (strcmp (spec, specs[i].name) == 0)
d20f21a2
UD
1170 break;
1171
1172 if (i == nspecs)
1173 error (2, 0, _("unknown specification \"%s\""), spec);
1174
28f367c4
UD
1175 switch (specs[i].num)
1176 {
26b62243
UD
1177#ifndef _XBS5_ILP32_OFF32
1178 case _SC_XBS5_ILP32_OFF32:
1179#endif
1180#ifndef _XBS5_ILP32_OFFBIG
1181 case _SC_XBS5_ILP32_OFFBIG:
1182#endif
1183#ifndef _XBS5_LP64_OFF64
1184 case _SC_XBS5_LP64_OFF64:
1185#endif
1186#ifndef _XBS5_LPBIG_OFFBIG
1187 case _SC_XBS5_LPBIG_OFFBIG:
1188#endif
28f367c4
UD
1189#ifndef _POSIX_V6_ILP32_OFF32
1190 case _SC_V6_ILP32_OFF32:
1191#endif
1192#ifndef _POSIX_V6_ILP32_OFFBIG
1193 case _SC_V6_ILP32_OFFBIG:
1194#endif
1195#ifndef _POSIX_V6_LP64_OFF64
1196 case _SC_V6_LP64_OFF64:
1197#endif
1198#ifndef _POSIX_V6_LPBIG_OFFBIG
1199 case _SC_V6_LPBIG_OFFBIG:
26b62243
UD
1200#endif
1201#ifndef _POSIX_V7_ILP32_OFF32
1202 case _SC_V7_ILP32_OFF32:
1203#endif
1204#ifndef _POSIX_V7_ILP32_OFFBIG
1205 case _SC_V7_ILP32_OFFBIG:
1206#endif
1207#ifndef _POSIX_V7_LP64_OFF64
1208 case _SC_V7_LP64_OFF64:
1209#endif
1210#ifndef _POSIX_V7_LPBIG_OFFBIG
1211 case _SC_V7_LPBIG_OFFBIG:
28f367c4
UD
1212#endif
1213 {
1214 const char *args[argc + 3];
1215 size_t spec_len = strlen (spec);
13d91a6e 1216 char getconf_name[getconf_dirlen + 1 + spec_len + 1];
28f367c4 1217 memcpy (mempcpy (mempcpy (getconf_name, getconf_dir,
13d91a6e
UD
1218 getconf_dirlen),
1219 "/", 1), spec, spec_len + 1);
28f367c4
UD
1220 args[0] = argv0;
1221 args[1] = "-v";
1222 args[2] = spec;
1223 memcpy (&args[3], &argv[1], argc * sizeof (argv[1]));
1224 execv (getconf_name, (char * const *) args);
1225 error (4, errno, _("Couldn't execute %s"), getconf_name);
1226 }
1227 default:
1228 break;
1229 }
d20f21a2
UD
1230 }
1231
9a593383
UD
1232 if (argc > 1 && strcmp (argv[1], "-a") == 0)
1233 {
1234 if (argc == 2)
1235 print_all ("/");
1236 else if (argc == 3)
1237 print_all (argv[2]);
1238 else
1239 usage ();
1240 }
1241
02bf610c
UD
1242 int ai = 1;
1243 if (argc > ai && strcmp (argv[ai], "--") == 0)
1244 ++ai;
1245
1246 if (argc - ai < 1 || argc - ai > 2)
28f540f4
RM
1247 usage ();
1248
1249 for (c = vars; c->name != NULL; ++c)
02bf610c 1250 if (strcmp (c->name, argv[ai]) == 0
bb958f59 1251 || (strncmp (c->name, "_POSIX_", 7) == 0
02bf610c 1252 && strcmp (c->name + 7, argv[ai]) == 0))
28f540f4
RM
1253 {
1254 long int value;
1255 size_t clen;
1256 char *cvalue;
1257 switch (c->call)
1258 {
1259 case PATHCONF:
02bf610c 1260 if (argc - ai < 2)
28f540f4 1261 usage ();
2eb45444 1262 errno = 0;
02bf610c 1263 value = pathconf (argv[ai + 1], c->call_name);
28f540f4 1264 if (value == -1)
2eb45444
UD
1265 {
1266 if (errno)
02bf610c 1267 error (3, errno, "pathconf: %s", argv[ai + 1]);
2eb45444
UD
1268 else
1269 puts (_("undefined"));
1270 }
1271 else
1272 printf ("%ld\n", value);
28f540f4
RM
1273 exit (0);
1274
1275 case SYSCONF:
02bf610c 1276 if (argc - ai > 1)
28f540f4
RM
1277 usage ();
1278 value = sysconf (c->call_name);
e4cf5070 1279 if (value == -1l)
6e4c40ba
UD
1280 {
1281 if (c->call_name == _SC_UINT_MAX
1282 || c->call_name == _SC_ULONG_MAX)
1283 printf ("%lu\n", value);
1284 else
1285 puts (_("undefined"));
1286 }
e4cf5070
UD
1287 else
1288 printf ("%ld\n", value);
28f540f4
RM
1289 exit (0);
1290
1291 case CONFSTR:
02bf610c 1292 if (argc - ai > 1)
28f540f4
RM
1293 usage ();
1294 clen = confstr (c->call_name, (char *) NULL, 0);
1295 cvalue = (char *) malloc (clen);
1296 if (cvalue == NULL)
036cc82f
RM
1297 error (3, 0, _("memory exhausted"));
1298
28f540f4 1299 if (confstr (c->call_name, cvalue, clen) != clen)
036cc82f
RM
1300 error (3, errno, "confstr");
1301
28f540f4
RM
1302 printf ("%.*s\n", (int) clen, cvalue);
1303 exit (0);
1304 }
1305 }
1306
02bf610c 1307 error (2, 0, _("Unrecognized variable `%s'"), argv[ai]);
036cc82f
RM
1308 /* NOTREACHED */
1309 return 2;
28f540f4 1310}