aboutsummaryrefslogtreecommitdiffstats
path: root/c_src/sdl_renderer.c
diff options
context:
space:
mode:
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