summaryrefslogtreecommitdiff
path: root/rsvg-defs.c
diff options
context:
space:
mode:
authorDom Lachowicz <doml@src.gnome.org>2004-03-18 02:25:24 +0000
committerDom Lachowicz <doml@src.gnome.org>2004-03-18 02:25:24 +0000
commit073cf52b0fa73db4e8165daf1048e9028fd003c7 (patch)
tree2e014bc68b902a79325cff4ec8fb760269dbda74 /rsvg-defs.c
parentc8cbc856d5436bb88d49f1d0842f19c740273b74 (diff)
downloadlibrsvg-073cf52b0fa73db4e8165daf1048e9028fd003c7.tar.gz
re-merge the RSVG-filters branch back into HEAD
Diffstat (limited to 'rsvg-defs.c')
-rw-r--r--rsvg-defs.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/rsvg-defs.c b/rsvg-defs.c
index f94db754..096b384f 100644
--- a/rsvg-defs.c
+++ b/rsvg-defs.c
@@ -23,6 +23,7 @@
*/
#include "config.h"
+#include "rsvg-private.h"
#include "rsvg-defs.h"
#include <glib/ghash.h>
@@ -32,6 +33,7 @@
struct _RsvgDefs {
GHashTable *hash;
+ GPtrArray *unnamed;
};
RsvgDefs *
@@ -40,6 +42,7 @@ rsvg_defs_new (void)
RsvgDefs *result = g_new (RsvgDefs, 1);
result->hash = g_hash_table_new (g_str_hash, g_str_equal);
+ result->unnamed = g_ptr_array_new ();
return result;
}
@@ -53,9 +56,10 @@ rsvg_defs_lookup (const RsvgDefs *defs, const char *name)
void
rsvg_defs_set (RsvgDefs *defs, const char *name, RsvgDefVal *val)
{
- g_return_if_fail(name);
-
- g_hash_table_insert (defs->hash, g_strdup (name), val);
+ if (name == NULL)
+ g_ptr_array_add(defs->unnamed, val);
+ else
+ g_hash_table_insert (defs->hash, g_strdup (name), val);
}
static void
@@ -69,7 +73,12 @@ rsvg_defs_free_each (gpointer key, gpointer value, gpointer user_data)
void
rsvg_defs_free (RsvgDefs *defs)
{
+ guint i;
g_hash_table_foreach (defs->hash, rsvg_defs_free_each, NULL);
g_hash_table_destroy (defs->hash);
+ for (i = 0; i < defs->unnamed->len; i++)
+ ((RsvgDefVal *)g_ptr_array_index(defs->unnamed, i))->free(g_ptr_array_index(defs->unnamed, i));
+
+ g_ptr_array_free(defs->unnamed, FALSE);
g_free (defs);
}