diff --git a/client/main.c b/client/main.c
index d0aff55..e118f76 100644
--- a/client/main.c
+++ b/client/main.c
return NULL;
}
+static gboolean parse_argument_on_off(const char *arg, dbus_bool_t *value)
+{
+ if (!arg || !strlen(arg)) {
+ printf("Missing on/off argument\n");
+ return FALSE;
+ }
+
+ if (!default_ctrl) {
+ printf("No default controller available\n");
+ return FALSE;
+ }
+
+ if (!strcmp(arg, "on") || !strcmp(arg, "yes")) {
+ *value = TRUE;
+ return TRUE;
+ }
+
+ if (!strcmp(arg, "off") || !strcmp(arg, "no")) {
+ *value = FALSE;
+ return TRUE;
+ }
+
+ printf("Invalid argument %s\n", arg);
+ return FALSE;
+}
+
static void cmd_list(const char *arg)
{
GList *list;
print_adapter(proxy, NULL);
}
-static void power_callback(const DBusError *error, void *user_data)
+static void generic_callback(const DBusError *error, void *user_data)
{
- dbus_bool_t powered = GPOINTER_TO_UINT(user_data);
+ char *str = user_data;
begin_message();
if (dbus_error_is_set(error))
- printf("Failed to set power %s: %s\n",
- powered == TRUE ? "on" : "off", error->name);
+ printf("Failed to set %s: %s\n", str, error->name);
else
- printf("Changing power %s succeeded\n",
- powered == TRUE ? "on" : "off");
+ printf("Changing %s succeeded\n", str);
end_message();
}
static void cmd_power(const char *arg)
{
dbus_bool_t powered;
+ char *str;
- if (!arg || !strlen(arg)) {
- printf("Missing argument\n");
+ if (parse_argument_on_off(arg, &powered) == FALSE)
return;
- }
- if (!default_ctrl) {
- printf("No default controller available\n");
- return;
- }
+ str = g_strdup_printf("power %s", powered == TRUE ? "on" : "off");
- if (!strcmp(arg, "on") || !strcmp(arg, "yes"))
- powered = TRUE;
- else if (!strcmp(arg, "off") || !strcmp(arg, "no"))
- powered = FALSE;
- else {
- printf("Invalid argument\n");
+ if (g_dbus_proxy_set_property_basic(default_ctrl, "Powered",
+ DBUS_TYPE_BOOLEAN, &powered,
+ generic_callback, str, g_free) == TRUE)
return;
- }
-
- g_dbus_proxy_set_property_basic(default_ctrl, "Powered",
- DBUS_TYPE_BOOLEAN, &powered,
- power_callback, GUINT_TO_POINTER(powered), NULL);
-}
-static void name_callback(const DBusError *error, void *user_data)
-{
- char *name = user_data;
-
- begin_message();
-
- if (dbus_error_is_set(error))
- printf("Failed to set name \"%s\": %s\n", name, error->name);
- else
- printf("Changed name to \"%s\"\n", name);
-
- end_message();
+ g_free(str);
}
static void cmd_name(const char *arg)
if (g_dbus_proxy_set_property_basic(default_ctrl, "Name",
DBUS_TYPE_STRING, &name,
- name_callback, name, g_free) == TRUE)
+ generic_callback, name, g_free) == TRUE)
return;
g_free(name);