소스 검색

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.
Sam Lantinga 11 년 전
부모
커밋
8574c0815c
1개의 변경된 파일6개의 추가작업 그리고 1개의 파일을 삭제
  1. 6 1
      src/stdlib/SDL_stdlib.c

+ 6 - 1
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 */
 }