getconf.c - sbase - suckless unix tools
(HTM) git clone git://git.suckless.org/sbase
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
getconf.c (2048B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <errno.h>
3 #include <unistd.h>
4 #include <limits.h>
5 #include <stdlib.h>
6 #include <string.h>
7
8 #include "util.h"
9
10 struct var {
11 const char *k;
12 long v;
13 };
14
15 #include "getconf.h"
16
17 void
18 usage(void)
19 {
20 eprintf("usage: %s [-v spec] var [path]\n", argv0);
21 }
22
23 int
24 main(int argc, char *argv[])
25 {
26 size_t len;
27 long res;
28 int i;
29 char *str;
30
31 ARGBEGIN {
32 case 'v':
33 /* ignore */
34 EARGF(usage());
35 break;
36 default:
37 usage();
38 break;
39 } ARGEND
40
41 if (argc == 1) {
42 /* sysconf */
43 for (i = 0; i < LEN(sysconf_l); i++) {
44 if (strcmp(argv[0], sysconf_l[i].k))
45 continue;
46 errno = 0;
47 if ((res = sysconf(sysconf_l[i].v)) < 0) {
48 if (errno)
49 eprintf("sysconf %ld:", sysconf_l[i].v);
50 puts("undefined");
51 } else {
52 printf("%ld\n", res);
53 }
54 return fshut(stdout, "<stdout>");
55 }
56 /* confstr */
57 for (i = 0; i < LEN(confstr_l); i++) {
58 if (strcmp(argv[0], confstr_l[i].k))
59 continue;
60 errno = 0;
61 if (!(len = confstr(confstr_l[i].v, NULL, 0))) {
62 if (errno)
63 eprintf("confstr %ld:", confstr_l[i].v);
64 puts("undefined");
65 } else {
66 str = emalloc(len);
67 errno = 0;
68 if (!confstr(confstr_l[i].v, str, len)) {
69 if (errno)
70 eprintf("confstr %ld:", confstr_l[i].v);
71 puts("undefined");
72 } else {
73 puts(str);
74 }
75 free(str);
76 }
77 return fshut(stdout, "<stdout>");
78 }
79 /* limits */
80 for (i = 0; i < LEN(limits_l); i++) {
81 if (strcmp(argv[0], limits_l[i].k))
82 continue;
83 printf("%ld\n", limits_l[i].v);
84 return fshut(stdout, "<stdout>");
85 }
86 } else if (argc == 2) {
87 /* pathconf */
88 for (i = 0; i < LEN(pathconf_l); i++) {
89 if (strcmp(argv[0], pathconf_l[i].k))
90 continue;
91 errno = 0;
92 if ((res = pathconf(argv[1], pathconf_l[i].v)) < 0) {
93 if (errno)
94 eprintf("pathconf %ld:", pathconf_l[i].v);
95 puts("undefined");
96 } else {
97 printf("%ld\n", res);
98 }
99 return fshut(stdout, "<stdout>");
100 }
101 } else {
102 usage();
103 }
104
105 eprintf("invalid variable: %s\n", argv[0]);
106
107 return 0;
108 }