diff options
author | Tavian Barnes <tavianator@gmail.com> | 2009-07-16 01:16:09 +0000 |
---|---|---|
committer | Tavian Barnes <tavianator@gmail.com> | 2009-07-16 01:16:09 +0000 |
commit | 8f01c5394dcce8f5d4e7102dacfcdea9d1f7b021 (patch) | |
tree | 4092a281882e34ac53ec15d582dcbf2cb0d408c0 /libdimension/camera.c | |
parent | 1928016fe7aa439d4bfb61d3a7e7b7399ca7a229 (diff) | |
download | dimension-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.c | 13 |
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); + } } |