summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2011-01-14 11:33:26 -0500
committerRyan Lortie <desrt@desrt.ca>2011-01-14 11:33:26 -0500
commit08529e13f62a33e7ed94a2319c9f35feea95fa6a (patch)
treeebe37f20c8a498dd991d68a1f9407ec55d476578
parent0e48388eb0d97d72c9914fe724e3a23b28d5e82c (diff)
downloaddconf-08529e13f62a33e7ed94a2319c9f35feea95fa6a.tar.gz
Use normal slice allocation for OutstandingWatch
The fact that the last commit broke the old code is proof that it was far too fragile. Change it to use more common idioms (at the cost of an extremely marginal increase in memory consumption).
-rw-r--r--gsettings/dconfsettingsbackend.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/gsettings/dconfsettingsbackend.c b/gsettings/dconfsettingsbackend.c
index 0cab0d3..bbd3c32 100644
--- a/gsettings/dconfsettingsbackend.c
+++ b/gsettings/dconfsettingsbackend.c
@@ -478,7 +478,7 @@ typedef struct
{
DConfSettingsBackend *dcsb;
guint64 state;
- gchar name[1];
+ gchar *name;
gint outstanding;
} OutstandingWatch;
@@ -490,11 +490,11 @@ outstanding_watch_new (DConfSettingsBackend *dcsb,
gsize length;
length = strlen (name);
- watch = g_malloc (G_STRUCT_OFFSET (OutstandingWatch, name) + length + 1);
+ watch = g_slice_new (OutstandingWatch);
watch->dcsb = g_object_ref (dcsb);
watch->state = dconf_engine_get_state (dcsb->engine);
watch->outstanding = 0;
- strcpy (watch->name, name);
+ watch->name = g_strdup (name);
return watch;
}
@@ -505,7 +505,9 @@ outstanding_watch_free (OutstandingWatch *watch)
if (--watch->outstanding == 0)
{
g_object_unref (watch->dcsb);
- g_free (watch);
+ g_free (watch->name);
+
+ g_slice_free (OutstandingWatch, watch);
}
}