diff options
author | Søren Sandmann Pedersen <sandmann@daimi.au.dk> | 2009-04-17 17:21:50 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <sandmann@daimi.au.dk> | 2009-04-17 17:21:50 -0400 |
commit | 9305e45245398992f583da78052cbc539092297b (patch) | |
tree | 691065dea64a6ed666850a7a64662af0ae290cdc | |
parent | 4a5cdaf1be78a97bc9dba9471b1d353aaed7174f (diff) |
Use nul_string instead of g_string, add free_func argument to idle_free
-rw-r--r-- | dbus.c | 46 |
1 files changed, 28 insertions, 18 deletions
@@ -297,7 +297,9 @@ unregister_connection (DBusConnection *connection, /* nothing */ } -nul_ptr_t *free_us; +typedef void (* nul_free_func_t) (nul_ptr_t p); + +static nul_ptr_t *free_us; static int idle_handler; static gboolean @@ -305,9 +307,13 @@ do_free (gpointer data) { nul_ptr_t *p; - for (p = free_us; *p; ++p) - g_free (*p); - + for (p = free_us; *p; p += 2) + { + nul_free_func_t func = *p; + + func (*(p + 1)); + } + nul_ptr_array_free (free_us); free_us = nul_ptr_array_new (); @@ -318,11 +324,15 @@ do_free (gpointer data) } static gpointer -idle_free (gpointer p) +idle_free (gpointer p, nul_free_func_t free_func) { if (!free_us) free_us = nul_ptr_array_new (); - + + if (free_func) + free_us = nul_ptr_array_append (free_us, free_func); + else + free_us = nul_ptr_array_append (free_us, g_free); free_us = nul_ptr_array_append (free_us, p); if (!idle_handler) @@ -349,17 +359,17 @@ make_signature (nul_dbus_type_t *type) static const char * introspect (nul_dbus_object_t *object) { - GString *xml = g_string_new (NULL); + nul_string_t *xml = nul_string_new (); nul_ptr_t *p; - g_string_append_printf (xml, "<node>\n"); + xml = nul_string_append_printf (xml, "<node>\n"); for (p = object->interfaces; *p; ++p) { nul_dbus_interface_t *interface = *p; nul_ptr_t *q; - g_string_append_printf ( + xml = nul_string_append_printf ( xml, " <interface name=\"%s\">\n", interface->name); for (q = interface->members; *q; ++q) @@ -367,14 +377,14 @@ introspect (nul_dbus_object_t *object) nul_dbus_member_t *member = *q; nul_ptr_t *r; - g_string_append_printf ( + xml = nul_string_append_printf ( xml, " <method name=\"%s\">\n", member->name); for (r = member->parameters; *r; ++r) { nul_dbus_parameter_t *parameter = *r; - g_string_append_printf ( + xml = nul_string_append_printf ( xml, " <arg name=\"%s\" direction=\"%s\" type=\"%s\"/>\n", parameter->name, @@ -382,16 +392,16 @@ introspect (nul_dbus_object_t *object) make_signature (parameter->type)); } - g_string_append_printf ( + xml = nul_string_append_printf ( xml, " </method>\n"); } - g_string_append_printf (xml, " </interface>\n"); + xml = nul_string_append_printf (xml, " </interface>\n"); } - g_string_append_printf (xml, "</node>\n"); + xml = nul_string_append_printf (xml, "</node>\n"); - return idle_free (g_string_free (xml, FALSE)); + return idle_free (xml, (nul_free_func_t)nul_string_free); } static gboolean @@ -1004,7 +1014,7 @@ make_fun_def (nul_dbus_member_t *member) int i; types = idle_free (g_new0 (nul_type_t, - nul_ptr_array_len (member->parameters) + 1)); + nul_ptr_array_len (member->parameters) + 1), NULL); types[0] = NUL_TYPE_POINTER; /* For object->data */ for (i = 1; i < nul_ptr_array_len (member->parameters); ++i) @@ -1030,7 +1040,7 @@ make_reply_fun (nul_dbus_member_t *member) int n; types = idle_free (g_new0 (nul_type_t, - nul_ptr_array_len (member->parameters) + 2)); + nul_ptr_array_len (member->parameters) + 2), NULL); n = 0; for (p = member->parameters; *p; ++p) @@ -1129,7 +1139,7 @@ nul_dbus_parameter_out (const char *name, static nul_dbus_type_t * make_type (nul_type_t t) { - nul_dbus_type_t *type = idle_free (g_new0 (nul_dbus_type_t, 1)); + nul_dbus_type_t *type = idle_free (g_new0 (nul_dbus_type_t, 1), NULL); type->type = t; |