diff options
author | Senko Rasic <senko.rasic@collabora.co.uk> | 2010-08-05 12:10:21 +0200 |
---|---|---|
committer | Senko Rasic <senko.rasic@collabora.co.uk> | 2010-08-05 15:02:57 +0200 |
commit | 37f1d9b94d1ac2bb0fd81fd2cddf7f7886cb113b (patch) | |
tree | 6735a2796b0a8451751ebdf552cf531503171ad8 | |
parent | 5b05a339b06f49c0802a5d68bf4bfd6c7d65df6a (diff) |
write-mgr-file.c: iterate over hashtable instead of using foreach
-rw-r--r-- | src/write-mgr-file.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/src/write-mgr-file.c b/src/write-mgr-file.c index d18d26b0d..1a6aa4892 100644 --- a/src/write-mgr-file.c +++ b/src/write-mgr-file.c @@ -92,27 +92,19 @@ write_parameters (GKeyFile *f, gchar *section_name, TpBaseProtocol *protocol) } } -typedef struct { - GKeyFile *keyfile; - gchar *group_name; - GHashTable *fixed; - const gchar **allowed; -} RccSerializeContext; - static void -write_rcc_property (gpointer k, gpointer v, gpointer user_data) +write_rcc_property (GKeyFile *keyfile, + const gchar *group_name, + const gchar *key, + GValue *val) { - const gchar *key = k; - GValue *val = v; - RccSerializeContext *ctx = user_data; - switch (G_VALUE_TYPE (val)) { case G_TYPE_BOOLEAN: { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_BOOLEAN_AS_STRING, NULL); - g_key_file_set_boolean (ctx->keyfile, ctx->group_name, kf_key, + g_key_file_set_boolean (keyfile, group_name, kf_key, g_value_get_boolean (val)); g_free (kf_key); break; @@ -122,7 +114,7 @@ write_rcc_property (gpointer k, gpointer v, gpointer user_data) { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_STRING_AS_STRING, NULL); - g_key_file_set_string (ctx->keyfile, ctx->group_name, kf_key, + g_key_file_set_string (keyfile, group_name, kf_key, g_value_get_string (val)); g_free (kf_key); break; @@ -154,7 +146,7 @@ write_rcc_property (gpointer k, gpointer v, gpointer user_data) { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_INT32_AS_STRING, NULL); - g_key_file_set_integer (ctx->keyfile, ctx->group_name, kf_key, + g_key_file_set_integer (keyfile, group_name, kf_key, g_value_get_int (val)); g_free (kf_key); break; @@ -178,7 +170,7 @@ write_rcc_property (gpointer k, gpointer v, gpointer user_data) gchar **list = g_value_get_boxed (val); gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, NULL); - g_key_file_set_string_list (ctx->keyfile, ctx->group_name, + g_key_file_set_string_list (keyfile, group_name, kf_key, (const gchar **) list, g_strv_length (list)); g_free (kf_key); break; @@ -243,23 +235,34 @@ write_rccs (GKeyFile *f, const gchar *section_name, GHashTable *props) TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES, TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST); guint i; - gchar **allowed; gchar **group_names = g_new0 (gchar *, rcc_list->len + 1); for (i = 0; i < rcc_list->len; i++) { - RccSerializeContext ctx; - ctx.keyfile = f; + gchar **allowed; + gchar *group_name; + GHashTable *fixed; + GHashTableIter iter; + gpointer k, v; tp_value_array_unpack (g_ptr_array_index (rcc_list, i), 2, - &ctx.fixed, &allowed); + &fixed, &allowed); + + group_name = generate_group_name (fixed); - ctx.group_name = generate_group_name (ctx.fixed); - g_hash_table_foreach (ctx.fixed, write_rcc_property, &ctx); + g_hash_table_iter_init (&iter, fixed); + while (g_hash_table_iter_next (&iter, &k, &v)) + { + const gchar *key = k; + GValue *val = v; + + write_rcc_property (f, group_name, key, val); + } - group_names[i] = ctx.group_name; + /* takes ownership */ + group_names[i] = group_name; - g_key_file_set_string_list (f, ctx.group_name, "allowed", + g_key_file_set_string_list (f, group_name, "allowed", (const gchar **) allowed, g_strv_length (allowed)); } |