aboutsummaryrefslogtreecommitdiffstats
path: root/c_src/sdl_renderer.c
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-04-04 20:13:10 +0200
committerLoïc Hoguin <[email protected]>2014-04-04 20:13:10 +0200
commitbe44046850adf018e648752571247115638df75b (patch)
tree05987991abd2472db7f666334eeee64a885565a5 /c_src/sdl_renderer.c
parent0633a7b6f0b1eb20043b71cc59847ca8648732f0 (diff)
downloadesdl2-be44046850adf018e648752571247115638df75b.tar.gz
esdl2-be44046850adf018e648752571247115638df75b.tar.bz2
esdl2-be44046850adf018e648752571247115638df75b.zip
Fix potential memory leaks and other small improvements
Diffstat (limited to 'c_src/sdl_renderer.c')
-rw-r--r--c_src/sdl_renderer.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/c_src/sdl_renderer.c b/c_src/sdl_renderer.c
index 7895f11..5fa9628 100644
--- a/c_src/sdl_renderer.c
+++ b/c_src/sdl_renderer.c
@@ -254,33 +254,36 @@ NIF_FUNCTION(render_copy)
{
void* renderer_res;
void* texture_res;
- SDL_Rect *srcPtr, *dstPtr;
+ SDL_Rect *srcPtr = NULL, *dstPtr = NULL;
BADARG_IF(!enif_get_resource(env, argv[0], res_Renderer, &renderer_res));
BADARG_IF(!enif_get_resource(env, argv[1], res_Texture, &texture_res));
- if (enif_is_identical(argv[2], atom_undefined))
- srcPtr = NULL;
- else {
+ if (!enif_is_identical(argv[2], atom_undefined)) {
BADARG_IF(!enif_is_map(env, argv[2]));
srcPtr = (SDL_Rect*)enif_alloc(sizeof(SDL_Rect));
if (!map_to_rect(env, argv[2], srcPtr))
- return enif_make_badarg(env);
+ goto render_copy_badarg;
}
- if (enif_is_identical(argv[3], atom_undefined))
- dstPtr = NULL;
- else {
- BADARG_IF(!enif_is_map(env, argv[3]));
+ if (!enif_is_identical(argv[3], atom_undefined)) {
+ if (!enif_is_map(env, argv[3]))
+ goto render_copy_badarg;
dstPtr = (SDL_Rect*)enif_alloc(sizeof(SDL_Rect));
if (!map_to_rect(env, argv[3], dstPtr))
- return enif_make_badarg(env);
+ goto render_copy_badarg;
}
return nif_thread_call(env, thread_render_copy, 4,
NIF_RES_GET(Renderer, renderer_res), NIF_RES_GET(Texture, texture_res), srcPtr, dstPtr);
+
+render_copy_badarg:
+ enif_free(srcPtr);
+ enif_free(dstPtr);
+
+ return enif_make_badarg(env);
}
// render_copy_ex