From 8574c0815cfab3952c8cf4c97a5c4467a1a18f55 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 27 Nov 2013 00:29:46 -0800 Subject: [PATCH] Fixed bug 2274 - SDL_ceil is incorrectly implemented when HAVE_LIBC is not defined Ghassan Al-Mashareqa The SDL_ceil function is implemented incorrectly when HAVE_CEIL is not defined (HAVE_LIBC not defined). The following code: double val = SDL_ceil(2.3); printf("%g", val); prints "2.0", as STD_ceil is defined as: double SDL_ceil(double x) { #ifdef HAVE_CEIL return ceil(x); #else return (double)(int)((x)+0.5); #endif /* HAVE_CEIL */ } This functions is used in the SDL_BuildAudioResampleCVT function of the audio subsystem (SDL_audiocvt.c), and causes a bug in that function. --- src/stdlib/SDL_stdlib.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/stdlib/SDL_stdlib.c b/src/stdlib/SDL_stdlib.c index 2ee62beee..aa57d41b1 100644 --- a/src/stdlib/SDL_stdlib.c +++ b/src/stdlib/SDL_stdlib.c @@ -52,7 +52,12 @@ SDL_ceil(double x) #ifdef HAVE_CEIL return ceil(x); #else - return (double)(int)((x)+0.5); + double integer = SDL_floor(x); + double fraction = x - integer; + if (fraction > 0.0) { + integer += 1.0; + } + return integer; #endif /* HAVE_CEIL */ }