summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ripctl/parser.c
diff options
context:
space:
mode:
authortedu <tedu@openbsd.org>2010-09-04 21:31:04 +0000
committertedu <tedu@openbsd.org>2010-09-04 21:31:04 +0000
commit6be5843ec61e3a3d3891b84615bd5eb6f8c55d63 (patch)
tree0201aea89051ec69781f644fb00a69fb718875e7 /usr.sbin/ripctl/parser.c
parentRemove redundant prototype left behind by deraadt@ (diff)
downloadwireguard-openbsd-6be5843ec61e3a3d3891b84615bd5eb6f8c55d63.tar.xz
wireguard-openbsd-6be5843ec61e3a3d3891b84615bd5eb6f8c55d63.zip
move some things around to make intentions clear. not really a functional
change. ok claudio
Diffstat (limited to 'usr.sbin/ripctl/parser.c')
-rw-r--r--usr.sbin/ripctl/parser.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/usr.sbin/ripctl/parser.c b/usr.sbin/ripctl/parser.c
index 04bd2becc9e..6ed7f935f2d 100644
--- a/usr.sbin/ripctl/parser.c
+++ b/usr.sbin/ripctl/parser.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: parser.c,v 1.4 2009/11/13 20:09:54 jsg Exp $ */
+/* $OpenBSD: parser.c,v 1.5 2010/09/04 21:31:04 tedu Exp $ */
/*
* Copyright (c) 2006 Michele Marchetto <mydecay@openbeer.it>
@@ -115,18 +115,21 @@ static const struct token t_log[] = {
{ENDTOKEN, "", NONE, NULL}
};
-static struct parse_result res;
+static const struct token *match_token(const char *, const struct token *,
+ struct parse_result *);
+static void show_valid_args(const struct token *table)
struct parse_result *
parse(int argc, char *argv[])
{
+ static struct parse_result res;
const struct token *table = t_main;
const struct token *match;
bzero(&res, sizeof(res));
while (argc >= 0) {
- if ((match = match_token(argv[0], table)) == NULL) {
+ if ((match = match_token(argv[0], table, &res)) == NULL) {
fprintf(stderr, "valid commands/args:\n");
show_valid_args(table);
return (NULL);
@@ -149,8 +152,9 @@ parse(int argc, char *argv[])
return (&res);
}
-const struct token *
-match_token(const char *word, const struct token *table)
+static const struct token *
+match_token(const char *word, const struct token *table,
+ struct parse_result *res)
{
u_int i, match;
const struct token *t = NULL;
@@ -171,7 +175,7 @@ match_token(const char *word, const struct token *table)
match++;
t = &table[i];
if (t->value)
- res.action = t->value;
+ res->action = t->value;
}
break;
case FLAG:
@@ -179,35 +183,35 @@ match_token(const char *word, const struct token *table)
strlen(word)) == 0) {
match++;
t = &table[i];
- res.flags |= t->value;
+ res->flags |= t->value;
}
break;
case ADDRESS:
- if (parse_addr(word, &res.addr)) {
+ if (parse_addr(word, &res->addr)) {
match++;
t = &table[i];
if (t->value)
- res.action = t->value;
+ res->action = t->value;
}
break;
case PREFIX:
- if (parse_prefix(word, &res.addr, &res.prefixlen)) {
+ if (parse_prefix(word, &res->addr, &res->prefixlen)) {
match++;
t = &table[i];
if (t->value)
- res.action = t->value;
+ res->action = t->value;
}
break;
case IFNAME:
if (!match && word != NULL && strlen(word) > 0) {
- if (strlcpy(res.ifname, word,
- sizeof(res.ifname)) >=
- sizeof(res.ifname))
+ if (strlcpy(res->ifname, word,
+ sizeof(res->ifname)) >=
+ sizeof(res->ifname))
err(1, "interface name too long");
match++;
t = &table[i];
if (t->value)
- res.action = t->value;
+ res->action = t->value;
}
break;
@@ -229,7 +233,7 @@ match_token(const char *word, const struct token *table)
return (t);
}
-void
+static void
show_valid_args(const struct token *table)
{
int i;