In general, "goto" should be avoided. One commonly accepted use is to jump to the bottom of the function before returning, so all the necessary clean up code/memory freeing can be done in one place.
This avoids even more duplication in the next patch. Signed-off-by: Kenneth Graunke <[email protected]> --- tests/texturing/max-texture-size.c | 59 ++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/tests/texturing/max-texture-size.c b/tests/texturing/max-texture-size.c index 24d2122..a95def5 100644 --- a/tests/texturing/max-texture-size.c +++ b/tests/texturing/max-texture-size.c @@ -231,6 +231,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) GLfloat *pixels = NULL; GLenum err = GL_NO_ERROR; GLboolean first_oom; + bool success = false; /* Query the largest supported texture size */ glGetIntegerv(getMaxTarget(target), &maxSide); @@ -257,9 +258,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) first_oom = err == GL_OUT_OF_MEMORY; /* Report a GL error other than GL_OUT_OF_MEMORY */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY) { - free(pixels); - printf("Unexpected GL error: 0x%x\n", err); - return false; + goto out; } glTexSubImage1D(target, 0, 0, maxSide/2, GL_RGBA, @@ -270,9 +269,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) * INVALID_VALUE */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY && (!first_oom || err != GL_INVALID_VALUE)) { - free(pixels); - printf("Unexpected GL error: 0x%x\n", err); - return false; + goto out; } break; @@ -284,9 +281,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) first_oom = err == GL_OUT_OF_MEMORY; /* Report a GL error other than GL_OUT_OF_MEMORY */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY) { - free(pixels); - printf("Unexpected GL error: 0x%x\n", err); - return false; + goto out; } glTexSubImage2D(target, 0, 0, 0, maxSide/2, maxSide/2, @@ -297,9 +292,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) * INVALID_VALUE */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY && (!first_oom || err != GL_INVALID_VALUE)) { - free(pixels); - printf("Unexpected GL error: 0x%x\n", err); - return false; + goto out; } break; @@ -310,9 +303,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) err = glGetError(); /* Report a GL error other than GL_OUT_OF_MEMORY */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY) { - printf("Unexpected GL error: 0x%x\n", err); - free(pixels); - return false; + goto out; } break; @@ -325,9 +316,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) first_oom = err == GL_OUT_OF_MEMORY; /* Report a GL error other than GL_OUT_OF_MEMORY */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY) { - printf("Unexpected GL error: 0x%x\n", err); - free(pixels); - return false; + goto out; } glTexSubImage3D(target, 0, 0, 0, 0, maxSide/2, @@ -338,9 +327,7 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) * INVALID_VALUE */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY && (!first_oom || err != GL_INVALID_VALUE)) { - free(pixels); - printf("Unexpected GL error: 0x%x\n", err); - return false; + goto out; } break; @@ -355,11 +342,8 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) err = glGetError(); first_oom = first_oom || err == GL_OUT_OF_MEMORY; /* Report a GL error other than GL_OUT_OF_MEMORY */ - if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY) { - printf("Unexpected GL error: 0x%x\n", err); - free(pixels); - return false; - } + if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY) + goto out; } for (k = 0; k < 6; k++) { @@ -370,25 +354,30 @@ test_non_proxy_texture_size(GLenum target, GLenum internalformat) err = glGetError(); if (err == GL_OUT_OF_MEMORY) { - free(pixels); - return true; + success = true; + goto out; } /* Report a GL error other than GL_OUT_OF_MEMORY and * INVALID_VALUE */ if (err != GL_NO_ERROR && err != GL_OUT_OF_MEMORY && (!first_oom || err != GL_INVALID_VALUE)) { - printf("Unexpected GL error: 0x%x\n", err); - free(pixels); - return false; + goto out; } } break; } - if (pixels) - free(pixels); - /* If execution reaches this point, return true */ - return true; + + /* Apparently we succeeded. */ + success = true; + +out: + if (!success) + printf("Unexpected GL error: 0x%x\n", err); + + free(pixels); + return success; + } static bool -- 1.8.5.2 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
