Blame posix/getconf.c

Packit 6c4009
/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   This program is free software; you can redistribute it and/or modify
Packit 6c4009
   it under the terms of the GNU General Public License as published
Packit 6c4009
   by the Free Software Foundation; version 2 of the License, or
Packit 6c4009
   (at your option) any later version.
Packit 6c4009
Packit 6c4009
   This program is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 6c4009
   GNU General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU General Public License
Packit 6c4009
   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#include <unistd.h>
Packit 6c4009
#include <errno.h>
Packit 6c4009
#include <error.h>
Packit 6c4009
#include <libintl.h>
Packit 6c4009
#include <locale.h>
Packit 6c4009
#include <string.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
#include <stdio.h>
Packit 6c4009
Packit 6c4009
#include "../version.h"
Packit 6c4009
#define PACKAGE _libc_intl_domainname
Packit 6c4009
Packit 6c4009
#define NEED_SPEC_ARRAY 1
Packit 6c4009
#include <posix-conf-vars.h>
Packit 6c4009
Packit 6c4009
/* If all of the environments are defined in environments.h, then we don't need
Packit 6c4009
   to bother with doing a runtime check for a specific environment.  */
Packit 6c4009
#if (defined _SC_V6_ILP32_OFF32 \
Packit 6c4009
     && defined _SC_V7_LPBIG_OFFBIG \
Packit 6c4009
     && defined _SC_XBS5_LP64_OFF64 \
Packit 6c4009
     && defined _SC_V6_LP64_OFF64 \
Packit 6c4009
     && defined _SC_V7_ILP32_OFFBIG \
Packit 6c4009
     && defined _SC_V6_LPBIG_OFFBIG \
Packit 6c4009
     && defined _SC_V7_LP64_OFF64 \
Packit 6c4009
     && defined _SC_V7_ILP32_OFF32 \
Packit 6c4009
     && defined _SC_XBS5_LPBIG_OFFBIG \
Packit 6c4009
     && defined _SC_XBS5_ILP32_OFFBIG \
Packit 6c4009
     && defined _SC_V6_ILP32_OFFBIG \
Packit 6c4009
     && defined _SC_XBS5_ILP32_OFF32)
