| getconf.c - sbase - suckless unix tools | |
| git clone git://git.suckless.org/sbase | |
| Log | |
| Files | |
| Refs | |
| README | |
| 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_… | |
| 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_… | |
| 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:", … | |
| 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)) <… | |
| 93 if (errno) | |
| 94 eprintf("pathconf %ld:", pathcon… | |
| 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 } |