clock: Accept variant types in SetProperty
authorTim Sander <tim01@iss.tu-darmstadt.de>
Thu, 1 Mar 2012 12:29:44 +0000 (13:29 +0100)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 1 Mar 2012 12:45:25 +0000 (13:45 +0100)
According the D-Bus API, the Clock interface accepts
variant types.

src/clock.c

index 0d7f870..db4974d 100644 (file)
@@ -179,6 +179,11 @@ static DBusMessage *set_property(DBusConnection *conn,
                struct timeval tv;
                dbus_uint64_t newval;
 
+               if (type == DBUS_TYPE_VARIANT) {
+                       DBusMessageIter variant = value;
+                       dbus_message_iter_recurse(&variant, &value);
+                       type = dbus_message_iter_get_arg_type(&value);
+               }
                if (type != DBUS_TYPE_UINT64)
                        return __connman_error_invalid_arguments(msg);
 
@@ -200,6 +205,11 @@ static DBusMessage *set_property(DBusConnection *conn,
                const char *strval;
                enum time_updates newval;
 
+               if (type == DBUS_TYPE_VARIANT) {
+                       DBusMessageIter variant = value;
+                       dbus_message_iter_recurse(&variant, &value);
+                       type = dbus_message_iter_get_arg_type(&value);
+               }
                if (type != DBUS_TYPE_STRING)
                        return __connman_error_invalid_arguments(msg);
 
@@ -220,6 +230,11 @@ static DBusMessage *set_property(DBusConnection *conn,
        } else if (g_str_equal(name, "Timezone") == TRUE) {
                const char *strval;
 
+               if (type == DBUS_TYPE_VARIANT) {
+                       DBusMessageIter variant = value;
+                       dbus_message_iter_recurse(&variant, &value);
+                       type = dbus_message_iter_get_arg_type(&value);
+               }
                if (type != DBUS_TYPE_STRING)
                        return __connman_error_invalid_arguments(msg);
 
@@ -234,6 +249,11 @@ static DBusMessage *set_property(DBusConnection *conn,
                const char *strval;
                enum timezone_updates newval;
 
+               if (type == DBUS_TYPE_VARIANT) {
+                       DBusMessageIter variant = value;
+                       dbus_message_iter_recurse(&variant, &value);
+                       type = dbus_message_iter_get_arg_type(&value);
+               }
                if (type != DBUS_TYPE_STRING)
                        return __connman_error_invalid_arguments(msg);
 
@@ -254,6 +274,11 @@ static DBusMessage *set_property(DBusConnection *conn,
        } else if (g_str_equal(name, "Timeservers") == TRUE) {
                DBusMessageIter entry;
 
+               if (type == DBUS_TYPE_VARIANT) {
+                       DBusMessageIter variant = value;
+                       dbus_message_iter_recurse(&variant, &value);
+                       type = dbus_message_iter_get_arg_type(&value);
+               }
                if (type != DBUS_TYPE_ARRAY)
                        return __connman_error_invalid_arguments(msg);