summaryrefslogtreecommitdiff
path: root/src/tools/irm/irm_unbind.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/irm/irm_unbind.c')
-rw-r--r--src/tools/irm/irm_unbind.c58
1 files changed, 35 insertions, 23 deletions
diff --git a/src/tools/irm/irm_unbind.c b/src/tools/irm/irm_unbind.c
index 9e8f3c9c..0290e678 100644
--- a/src/tools/irm/irm_unbind.c
+++ b/src/tools/irm/irm_unbind.c
@@ -3,6 +3,7 @@
*
* Unbind names in the processing system
*
+ * Dimitri Staessens <dimitri.staessens@intec.ugent.be>
* Sander Vrijders <sander.vrijders@intec.ugent.be>
*
* This program is free software; you can redistribute it and/or modify
@@ -29,35 +30,46 @@
static void usage()
{
- printf("Usage: irm unbind\n"
- " name <name>\n"
- " ap <application process name>\n");
+ printf("Usage: irm unbind [OPERATION]\n"
+ "where OPERATION = {ap api ipcp help}\n");
}
-int do_unbind(int argc, char ** argv)
+static int do_help(int argc, char **argv)
{
- char * name = NULL;
- char * ap_name = NULL;
-
- while (argc > 0) {
- if (matches(*argv, "name") == 0) {
- name = *(argv + 1);
- } else if (matches(*argv, "ap") == 0) {
- ap_name = *(argv + 1);
- } else {
- printf("\"%s\" is unknown, try \"irm "
- "unbind\".\n", *argv);
- return -1;
- }
-
- argc -= 2;
- argv += 2;
- }
+ usage();
+ return 0;
+}
+
+static const struct cmd {
+ const char * cmd;
+ int (* func)(int argc, char ** argv);
+} cmds[] = {
+ { "ap", do_unbind_ap },
+ { "api", do_unbind_api },
+ { "ipcp", do_unbind_ipcp },
+ { "help", do_help },
+ { 0 }
+};
+
+static int do_cmd(const char * argv0, int argc, char ** argv)
+{
+ const struct cmd * c;
- if (name == NULL && ap_name == NULL) {
+ for (c = cmds; c->cmd; ++c)
+ if (!matches(argv0, c->cmd))
+ return c->func(argc, argv);
+
+ fprintf(stderr, "\"%s\" is unknown, try \"irm unbind help\".\n", argv0);
+
+ return -1;
+}
+
+int unbind_cmd(int argc, char ** argv)
+{
+ if (argc < 1) {
usage();
return -1;
}
- return irm_unbind(name, ap_name, 0);
+ return do_cmd(argv[0], argc, argv);
}