summaryrefslogtreecommitdiffstats
path: root/libdimension/camera.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2009-07-16 01:16:09 +0000
committerTavian Barnes <tavianator@gmail.com>2009-07-16 01:16:09 +0000
commit8f01c5394dcce8f5d4e7102dacfcdea9d1f7b021 (patch)
tree4092a281882e34ac53ec15d582dcbf2cb0d408c0 /libdimension/camera.c
parent1928016fe7aa439d4bfb61d3a7e7b7399ca7a229 (diff)
downloaddimension-8f01c5394dcce8f5d4e7102dacfcdea9d1f7b021.tar.xz
Add destructor callbacks for polymorphic C types, and use their base
dmnsn_delete_*() function.
Diffstat (limited to 'libdimension/camera.c')
-rw-r--r--libdimension/camera.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/libdimension/camera.c b/libdimension/camera.c
index 5a321ef..dfa14e6 100644
--- a/libdimension/camera.c
+++ b/libdimension/camera.c
@@ -25,12 +25,21 @@
dmnsn_camera *
dmnsn_new_camera()
{
- return malloc(sizeof(dmnsn_camera));
+ dmnsn_camera *camera = malloc(sizeof(dmnsn_camera));
+ if (camera) {
+ camera->free_fn = NULL;
+ }
+ return camera;
}
/* Free a dummy camera */
void
dmnsn_delete_camera(dmnsn_camera *camera)
{
- free(camera);
+ if (camera) {
+ if (camera->free_fn) {
+ (*camera->free_fn)(camera->ptr);
+ }
+ free(camera);
+ }
}