diff --git a/client/main.c b/client/main.c
index b5af273..5ce65ef 100644
--- a/client/main.c
+++ b/client/main.c
return TRUE;
}
-static gboolean parse_argument_on_off(const char *arg, dbus_bool_t *value)
+static gboolean parse_argument(const char *arg, const char **arg_table,
+ const char *msg, dbus_bool_t *value,
+ const char **option)
{
+ const char **opt;
+
if (!arg || !strlen(arg)) {
- rl_printf("Missing on/off argument\n");
+ if (msg)
+ rl_printf("Missing on/off/%s argument\n", msg);
+ else
+ rl_printf("Missing on/off argument\n");
return FALSE;
}
if (!strcmp(arg, "on") || !strcmp(arg, "yes")) {
*value = TRUE;
+ if (option)
+ *option = "";
return TRUE;
}
return TRUE;
}
- rl_printf("Invalid argument %s\n", arg);
- return FALSE;
-}
-
-static gboolean parse_argument_agent(const char *arg, dbus_bool_t *value,
- const char **capability)
-{
- const char * const *opt;
-
- if (arg == NULL || strlen(arg) == 0) {
- rl_printf("Missing on/off/capability argument\n");
- return FALSE;
- }
-
- if (strcmp(arg, "on") == 0 || strcmp(arg, "yes") == 0) {
- *value = TRUE;
- *capability = "";
- return TRUE;
- }
-
- if (strcmp(arg, "off") == 0 || strcmp(arg, "no") == 0) {
- *value = FALSE;
- return TRUE;
- }
-
- for (opt = agent_arguments; *opt; opt++) {
+ for (opt = arg_table; opt && *opt; opt++) {
if (strcmp(arg, *opt) == 0) {
*value = TRUE;
- *capability = *opt;
+ *option = *opt;
return TRUE;
}
}
dbus_bool_t powered;
char *str;
- if (parse_argument_on_off(arg, &powered) == FALSE)
+ if (parse_argument(arg, NULL, NULL, &powered, NULL) == FALSE)
return;
if (check_default_ctrl() == FALSE)
dbus_bool_t pairable;
char *str;
- if (parse_argument_on_off(arg, &pairable) == FALSE)
+ if (parse_argument(arg, NULL, NULL, &pairable, NULL) == FALSE)
return;
if (check_default_ctrl() == FALSE)
dbus_bool_t discoverable;
char *str;
- if (parse_argument_on_off(arg, &discoverable) == FALSE)
+ if (parse_argument(arg, NULL, NULL, &discoverable, NULL) == FALSE)
return;
if (check_default_ctrl() == FALSE)
dbus_bool_t enable;
const char *capability;
- if (parse_argument_agent(arg, &enable, &capability) == FALSE)
+ if (parse_argument(arg, agent_arguments, "capability",
+ &enable, &capability) == FALSE)
return;
if (enable == TRUE) {
dbus_bool_t enable;
const char *method;
- if (parse_argument_on_off(arg, &enable) == FALSE)
+ if (parse_argument(arg, NULL, NULL, &enable, NULL) == FALSE)
return;
if (check_default_ctrl() == FALSE)
{
dbus_bool_t enable;
- if (parse_argument_on_off(arg, &enable) == FALSE)
+ if (parse_argument(arg, NULL, NULL, &enable, NULL) == FALSE)
return;
if (!default_attr) {
return argument_generator(text, state, agent_arguments);
}
-static gboolean parse_argument_advertise(const char *arg, dbus_bool_t *value,
- const char **type)
-{
- const char * const *opt;
-
- if (arg == NULL || strlen(arg) == 0) {
- rl_printf("Missing on/off/type argument\n");
- return FALSE;
- }
-
- if (strcmp(arg, "on") == 0 || strcmp(arg, "yes") == 0) {
- *value = TRUE;
- *type = "";
- return TRUE;
- }
-
- if (strcmp(arg, "off") == 0 || strcmp(arg, "no") == 0) {
- *value = FALSE;
- return TRUE;
- }
-
- for (opt = ad_arguments; *opt; opt++) {
- if (strcmp(arg, *opt) == 0) {
- *value = TRUE;
- *type = *opt;
- return TRUE;
- }
- }
-
- rl_printf("Invalid argument %s\n", arg);
- return FALSE;
-}
-
static void cmd_advertise(const char *arg)
{
dbus_bool_t enable;
const char *type;
- if (parse_argument_advertise(arg, &enable, &type) == FALSE)
+ if (parse_argument(arg, ad_arguments, "type",
+ &enable, &type) == FALSE)
return;
if (!default_ctrl || !default_ctrl->ad_proxy) {
{
dbus_bool_t powered;
- if (parse_argument_on_off(arg, &powered) == FALSE)
+ if (parse_argument(arg, NULL, NULL, &powered, NULL) == FALSE)
return;
ad_advertise_tx_power(dbus_conn, powered);