summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <sandmann@daimi.au.dk>2009-04-17 17:21:50 -0400
committerSøren Sandmann Pedersen <sandmann@daimi.au.dk>2009-04-17 17:21:50 -0400
commit9305e45245398992f583da78052cbc539092297b (patch)
tree691065dea64a6ed666850a7a64662af0ae290cdc
parent4a5cdaf1be78a97bc9dba9471b1d353aaed7174f (diff)
Use nul_string instead of g_string, add free_func argument to idle_free
-rw-r--r--dbus.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/dbus.c b/dbus.c
index 2cfcbd2..57607db 100644
--- a/dbus.c
+++ b/dbus.c
@@ -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;