summaryrefslogtreecommitdiff
path: root/usr.sbin/ldpctl
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ldpctl')
-rw-r--r--usr.sbin/ldpctl/parser.c36
-rw-r--r--usr.sbin/ldpctl/parser.h4
2 files changed, 21 insertions, 19 deletions
diff --git a/usr.sbin/ldpctl/parser.c b/usr.sbin/ldpctl/parser.c
index 662c7e9a06a..312e8611775 100644
--- a/usr.sbin/ldpctl/parser.c
+++ b/usr.sbin/ldpctl/parser.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: parser.c,v 1.4 2010/09/01 13:59:17 claudio Exp $ */
+/* $OpenBSD: parser.c,v 1.5 2010/09/04 21:31:04 tedu Exp $ */
/*
* Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
@@ -114,18 +114,21 @@ static const struct token t_show_fib[] = {
{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 *);
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);
@@ -148,8 +151,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;
@@ -170,7 +174,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:
@@ -178,35 +182,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;
@@ -228,7 +232,7 @@ match_token(const char *word, const struct token *table)
return (t);
}
-void
+static void
show_valid_args(const struct token *table)
{
int i;
diff --git a/usr.sbin/ldpctl/parser.h b/usr.sbin/ldpctl/parser.h
index 69d94ea410b..424eb0df59e 100644
--- a/usr.sbin/ldpctl/parser.h
+++ b/usr.sbin/ldpctl/parser.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: parser.h,v 1.4 2010/09/01 13:59:17 claudio Exp $ */
+/* $OpenBSD: parser.h,v 1.5 2010/09/04 21:31:04 tedu Exp $ */
/*
* Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
@@ -50,8 +50,6 @@ struct parse_result {
};
struct parse_result *parse(int, char *[]);
-const struct token *match_token(const char *, const struct token *);
-void show_valid_args(const struct token *);
int parse_addr(const char *, struct in_addr *);
int parse_prefix(const char *, struct in_addr *,
u_int8_t *);