sbase/getconf.c
Michael Forney eb74f374f2 getconf: Add an explicit return at the end of main
ISO C does not require that main() have an explicit return value
(if the end of the main function is reached, it is as if it returned
0). However, when built as sbase-box, the main function is turned
into getconf_main, which does not have the same special treatment.
2020-03-01 16:40:01 -08:00

109 lines
2.0 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;
default:
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 fshut(stdout, "<stdout>");
}
/* 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 fshut(stdout, "<stdout>");
}
/* 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 fshut(stdout, "<stdout>");
}
} 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 fshut(stdout, "<stdout>");
}
} else {
usage();
}
eprintf("invalid variable: %s\n", argv[0]);
return 0;
}