diff options
author | Ulrich Drepper <drepper@redhat.com> | 2005-09-26 23:02:01 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2005-09-26 23:02:01 +0000 |
commit | 9a5933834ba8f1289024c1ab13e1cd711b5ec3af (patch) | |
tree | ee657c7e17e88bc2aabee4909ac10bff8c36a300 /posix | |
parent | 419bcf40d791f84cbebaed50dfc488f24980ca31 (diff) | |
download | glibc-9a5933834ba8f1289024c1ab13e1cd711b5ec3af.tar.gz |
[BZ #652]
2005-01-11 Thorsten Kukuk <kukuk@suse.de>
[BZ #652]
* posix/getconf.c: Add new option -a to print the names of
the current system configuration variables to stdout.
Based on patch from Josh Aas <josha@sgi.com>.
Diffstat (limited to 'posix')
-rw-r--r-- | posix/getconf.c | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/posix/getconf.c b/posix/getconf.c index 0cc0c0d7b5..da8e538ad3 100644 --- a/posix/getconf.c +++ b/posix/getconf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 1995-2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 1995-2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -941,9 +941,54 @@ usage (void) fprintf (stderr, _("Usage: %s [-v specification] variable_name [pathname]\n"), __progname); + fprintf (stderr, + _(" %s -a [pathname]\n"), __progname); exit (2); } +static void +print_all (const char *path) +{ + register const struct conf *c; + size_t clen; + long int value; + char *cvalue; + for (c = vars; c->name != NULL; ++c) { + printf("%-35s", c->name); + switch (c->call) { + case PATHCONF: + value = pathconf (path, c->call_name); + if (value != -1) { + printf("%ld", value); + } + printf("\n"); + break; + case SYSCONF: + value = sysconf (c->call_name); + if (value == -1l) { + if (c->call_name == _SC_UINT_MAX + || c->call_name == _SC_ULONG_MAX) + printf ("%lu", value); + } + else { + printf ("%ld", value); + } + printf ("\n"); + break; + case CONFSTR: + clen = confstr (c->call_name, (char *) NULL, 0); + cvalue = (char *) malloc (clen); + if (cvalue == NULL) + error (3, 0, _("memory exhausted")); + if (confstr (c->call_name, cvalue, clen) != clen) + error (3, errno, "confstr"); + printf ("%.*s\n", (int) clen, cvalue); + break; + } + } + exit (0); +} + int main (int argc, char *argv[]) { @@ -1050,6 +1095,16 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ } } + if (argc > 1 && strcmp (argv[1], "-a") == 0) + { + if (argc == 2) + print_all ("/"); + else if (argc == 3) + print_all (argv[2]); + else + usage (); + } + if (argc < 2 || argc > 3) usage (); |