summaryrefslogtreecommitdiffstats
path: root/libdimension/pattern.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdimension/pattern.c')
-rw-r--r--libdimension/pattern.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/libdimension/pattern.c b/libdimension/pattern.c
index 2a7dca6..56c7c48 100644
--- a/libdimension/pattern.c
+++ b/libdimension/pattern.c
@@ -25,25 +25,35 @@
#include "dimension-internal.h"
+static void
+dmnsn_default_pattern_free_fn(dmnsn_pattern *pattern)
+{
+ dmnsn_free(pattern);
+}
+
/* Allocate a dummy pattern */
dmnsn_pattern *
dmnsn_new_pattern(void)
{
dmnsn_pattern *pattern = DMNSN_MALLOC(dmnsn_pattern);
- pattern->free_fn = NULL;
- DMNSN_REFCOUNT_INIT(pattern);
+ dmnsn_init_pattern(pattern);
return pattern;
}
+/* Initialize a pattern */
+void
+dmnsn_init_pattern(dmnsn_pattern *pattern)
+{
+ pattern->free_fn = dmnsn_default_pattern_free_fn;
+ DMNSN_REFCOUNT_INIT(pattern);
+}
+
/* Delete a pattern */
void
dmnsn_delete_pattern(dmnsn_pattern *pattern)
{
if (DMNSN_DECREF(pattern)) {
- if (pattern->free_fn) {
- pattern->free_fn(pattern->ptr);
- }
- dmnsn_free(pattern);
+ pattern->free_fn(pattern);
}
}