24 #include <sys/errno.h>
25 #include <arpa/inet.h>
35 #define KEAMA_USAGE "Usage: keama [-4|-6] [-D] [-N]" \
36 " [-r {perform|fatal|pass}\\n" \
37 " [-l hook-library-path]" \
38 " [-i input-file] [-o output-file]\n"
41 usage(
const char *sfmt,
const char *sarg) {
43 fprintf(stderr, sfmt, sarg);
44 fprintf(stderr,
"\n");
60 static const char use_noarg[] =
"No argument for command: %s";
61 static const char bad_resolve[] =
"Bad -r argument: %s";
64 main(
int argc,
char **argv) {
73 for (i = 1; i < argc; i++) {
74 if (strcmp(argv[i],
"-4") == 0)
76 else if (strcmp(argv[i],
"-6") == 0)
78 else if (strcmp(argv[i],
"-D") == 0)
80 else if (strcmp(argv[i],
"-N") == 0)
82 else if (strcmp(argv[i],
"-T") == 0)
84 else if (strcmp(argv[i],
"-r") == 0) {
86 usage(use_noarg, argv[i - 1]);
87 if (strcmp(argv[i],
"perform") == 0)
89 else if (strcmp(argv[i],
"fatal") == 0)
91 else if (strcmp(argv[i],
"pass") == 0)
94 usage(bad_resolve, argv[i]);
95 }
else if (strcmp(argv[i],
"-l") == 0) {
97 usage(use_noarg, argv[i - 1]);
99 }
else if (strcmp(argv[i],
"-i") == 0) {
101 usage(use_noarg, argv[i - 1]);
103 }
else if (strcmp(argv[i],
"-o") == 0) {
105 usage(use_noarg, argv[i - 1]);
108 usage(
"Unknown command: %s", argv[i]);
112 usage(
"address family must be set using %s",
"-4 or -6");
126 usage(
"out of memory reading standard "
127 "input: %s", strerror(errno));
128 cc = read(fd,
inbuf + oldsize, newsize - oldsize);
130 usage(
"error reading standard input: %s",
132 if (cc + oldsize < newsize) {
133 newsize = cc + oldsize;
140 usage(
"Cannot open '%s' for reading",
input_file);
146 usage(
"Cannot open '%s' for writing",
output_file);
152 assert(cfile != NULL);
182 size_t amount = new_size *
sizeof(
struct element *);
185 if (pc->
stack == NULL)
202 snprintf(fbuf,
sizeof(fbuf),
"%s line %d: %s",
206 vsnprintf(mbuf,
sizeof(mbuf), fbuf, list);
212 if (lix <
sizeof(lexbuf) - 1)
215 for (; lix < (
sizeof lexbuf) - 1 && (lix & 7); lix++)
221 fprintf(stderr,
"%s\n%s\n", mbuf, cfile->
token_line);
223 fprintf(stderr,
"%s^\n", lexbuf);