Packit 6c4009
# define ALL_ENVIRONMENTS_DEFINED 1
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
struct conf
Packit 6c4009
  {
Packit 6c4009
    const char *name;
Packit 6c4009
    const int call_name;
Packit 6c4009
    const enum { SYSCONF, CONFSTR, PATHCONF } call;
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
static const struct conf vars[] =
Packit 6c4009
  {
Packit 6c4009
    { "LINK_MAX", _PC_LINK_MAX, PATHCONF },
Packit 6c4009
    { "_POSIX_LINK_MAX", _PC_LINK_MAX, PATHCONF },
Packit 6c4009
    { "MAX_CANON", _PC_MAX_CANON, PATHCONF },
Packit 6c4009
    { "_POSIX_MAX_CANON", _PC_MAX_CANON, PATHCONF },
Packit 6c4009
    { "MAX_INPUT", _PC_MAX_INPUT, PATHCONF },
Packit 6c4009
    { "_POSIX_MAX_INPUT", _PC_MAX_INPUT, PATHCONF },
Packit 6c4009
    { "NAME_MAX", _PC_NAME_MAX, PATHCONF },
Packit 6c4009
    { "_POSIX_NAME_MAX", _PC_NAME_MAX, PATHCONF },
Packit 6c4009
    { "PATH_MAX", _PC_PATH_MAX, PATHCONF },
Packit 6c4009
    { "_POSIX_PATH_MAX", _PC_PATH_MAX, PATHCONF },
Packit 6c4009
    { "PIPE_BUF", _PC_PIPE_BUF, PATHCONF },
Packit 6c4009
    { "_POSIX_PIPE_BUF", _PC_PIPE_BUF, PATHCONF },
Packit 6c4009
    { "SOCK_MAXBUF", _PC_SOCK_MAXBUF, PATHCONF },
Packit 6c4009
    { "_POSIX_ASYNC_IO", _PC_ASYNC_IO, PATHCONF },
Packit 6c4009
    { "_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED, PATHCONF },
Packit 6c4009
    { "_POSIX_NO_TRUNC", _PC_NO_TRUNC, PATHCONF },
Packit 6c4009
    { "_POSIX_PRIO_IO", _PC_PRIO_IO, PATHCONF },
Packit 6c4009
    { "_POSIX_SYNC_IO", _PC_SYNC_IO, PATHCONF },
Packit 6c4009
    { "_POSIX_VDISABLE", _PC_VDISABLE, PATHCONF },
Packit 6c4009
Packit 6c4009
    { "ARG_MAX", _SC_ARG_MAX, SYSCONF },
Packit 6c4009
    { "ATEXIT_MAX", _SC_ATEXIT_MAX, SYSCONF },
Packit 6c4009
    { "CHAR_BIT", _SC_CHAR_BIT, SYSCONF },
Packit 6c4009
    { "CHAR_MAX", _SC_CHAR_MAX, SYSCONF },
Packit 6c4009
    { "CHAR_MIN", _SC_CHAR_MIN, SYSCONF },
Packit 6c4009
    { "CHILD_MAX", _SC_CHILD_MAX, SYSCONF },
Packit 6c4009
    { "CLK_TCK", _SC_CLK_TCK, SYSCONF },
Packit 6c4009
    { "INT_MAX", _SC_INT_MAX, SYSCONF },
Packit 6c4009
    { "INT_MIN", _SC_INT_MIN, SYSCONF },
Packit 6c4009
    { "IOV_MAX", _SC_UIO_MAXIOV, SYSCONF },
Packit 6c4009
    { "LOGNAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF },
Packit 6c4009
    { "LONG_BIT", _SC_LONG_BIT, SYSCONF },
Packit 6c4009
    { "MB_LEN_MAX", _SC_MB_LEN_MAX, SYSCONF },
Packit 6c4009
    { "NGROUPS_MAX", _SC_NGROUPS_MAX, SYSCONF },
Packit 6c4009
    { "NL_ARGMAX", _SC_NL_ARGMAX, SYSCONF },
Packit 6c4009
    { "NL_LANGMAX", _SC_NL_LANGMAX, SYSCONF },
Packit 6c4009
    { "NL_MSGMAX", _SC_NL_MSGMAX, SYSCONF },
Packit 6c4009
    { "NL_NMAX", _SC_NL_NMAX, SYSCONF },
Packit 6c4009
    { "NL_SETMAX", _SC_NL_SETMAX, SYSCONF },
Packit 6c4009
    { "NL_TEXTMAX", _SC_NL_TEXTMAX, SYSCONF },
Packit 6c4009
    { "NSS_BUFLEN_GROUP", _SC_GETGR_R_SIZE_MAX, SYSCONF },
Packit 6c4009
    { "NSS_BUFLEN_PASSWD", _SC_GETPW_R_SIZE_MAX, SYSCONF },
Packit 6c4009
    { "NZERO", _SC_NZERO, SYSCONF },
Packit 6c4009
    { "OPEN_MAX", _SC_OPEN_MAX, SYSCONF },
Packit 6c4009
    { "PAGESIZE", _SC_PAGESIZE, SYSCONF },
Packit 6c4009
    { "PAGE_SIZE", _SC_PAGESIZE, SYSCONF },
Packit 6c4009
    { "PASS_MAX", _SC_PASS_MAX, SYSCONF },
Packit 6c4009
    { "PTHREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS, SYSCONF },
Packit 6c4009
    { "PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX, SYSCONF },
Packit 6c4009
    { "PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN, SYSCONF },
Packit 6c4009
    { "PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX, SYSCONF },
Packit 6c4009
    { "SCHAR_MAX", _SC_SCHAR_MAX, SYSCONF },
Packit 6c4009
    { "SCHAR_MIN", _SC_SCHAR_MIN, SYSCONF },
Packit 6c4009
    { "SHRT_MAX", _SC_SHRT_MAX, SYSCONF },
Packit 6c4009
    { "SHRT_MIN", _SC_SHRT_MIN, SYSCONF },
Packit 6c4009
    { "SSIZE_MAX", _SC_SSIZE_MAX, SYSCONF },
Packit 6c4009
    { "TTY_NAME_MAX", _SC_TTY_NAME_MAX, SYSCONF },
Packit 6c4009
    { "TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF },
Packit 6c4009
    { "UCHAR_MAX", _SC_UCHAR_MAX, SYSCONF },
Packit 6c4009
    { "UINT_MAX", _SC_UINT_MAX, SYSCONF },
Packit 6c4009
    { "UIO_MAXIOV", _SC_UIO_MAXIOV, SYSCONF },
Packit 6c4009
    { "ULONG_MAX", _SC_ULONG_MAX, SYSCONF },
Packit 6c4009
    { "USHRT_MAX", _SC_USHRT_MAX, SYSCONF },
Packit 6c4009
    { "WORD_BIT", _SC_WORD_BIT, SYSCONF },
Packit 6c4009
    { "_AVPHYS_PAGES", _SC_AVPHYS_PAGES, SYSCONF },
Packit 6c4009
    { "_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF, SYSCONF },
Packit 6c4009
    { "_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN, SYSCONF },
Packit 6c4009
    { "_PHYS_PAGES", _SC_PHYS_PAGES, SYSCONF },
Packit 6c4009
    { "_POSIX_ARG_MAX", _SC_ARG_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO, SYSCONF },
Packit 6c4009
    { "_POSIX_CHILD_MAX", _SC_CHILD_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_FSYNC", _SC_FSYNC, SYSCONF },
Packit 6c4009
    { "_POSIX_JOB_CONTROL", _SC_JOB_CONTROL, SYSCONF },
Packit 6c4009
    { "_POSIX_MAPPED_FILES", _SC_MAPPED_FILES, SYSCONF },
Packit 6c4009
    { "_POSIX_MEMLOCK", _SC_MEMLOCK, SYSCONF },
Packit 6c4009
    { "_POSIX_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE, SYSCONF },
Packit 6c4009
    { "_POSIX_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION, SYSCONF },
Packit 6c4009
    { "_POSIX_MESSAGE_PASSING", _SC_MESSAGE_PASSING, SYSCONF },
Packit 6c4009
    { "_POSIX_NGROUPS_MAX", _SC_NGROUPS_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_OPEN_MAX", _SC_OPEN_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_PII", _SC_PII, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_INTERNET", _SC_PII_INTERNET, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_OSI", _SC_PII_OSI, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_OSI_CLTS", _SC_PII_OSI_CLTS, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_OSI_COTS", _SC_PII_OSI_COTS, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_OSI_M", _SC_PII_OSI_M, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_SOCKET", _SC_PII_SOCKET, SYSCONF },
Packit 6c4009
    { "_POSIX_PII_XTI", _SC_PII_XTI, SYSCONF },
Packit 6c4009
    { "_POSIX_POLL", _SC_POLL, SYSCONF },
Packit 6c4009
    { "_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO, SYSCONF },
Packit 6c4009
    { "_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING, SYSCONF },
Packit 6c4009
    { "_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS, SYSCONF },
Packit 6c4009
    { "_POSIX_SAVED_IDS", _SC_SAVED_IDS, SYSCONF },
Packit 6c4009
    { "_POSIX_SELECT", _SC_SELECT, SYSCONF },
Packit 6c4009
    { "_POSIX_SEMAPHORES", _SC_SEMAPHORES, SYSCONF },
Packit 6c4009
    { "_POSIX_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS, SYSCONF },
Packit 6c4009
    { "_POSIX_SSIZE_MAX", _SC_SSIZE_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_STREAM_MAX", _SC_STREAM_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO, SYSCONF },
Packit 6c4009
    { "_POSIX_THREADS", _SC_THREADS, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_ROBUST_PRIO_INHERIT", _SC_THREAD_ROBUST_PRIO_INHERIT,
Packit 6c4009
      SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_ROBUST_PRIO_PROTECT", _SC_THREAD_ROBUST_PRIO_PROTECT,
Packit 6c4009
      SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS, SYSCONF },
Packit 6c4009
    { "_POSIX_TIMERS", _SC_TIMERS, SYSCONF },
Packit 6c4009
    { "TIMER_MAX", _SC_TIMER_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_VERSION", _SC_VERSION, SYSCONF },
Packit 6c4009
    { "_T_IOV_MAX", _SC_T_IOV_MAX, SYSCONF },
Packit 6c4009
    { "_XOPEN_CRYPT", _SC_XOPEN_CRYPT, SYSCONF },
Packit 6c4009
    { "_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N, SYSCONF },
Packit 6c4009
    { "_XOPEN_LEGACY", _SC_XOPEN_LEGACY, SYSCONF },
Packit 6c4009
    { "_XOPEN_REALTIME", _SC_XOPEN_REALTIME, SYSCONF },
Packit 6c4009
    { "_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS, SYSCONF },
Packit 6c4009
    { "_XOPEN_SHM", _SC_XOPEN_SHM, SYSCONF },
Packit 6c4009
    { "_XOPEN_UNIX", _SC_XOPEN_UNIX, SYSCONF },
Packit 6c4009
    { "_XOPEN_VERSION", _SC_XOPEN_VERSION, SYSCONF },
Packit 6c4009
    { "_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION, SYSCONF },
Packit 6c4009
    { "_XOPEN_XPG2", _SC_XOPEN_XPG2, SYSCONF },
Packit 6c4009
    { "_XOPEN_XPG3", _SC_XOPEN_XPG3, SYSCONF },
Packit 6c4009
    { "_XOPEN_XPG4", _SC_XOPEN_XPG4, SYSCONF },
Packit 6c4009
    /* POSIX.2  */
Packit 6c4009
    { "BC_BASE_MAX", _SC_BC_BASE_MAX, SYSCONF },
Packit 6c4009
    { "BC_DIM_MAX", _SC_BC_DIM_MAX, SYSCONF },
Packit 6c4009
    { "BC_SCALE_MAX", _SC_BC_SCALE_MAX, SYSCONF },
Packit 6c4009
    { "BC_STRING_MAX", _SC_BC_STRING_MAX, SYSCONF },
Packit 6c4009
    { "CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX, SYSCONF },
Packit 6c4009
    { "COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX, SYSCONF },
Packit 6c4009
    { "EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX, SYSCONF },
Packit 6c4009
    { "EXPR_NEST_MAX", _SC_EXPR_NEST_MAX, SYSCONF },
Packit 6c4009
    { "LINE_MAX", _SC_LINE_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_BC_BASE_MAX", _SC_BC_BASE_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_BC_DIM_MAX", _SC_BC_DIM_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_BC_SCALE_MAX", _SC_BC_SCALE_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_BC_STRING_MAX", _SC_BC_STRING_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_CHAR_TERM", _SC_2_CHAR_TERM, SYSCONF },
Packit 6c4009
    { "POSIX2_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_C_BIND", _SC_2_C_BIND, SYSCONF },
Packit 6c4009
    { "POSIX2_C_DEV", _SC_2_C_DEV, SYSCONF },
Packit 6c4009
    { "POSIX2_C_VERSION", _SC_2_C_VERSION, SYSCONF },
Packit 6c4009
    { "POSIX2_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_FORT_DEV", _SC_2_FORT_DEV, SYSCONF },
Packit 6c4009
    { "POSIX2_FORT_RUN", _SC_2_FORT_RUN, SYSCONF },
Packit 6c4009
    { "_POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_LOCALEDEF", _SC_2_LOCALEDEF, SYSCONF },
Packit 6c4009
    { "POSIX2_RE_DUP_MAX", _SC_RE_DUP_MAX, SYSCONF },
Packit 6c4009
    { "POSIX2_SW_DEV", _SC_2_SW_DEV, SYSCONF },
Packit 6c4009
    { "POSIX2_UPE", _SC_2_UPE, SYSCONF },
Packit 6c4009
    { "POSIX2_VERSION", _SC_2_VERSION, SYSCONF },
Packit 6c4009
    { "RE_DUP_MAX", _SC_RE_DUP_MAX, SYSCONF },
Packit 6c4009
Packit 6c4009
    { "PATH", _CS_PATH, CONFSTR },
Packit 6c4009
    { "CS_PATH", _CS_PATH, CONFSTR },
Packit 6c4009
Packit 6c4009
    /* LFS */
Packit 6c4009
    { "LFS_CFLAGS", _CS_LFS_CFLAGS, CONFSTR },
Packit 6c4009
    { "LFS_LDFLAGS", _CS_LFS_LDFLAGS, CONFSTR },
Packit 6c4009
    { "LFS_LIBS", _CS_LFS_LIBS, CONFSTR },
Packit 6c4009
    { "LFS_LINTFLAGS", _CS_LFS_LINTFLAGS, CONFSTR },
Packit 6c4009
    { "LFS64_CFLAGS", _CS_LFS64_CFLAGS, CONFSTR },
Packit 6c4009
    { "LFS64_LDFLAGS", _CS_LFS64_LDFLAGS, CONFSTR },
Packit 6c4009
    { "LFS64_LIBS", _CS_LFS64_LIBS, CONFSTR },
Packit 6c4009
    { "LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    /* Programming environments.  */
Packit 6c4009
    { "_XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
Packit 6c4009
    { "XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32, SYSCONF },
Packit 6c4009
    { "XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_ILP32_OFF32_LDFLAGS", _CS_XBS5_ILP32_OFF32_LDFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_ILP32_OFF32_LIBS", _CS_XBS5_ILP32_OFF32_LIBS, CONFSTR },
Packit 6c4009
    { "XBS5_ILP32_OFF32_LINTFLAGS", _CS_XBS5_ILP32_OFF32_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG, SYSCONF },
Packit 6c4009
    { "XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_ILP32_OFFBIG_LDFLAGS", _CS_XBS5_ILP32_OFFBIG_LDFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_ILP32_OFFBIG_LIBS", _CS_XBS5_ILP32_OFFBIG_LIBS, CONFSTR },
Packit 6c4009
    { "XBS5_ILP32_OFFBIG_LINTFLAGS", _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64, SYSCONF },
Packit 6c4009
    { "XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_LP64_OFF64_LDFLAGS", _CS_XBS5_LP64_OFF64_LDFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_LP64_OFF64_LIBS", _CS_XBS5_LP64_OFF64_LIBS, CONFSTR },
Packit 6c4009
    { "XBS5_LP64_OFF64_LINTFLAGS", _CS_XBS5_LP64_OFF64_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG, SYSCONF },
Packit 6c4009
    { "XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_LPBIG_OFFBIG_LDFLAGS", _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
Packit 6c4009
    { "XBS5_LPBIG_OFFBIG_LIBS", _CS_XBS5_LPBIG_OFFBIG_LIBS, CONFSTR },
Packit 6c4009
    { "XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32, SYSCONF },
Packit 6c4009
    { "POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG, SYSCONF },
Packit 6c4009
    { "POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64, SYSCONF },
Packit 6c4009
    { "POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG, SYSCONF },
Packit 6c4009
    { "POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32, SYSCONF },
Packit 6c4009
    { "POSIX_V7_ILP32_OFF32_CFLAGS", _CS_POSIX_V7_ILP32_OFF32_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_ILP32_OFF32_LDFLAGS", _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_ILP32_OFF32_LIBS", _CS_POSIX_V7_ILP32_OFF32_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG, SYSCONF },
Packit 6c4009
    { "POSIX_V7_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_ILP32_OFFBIG_LIBS", _CS_POSIX_V7_ILP32_OFFBIG_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64, SYSCONF },
Packit 6c4009
    { "POSIX_V7_LP64_OFF64_CFLAGS", _CS_POSIX_V7_LP64_OFF64_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_LP64_OFF64_LDFLAGS", _CS_POSIX_V7_LP64_OFF64_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_LP64_OFF64_LIBS", _CS_POSIX_V7_LP64_OFF64_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_LP64_OFF64_LINTFLAGS", _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG, SYSCONF },
Packit 6c4009
    { "POSIX_V7_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_LPBIG_OFFBIG_LIBS", _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, CONFSTR },
Packit 6c4009
    { "POSIX_V7_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
Packit 6c4009
Packit 6c4009
    { "_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO, SYSCONF },
Packit 6c4009
    { "_POSIX_BARRIERS", _SC_BARRIERS, SYSCONF },
Packit 6c4009
    { "_POSIX_BASE", _SC_BASE, SYSCONF },
Packit 6c4009
    { "_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT, SYSCONF },
Packit 6c4009
    { "_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R, SYSCONF },
Packit 6c4009
    { "_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION, SYSCONF },
Packit 6c4009
    { "_POSIX_CPUTIME", _SC_CPUTIME, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME, SYSCONF },
Packit 6c4009
    { "_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC, SYSCONF },
Packit 6c4009
    { "_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R, SYSCONF },
Packit 6c4009
    { "_POSIX_FD_MGMT", _SC_FD_MGMT, SYSCONF },
Packit 6c4009
    { "_POSIX_FIFO", _SC_FIFO, SYSCONF },
Packit 6c4009
    { "_POSIX_PIPE", _SC_PIPE, SYSCONF },
Packit 6c4009
    { "_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES, SYSCONF },
Packit 6c4009
    { "_POSIX_FILE_LOCKING", _SC_FILE_LOCKING, SYSCONF },
Packit 6c4009
    { "_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM, SYSCONF },
Packit 6c4009
    { "_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK, SYSCONF },
Packit 6c4009
    { "_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS, SYSCONF },
Packit 6c4009
    { "_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS, SYSCONF },
Packit 6c4009
    { "_POSIX_NETWORKING", _SC_NETWORKING, SYSCONF },
Packit 6c4009
    { "_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS, SYSCONF },
Packit 6c4009
    { "_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS, SYSCONF },
Packit 6c4009
    { "_POSIX_REGEXP", _SC_REGEXP, SYSCONF },
Packit 6c4009
    { "_REGEX_VERSION", _SC_REGEX_VERSION, SYSCONF },
Packit 6c4009
    { "_POSIX_SHELL", _SC_SHELL, SYSCONF },
Packit 6c4009
    { "_POSIX_SIGNALS", _SC_SIGNALS, SYSCONF },
Packit 6c4009
    { "_POSIX_SPAWN", _SC_SPAWN, SYSCONF },
Packit 6c4009
    { "_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER, SYSCONF },
Packit 6c4009
    { "_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER, SYSCONF },
Packit 6c4009
    { "_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE, SYSCONF },
Packit 6c4009
    { "_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R, SYSCONF },
Packit 6c4009
    { "_POSIX_TIMEOUTS", _SC_TIMEOUTS, SYSCONF },
Packit 6c4009
    { "_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS, SYSCONF },
Packit 6c4009
    { "_POSIX_USER_GROUPS", _SC_USER_GROUPS, SYSCONF },
Packit 6c4009
    { "_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R, SYSCONF },
Packit 6c4009
    { "POSIX2_PBS", _SC_2_PBS, SYSCONF },
Packit 6c4009
    { "POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING, SYSCONF },
Packit 6c4009
    { "POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE, SYSCONF },
Packit 6c4009
    { "POSIX2_PBS_TRACK", _SC_2_PBS_TRACK, SYSCONF },
Packit 6c4009
    { "POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE, SYSCONF },
Packit 6c4009
    { "SYMLOOP_MAX", _SC_SYMLOOP_MAX, SYSCONF },
Packit 6c4009
    { "STREAM_MAX", _SC_STREAM_MAX, SYSCONF },
Packit 6c4009
    { "AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX, SYSCONF },
Packit 6c4009
    { "AIO_MAX", _SC_AIO_MAX, SYSCONF },
Packit 6c4009
    { "AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX, SYSCONF },
Packit 6c4009
    { "DELAYTIMER_MAX", _SC_DELAYTIMER_MAX, SYSCONF },
Packit 6c4009
    { "HOST_NAME_MAX", _SC_HOST_NAME_MAX, SYSCONF },
Packit 6c4009
    { "LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF },
Packit 6c4009
    { "MQ_OPEN_MAX", _SC_MQ_OPEN_MAX, SYSCONF },
Packit 6c4009
    { "MQ_PRIO_MAX", _SC_MQ_PRIO_MAX, SYSCONF },
Packit 6c4009
    { "_POSIX_DEVICE_IO", _SC_DEVICE_IO, SYSCONF },
Packit 6c4009
    { "_POSIX_TRACE", _SC_TRACE, SYSCONF },
Packit 6c4009
    { "_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER, SYSCONF },
Packit 6c4009
    { "_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT, SYSCONF },
Packit 6c4009
    { "_POSIX_TRACE_LOG", _SC_TRACE_LOG, SYSCONF },
Packit 6c4009
    { "RTSIG_MAX", _SC_RTSIG_MAX, SYSCONF },
Packit 6c4009
    { "SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX, SYSCONF },
Packit 6c4009
    { "SEM_VALUE_MAX", _SC_SEM_VALUE_MAX, SYSCONF },
Packit 6c4009
    { "SIGQUEUE_MAX", _SC_SIGQUEUE_MAX, SYSCONF },
Packit 6c4009
    { "FILESIZEBITS", _PC_FILESIZEBITS, PATHCONF },
Packit 6c4009
    { "POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN, PATHCONF },
Packit 6c4009
    { "POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE, PATHCONF },
Packit 6c4009
    { "POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE, PATHCONF },
Packit 6c4009
    { "POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE, PATHCONF },
Packit 6c4009
    { "POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN, PATHCONF },
Packit 6c4009
    { "SYMLINK_MAX", _PC_SYMLINK_MAX, PATHCONF },
Packit 6c4009
    { "GNU_LIBC_VERSION", _CS_GNU_LIBC_VERSION, CONFSTR },
Packit 6c4009
    { "GNU_LIBPTHREAD_VERSION", _CS_GNU_LIBPTHREAD_VERSION, CONFSTR },
Packit 6c4009
    { "POSIX2_SYMLINKS", _PC_2_SYMLINKS, PATHCONF },
Packit 6c4009
Packit 6c4009
    { "LEVEL1_ICACHE_SIZE", _SC_LEVEL1_ICACHE_SIZE, SYSCONF },
Packit 6c4009
    { "LEVEL1_ICACHE_ASSOC", _SC_LEVEL1_ICACHE_ASSOC, SYSCONF },
Packit 6c4009
    { "LEVEL1_ICACHE_LINESIZE", _SC_LEVEL1_ICACHE_LINESIZE, SYSCONF },
Packit 6c4009
    { "LEVEL1_DCACHE_SIZE", _SC_LEVEL1_DCACHE_SIZE, SYSCONF },
Packit 6c4009
    { "LEVEL1_DCACHE_ASSOC", _SC_LEVEL1_DCACHE_ASSOC, SYSCONF },
Packit 6c4009
    { "LEVEL1_DCACHE_LINESIZE", _SC_LEVEL1_DCACHE_LINESIZE, SYSCONF },
Packit 6c4009
    { "LEVEL2_CACHE_SIZE", _SC_LEVEL2_CACHE_SIZE, SYSCONF },
Packit 6c4009
    { "LEVEL2_CACHE_ASSOC", _SC_LEVEL2_CACHE_ASSOC, SYSCONF },
Packit 6c4009
    { "LEVEL2_CACHE_LINESIZE", _SC_LEVEL2_CACHE_LINESIZE, SYSCONF },
Packit 6c4009
    { "LEVEL3_CACHE_SIZE", _SC_LEVEL3_CACHE_SIZE, SYSCONF },
Packit 6c4009
    { "LEVEL3_CACHE_ASSOC", _SC_LEVEL3_CACHE_ASSOC, SYSCONF },
Packit 6c4009
    { "LEVEL3_CACHE_LINESIZE", _SC_LEVEL3_CACHE_LINESIZE, SYSCONF },
Packit 6c4009
    { "LEVEL4_CACHE_SIZE", _SC_LEVEL4_CACHE_SIZE, SYSCONF },
Packit 6c4009
    { "LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC, SYSCONF },
Packit 6c4009
    { "LEVEL4_CACHE_LINESIZE", _SC_LEVEL4_CACHE_LINESIZE, SYSCONF },
Packit 6c4009
Packit 6c4009
    { "IPV6", _SC_IPV6, SYSCONF },
Packit 6c4009
    { "RAW_SOCKETS", _SC_RAW_SOCKETS, SYSCONF },
Packit 6c4009
Packit 6c4009
    { "_POSIX_IPV6", _SC_IPV6, SYSCONF },
Packit 6c4009
    { "_POSIX_RAW_SOCKETS", _SC_RAW_SOCKETS, SYSCONF },
Packit 6c4009
Packit 6c4009
    { NULL, 0, SYSCONF }
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
Packit 6c4009
extern const char *__progname;
Packit 6c4009
Packit 6c4009
Packit 6c4009
static void
Packit 6c4009
usage (void)
Packit 6c4009
{
Packit 6c4009
  fprintf (stderr,
Packit 6c4009
	   _("Usage: %s [-v specification] variable_name [pathname]\n"),
Packit 6c4009
	   __progname);
Packit 6c4009
  fprintf (stderr,
Packit 6c4009
	   _("       %s -a [pathname]\n"), __progname);
Packit 6c4009
  exit (2);
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
Packit 6c4009
static void
Packit 6c4009
print_all (const char *path)
Packit 6c4009
{
Packit 6c4009
  const struct conf *c;
Packit 6c4009
  size_t clen;
Packit 6c4009
  long int value;
Packit 6c4009
  char *cvalue;
Packit 6c4009
  for (c = vars; c->name != NULL; ++c) {
Packit 6c4009
    printf("%-35s", c->name);
Packit 6c4009
    switch (c->call) {
Packit 6c4009
      case PATHCONF:
Packit 6c4009
	value = pathconf (path, c->call_name);
Packit 6c4009
	if (value != -1) {
Packit 6c4009
	  printf("%ld", value);
Packit 6c4009
	}
Packit 6c4009
	printf("\n");
Packit 6c4009
	break;
Packit 6c4009
      case SYSCONF:
Packit 6c4009
	value = sysconf (c->call_name);
Packit 6c4009
	if (value == -1l) {
Packit 6c4009
	  if (c->call_name == _SC_UINT_MAX
Packit 6c4009
	    || c->call_name == _SC_ULONG_MAX)
Packit 6c4009
	    printf ("%lu", value);
Packit 6c4009
	}
Packit 6c4009
	else {
Packit 6c4009
	  printf ("%ld", value);
Packit 6c4009
	}
Packit 6c4009
	printf ("\n");
Packit 6c4009
	break;
Packit 6c4009
      case CONFSTR:
Packit 6c4009
	clen = confstr (c->call_name, (char *) NULL, 0);
Packit 6c4009
	cvalue = (char *) malloc (clen);
Packit 6c4009
	if (cvalue == NULL)
Packit 6c4009
	  error (3, 0, _("memory exhausted"));
Packit 6c4009
	if (confstr (c->call_name, cvalue, clen) != clen)
Packit 6c4009
	  error (3, errno, "confstr");
Packit 6c4009
	printf ("%.*s\n", (int) clen, cvalue);
Packit 6c4009
	free (cvalue);
Packit 6c4009
	break;
Packit 6c4009
    }
Packit 6c4009
  }
Packit 6c4009
  exit (0);
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
main (int argc, char *argv[])
Packit 6c4009
{
Packit 6c4009
  const struct conf *c;
Packit 6c4009
Packit 6c4009
  /* Set locale.  Do not set LC_ALL because the other categories must
Packit 6c4009
     not be affected (according to POSIX.2).  */
Packit 6c4009
  setlocale (LC_CTYPE, "");
Packit 6c4009
  setlocale (LC_MESSAGES, "");
Packit 6c4009
Packit 6c4009
  /* Initialize the message catalog.  */
Packit 6c4009
  textdomain (PACKAGE);
Packit 6c4009
Packit 6c4009
  if (argc > 1 && strcmp (argv[1], "--version") == 0)
Packit 6c4009
    {
Packit 6c4009
      printf ("getconf %s%s\n", PKGVERSION, VERSION);
Packit 6c4009
      printf (gettext ("\
Packit 6c4009
Copyright (C) %s Free Software Foundation, Inc.\n\
Packit 6c4009
This is free software; see the source for copying conditions.  There is NO\n\
Packit 6c4009
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
Packit 6c4009
"), "2018");
Packit 6c4009
      printf (gettext ("Written by %s.\n"), "Roland McGrath");
Packit 6c4009
      return 0;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  if (argc > 1 && strcmp (argv[1], "--help") == 0)
Packit 6c4009
    {
Packit 6c4009
      printf (gettext ("\
Packit 6c4009
Usage: getconf [-v SPEC] VAR\n\
Packit 6c4009
  or:  getconf [-v SPEC] PATH_VAR PATH\n\
Packit 6c4009
\n\
Packit 6c4009
Get the configuration value for variable VAR, or for variable PATH_VAR\n\
Packit 6c4009
for path PATH.  If SPEC is given, give values for compilation\n\
Packit 6c4009
environment SPEC.\n\n"));
Packit 6c4009
      printf (gettext ("For bug reporting instructions, please see:\n\
Packit 6c4009
%s.\n"), REPORT_BUGS_TO);
Packit 6c4009
      return 0;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
#ifdef ALL_ENVIRONMENTS_DEFINED
Packit 6c4009
  if (argc > 1 && strncmp (argv[1], "-v", 2) == 0)
Packit 6c4009
    {
Packit 6c4009
      if (argv[1][2] == '\0')
Packit 6c4009
	{
Packit 6c4009
	  if (argc < 3)
Packit 6c4009
	    usage ();
Packit 6c4009
Packit 6c4009
	  argv += 2;
Packit 6c4009
	  argc -= 2;
Packit 6c4009
	}
Packit 6c4009
      else
Packit 6c4009
	{
Packit 6c4009
	  argv += 1;
Packit 6c4009
	  argc += 1;
Packit 6c4009
	}
Packit 6c4009
    }
Packit 6c4009
#else
Packit 6c4009
  const char *getconf_dir = getenv ("GETCONF_DIR") ?: GETCONF_DIR;
Packit 6c4009
  size_t getconf_dirlen = strlen (getconf_dir);
Packit 6c4009
Packit 6c4009
  const char *spec = NULL;
Packit 6c4009
  char buf[sizeof "POSIX_V6_LPBIG_OFFBIG"];
Packit 6c4009
  char *argv0 = argv[0];
Packit 6c4009
  if (argc > 1 && strncmp (argv[1], "-v", 2) == 0)
Packit 6c4009
    {
Packit 6c4009
      if (argv[1][2] == '\0')
Packit 6c4009
	{
Packit 6c4009
	  if (argc < 3)
Packit 6c4009
	    usage ();
Packit 6c4009
Packit 6c4009
	  spec = argv[2];
Packit 6c4009
	  argv += 2;
Packit 6c4009
	  argc -= 2;
Packit 6c4009
	}
Packit 6c4009
      else
Packit 6c4009
	{
Packit 6c4009
	  spec = &argv[1][2];
Packit 6c4009
	  argv += 1;
Packit 6c4009
	  argc += 1;
Packit 6c4009
	}
Packit 6c4009
    }
Packit 6c4009
  else
Packit 6c4009
    {
Packit 6c4009
      char default_name[getconf_dirlen + sizeof "/default"];
Packit 6c4009
      memcpy (mempcpy (default_name, getconf_dir, getconf_dirlen),
Packit 6c4009
	      "/default", sizeof "/default");
Packit 6c4009
      int len = readlink (default_name, buf, sizeof buf - 1);
Packit 6c4009
      if (len > 0)
Packit 6c4009
	{
Packit 6c4009
	  buf[len] = '\0';
Packit 6c4009
	  spec = buf;
Packit 6c4009
	}
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  /* Check for the specifications we know.  */
Packit 6c4009
  if (spec != NULL)
Packit 6c4009
    {
Packit 6c4009
      size_t i;
Packit 6c4009
      for (i = 0; i < nspecs; ++i)
Packit 6c4009
	if (strcmp (spec, specs[i].name) == 0)
Packit 6c4009
	  break;
Packit 6c4009
Packit 6c4009
      if (i == nspecs)
Packit 6c4009
	error (2, 0, _("unknown specification \"%s\""), spec);
Packit 6c4009
Packit 6c4009
      switch (specs[i].num)
Packit 6c4009
	{
Packit 6c4009
# ifndef _XBS5_ILP32_OFF32
Packit 6c4009
	  case _SC_XBS5_ILP32_OFF32:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _XBS5_ILP32_OFFBIG
Packit 6c4009
	  case _SC_XBS5_ILP32_OFFBIG:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _XBS5_LP64_OFF64
Packit 6c4009
	  case _SC_XBS5_LP64_OFF64:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _XBS5_LPBIG_OFFBIG
Packit 6c4009
	  case _SC_XBS5_LPBIG_OFFBIG:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V6_ILP32_OFF32
Packit 6c4009
	  case _SC_V6_ILP32_OFF32:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V6_ILP32_OFFBIG
Packit 6c4009
	  case _SC_V6_ILP32_OFFBIG:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V6_LP64_OFF64
Packit 6c4009
	  case _SC_V6_LP64_OFF64:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V6_LPBIG_OFFBIG
Packit 6c4009
	  case _SC_V6_LPBIG_OFFBIG:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V7_ILP32_OFF32
Packit 6c4009
	  case _SC_V7_ILP32_OFF32:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V7_ILP32_OFFBIG
Packit 6c4009
	  case _SC_V7_ILP32_OFFBIG:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V7_LP64_OFF64
Packit 6c4009
	  case _SC_V7_LP64_OFF64:
Packit 6c4009
# endif
Packit 6c4009
# ifndef _POSIX_V7_LPBIG_OFFBIG
Packit 6c4009
	  case _SC_V7_LPBIG_OFFBIG:
Packit 6c4009
# endif
Packit 6c4009
	    {
Packit 6c4009
	      const char *args[argc + 3];
Packit 6c4009
	      size_t spec_len = strlen (spec);
Packit 6c4009
	      char getconf_name[getconf_dirlen + 1 + spec_len + 1];
Packit 6c4009
	      memcpy (mempcpy (mempcpy (getconf_name, getconf_dir,
Packit 6c4009
					getconf_dirlen),
Packit 6c4009
			       "/", 1), spec, spec_len + 1);
Packit 6c4009
	      args[0] = argv0;
Packit 6c4009
	      args[1] = "-v";
Packit 6c4009
	      args[2] = spec;
Packit 6c4009
	      memcpy (&args[3], &argv[1], argc * sizeof (argv[1]));
Packit 6c4009
	      execv (getconf_name, (char * const *) args);
Packit 6c4009
	      error (4, errno, _("Couldn't execute %s"), getconf_name);
Packit 6c4009
	    }
Packit 6c4009
	  default:
Packit 6c4009
	    break;
Packit 6c4009
	}
Packit 6c4009
    }
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
  if (argc > 1 && strcmp (argv[1], "-a") == 0)
Packit 6c4009
    {
Packit 6c4009
      if (argc == 2)
Packit 6c4009
	print_all ("/");
Packit 6c4009
      else if (argc == 3)
Packit 6c4009
	print_all (argv[2]);
Packit 6c4009
      else
Packit 6c4009
	usage ();
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  int ai = 1;
Packit 6c4009
  if (argc > ai && strcmp (argv[ai], "--") == 0)
Packit 6c4009
    ++ai;
Packit 6c4009
Packit 6c4009
  if (argc - ai < 1 || argc - ai > 2)
Packit 6c4009
    usage ();
Packit 6c4009
Packit 6c4009
  for (c = vars; c->name != NULL; ++c)
Packit 6c4009
    if (strcmp (c->name, argv[ai]) == 0
Packit 6c4009
	|| (strncmp (c->name, "_POSIX_", 7) == 0
Packit 6c4009
	    && strcmp (c->name + 7, argv[ai]) == 0))
Packit 6c4009
      {
Packit 6c4009
	long int value;
Packit 6c4009
	size_t clen;
Packit 6c4009
	char *cvalue;
Packit 6c4009
	switch (c->call)
Packit 6c4009
	  {
Packit 6c4009
	  case PATHCONF:
Packit 6c4009
	    if (argc - ai < 2)
Packit 6c4009
	      usage ();
Packit 6c4009
	    errno = 0;
Packit 6c4009
	    value = pathconf (argv[ai + 1], c->call_name);
Packit 6c4009
	    if (value == -1)
Packit 6c4009
	      {
Packit 6c4009
		if (errno)
Packit 6c4009
		  error (3, errno, "pathconf: %s", argv[ai + 1]);
Packit 6c4009
		else
Packit 6c4009
		  puts (_("undefined"));
Packit 6c4009
	      }
Packit 6c4009
	    else
Packit 6c4009
	      printf ("%ld\n", value);
Packit 6c4009
	    exit (0);
Packit 6c4009
Packit 6c4009
	  case SYSCONF:
Packit 6c4009
	    if (argc - ai > 1)
Packit 6c4009
	      usage ();
Packit 6c4009
	    value = sysconf (c->call_name);
Packit 6c4009
	    if (value == -1l)
Packit 6c4009
	      {
Packit 6c4009
		if (c->call_name == _SC_UINT_MAX
Packit 6c4009
		    || c->call_name == _SC_ULONG_MAX)
Packit 6c4009
		  printf ("%lu\n", value);
Packit 6c4009
		else
Packit 6c4009
		  puts (_("undefined"));
Packit 6c4009
	      }
Packit 6c4009
	    else
Packit 6c4009
	      printf ("%ld\n", value);
Packit 6c4009
	    exit (0);
Packit 6c4009
Packit 6c4009
	  case CONFSTR:
Packit 6c4009
	    if (argc - ai > 1)
Packit 6c4009
	      usage ();
Packit 6c4009
	    clen = confstr (c->call_name, (char *) NULL, 0);
Packit 6c4009
	    cvalue = (char *) malloc (clen);
Packit 6c4009
	    if (cvalue == NULL)
Packit 6c4009
	      error (3, 0, _("memory exhausted"));
Packit 6c4009
Packit 6c4009
	    if (confstr (c->call_name, cvalue, clen) != clen)
Packit 6c4009
	      error (3, errno, "confstr");
Packit 6c4009
Packit 6c4009
	    printf ("%.*s\n", (int) clen, cvalue);
Packit 6c4009
	    exit (0);
Packit 6c4009
	  }
Packit 6c4009
      }
Packit 6c4009
Packit 6c4009
  error (2, 0, _("Unrecognized variable `%s'"), argv[ai]);
Packit 6c4009
  /* NOTREACHED */
Packit 6c4009
  return 2;
Packit 6c4009
}