[Telepathy-commits] [telepathy-mission-control/master] Use GHashTableIter for setting the account properties
Alberto Mardegan
alberto.mardegan at nokia.com
Tue Feb 3 06:50:23 PST 2009
---
src/mcd-account-manager-creation.c | 60 ++++++++++++++++-------------------
1 files changed, 27 insertions(+), 33 deletions(-)
diff --git a/src/mcd-account-manager-creation.c b/src/mcd-account-manager-creation.c
index 58f7efe..e520bb0 100644
--- a/src/mcd-account-manager-creation.c
+++ b/src/mcd-account-manager-creation.c
@@ -39,10 +39,8 @@
typedef struct
{
- McdAccount *account;
GHashTable *properties;
DBusGMethodInvocation *context;
- GError *error;
} McdCreationData;
const McdDBusProp account_manager_creation_properties[] = {
@@ -50,36 +48,10 @@ const McdDBusProp account_manager_creation_properties[] = {
};
-static void
-set_property (gpointer key, gpointer val, gpointer userdata)
-{
- McdCreationData *cd = userdata;
- gchar *name = key, *dot, *iface, *pname;
- GValue *value = val;
-
- if (cd->error) return;
-
- if ((dot = strrchr (name, '.')) != NULL)
- {
- iface = g_strndup (name, dot - name);
- pname = dot + 1;
- mcd_dbusprop_set_property (TP_SVC_DBUS_PROPERTIES (cd->account),
- iface, pname, value, &cd->error);
- g_free (iface);
- }
- else
- {
- g_set_error (&cd->error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
- "Unrecognized property: %s", name);
- }
-}
-
static inline void
mcd_creation_data_free (McdCreationData *cd)
{
g_hash_table_unref (cd->properties);
- if (cd->error)
- g_error_free (cd->error);
g_slice_free (McdCreationData, cd);
}
@@ -89,6 +61,10 @@ create_account_cb (McdAccountManager *account_manager, McdAccount *account,
{
McdCreationData *cd = user_data;
const gchar *object_path;
+ GHashTableIter iter;
+ gchar *name;
+ GValue *value;
+ GError *err = NULL;
if (G_UNLIKELY (error))
{
@@ -97,11 +73,30 @@ create_account_cb (McdAccountManager *account_manager, McdAccount *account,
}
g_return_if_fail (MCD_IS_ACCOUNT (account));
- cd->account = account;
- g_hash_table_foreach (cd->properties, set_property, cd);
- if (cd->error)
+
+ g_hash_table_iter_init (&iter, cd->properties);
+ while (g_hash_table_iter_next (&iter, (gpointer)&name, (gpointer)&value) &&
+ err == NULL)
+ {
+ gchar *dot, *iface, *pname;
+
+ if ((dot = strrchr (name, '.')) != NULL)
+ {
+ iface = g_strndup (name, dot - name);
+ pname = dot + 1;
+ mcd_dbusprop_set_property (TP_SVC_DBUS_PROPERTIES (account),
+ iface, pname, value, &err);
+ g_free (iface);
+ }
+ else
+ err = g_error_new (TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
+ "Unrecognized property: %s", name);
+ }
+
+ if (err)
{
- dbus_g_method_return_error (cd->context, cd->error);
+ dbus_g_method_return_error (cd->context, err);
+ g_error_free (err);
return;
}
object_path = mcd_account_get_object_path (account);
@@ -121,7 +116,6 @@ account_manager_create_account (McSvcAccountManagerInterfaceCreation *self,
McdCreationData *cd;
cd = g_slice_new (McdCreationData);
- cd->error = NULL;
cd->properties = g_hash_table_ref (properties);
cd->context = context;
mcd_account_manager_create_account (MCD_ACCOUNT_MANAGER (self),
--
1.5.6.5
More information about the telepathy-commits
mailing list