de28c8bfa7
this simplifies the getconf.sh script and handling parallel make
106 lines
1.9 KiB
C
106 lines
1.9 KiB
C
/* See LICENSE file for copyright and license details. */
|
|
#include <errno.h>
|
|
#include <unistd.h>
|
|
#include <limits.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "util.h"
|
|
|
|
struct var {
|
|
const char *k;
|
|
long v;
|
|
};
|
|
|
|
#include "getconf.h"
|
|
|
|
void
|
|
usage(void)
|
|
{
|
|
eprintf("usage: %s [-v spec] var [path]\n", argv0);
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
size_t len;
|
|
long res;
|
|
int i;
|
|
char *str;
|
|
|
|
ARGBEGIN {
|
|
case 'v':
|
|
/* ignore */
|
|
EARGF(usage());
|
|
break;
|
|
} ARGEND
|
|
|
|
if (argc == 1) {
|
|
/* sysconf */
|
|
for (i = 0; i < LEN(sysconf_l); i++) {
|
|
if (strcmp(argv[0], sysconf_l[i].k))
|
|
continue;
|
|
errno = 0;
|
|
if ((res = sysconf(sysconf_l[i].v)) < 0) {
|
|
if (errno)
|
|
eprintf("sysconf %ld:", sysconf_l[i].v);
|
|
puts("undefined");
|
|
} else {
|
|
printf("%ld\n", res);
|
|
}
|
|
return 0;
|
|
}
|
|
/* confstr */
|
|
for (i = 0; i < LEN(confstr_l); i++) {
|
|
if (strcmp(argv[0], confstr_l[i].k))
|
|
continue;
|
|
errno = 0;
|
|
if (!(len = confstr(confstr_l[i].v, NULL, 0))) {
|
|
if (errno)
|
|
eprintf("confstr %ld:", confstr_l[i].v);
|
|
puts("undefined");
|
|
} else {
|
|
str = emalloc(len);
|
|
errno = 0;
|
|
if (!confstr(confstr_l[i].v, str, len)) {
|
|
if (errno)
|
|
eprintf("confstr %ld:", confstr_l[i].v);
|
|
puts("undefined");
|
|
} else {
|
|
puts(str);
|
|
}
|
|
free(str);
|
|
}
|
|
return 0;
|
|
}
|
|
/* limits */
|
|
for (i = 0; i < LEN(limits_l); i++) {
|
|
if (strcmp(argv[0], limits_l[i].k))
|
|
continue;
|
|
printf("%ld\n", limits_l[i].v);
|
|
return 0;
|
|
}
|
|
} else if (argc == 2) {
|
|
/* pathconf */
|
|
for (i = 0; i < LEN(pathconf_l); i++) {
|
|
if (strcmp(argv[0], pathconf_l[i].k))
|
|
continue;
|
|
errno = 0;
|
|
if ((res = pathconf(argv[1], pathconf_l[i].v)) < 0) {
|
|
if (errno)
|
|
eprintf("pathconf %ld:", pathconf_l[i].v);
|
|
puts("undefined");
|
|
} else {
|
|
printf("%ld\n", res);
|
|
}
|
|
return 0;
|
|
}
|
|
} else {
|
|
usage();
|
|
}
|
|
|
|
puts("undefined");
|
|
|
|
return 1;
|
|
}
|