From de33a708988c5715a8049739b9822011d577921c Mon Sep 17 00:00:00 2001 From: Andreas Schiffler Date: Tue, 12 Mar 2013 09:10:37 -0700 Subject: [PATCH] Fix bug 1560 - SDL_RWFromConstMem write operation returns -1 but should return 0. --- include/SDL_rwops.h | 2 +- src/file/SDL_rwops.c | 2 +- test/testautomation_rwops.c | 13 +++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/SDL_rwops.h b/include/SDL_rwops.h index 933397bdf..68c8e5f0b 100644 --- a/include/SDL_rwops.h +++ b/include/SDL_rwops.h @@ -54,7 +54,7 @@ typedef struct SDL_RWops * Seek to \c offset relative to \c whence, one of stdio's whence values: * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END * - * \return the final offset in the data stream. + * \return the final offset in the data stream, or -1 on error. */ Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, int whence); diff --git a/src/file/SDL_rwops.c b/src/file/SDL_rwops.c index 440294982..55f601e34 100644 --- a/src/file/SDL_rwops.c +++ b/src/file/SDL_rwops.c @@ -451,7 +451,7 @@ static size_t SDLCALL mem_writeconst(SDL_RWops * context, const void *ptr, size_t size, size_t num) { SDL_SetError("Can't write to read-only memory"); - return (-1); + return (0); } static int SDLCALL diff --git a/test/testautomation_rwops.c b/test/testautomation_rwops.c index 6c12b28e1..101dccb2a 100644 --- a/test/testautomation_rwops.c +++ b/test/testautomation_rwops.c @@ -78,6 +78,7 @@ _testGenericRWopsValidations(SDL_RWops *rw, int write) { char buf[sizeof(RWopsHelloWorldTestString)]; Sint64 i; + size_t s; int seekPos = SDLTest_RandomIntegerInRange(4, 8); /* Clear buffer */ @@ -89,13 +90,13 @@ _testGenericRWopsValidations(SDL_RWops *rw, int write) SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %i", i); /* Test write. */ - i = SDL_RWwrite(rw, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1, 1); + s = SDL_RWwrite(rw, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1, 1); SDLTest_AssertPass("Call to SDL_RWwrite succeeded"); if (write) { - SDLTest_AssertCheck(i == (Sint64)1, "Verify result of writing one byte with SDL_RWwrite, expected 1, got %i", i); + SDLTest_AssertCheck(s == (size_t)1, "Verify result of writing one byte with SDL_RWwrite, expected 1, got %i", s); } else { - SDLTest_AssertCheck(i != (Sint64)1, "Verify result of writing with SDL_RWwrite, expected !=1, got %i", i); + SDLTest_AssertCheck(s == (size_t)0, "Verify result of writing with SDL_RWwrite, expected: 0, got %i", s); } /* Test seek to random position */ @@ -109,13 +110,13 @@ _testGenericRWopsValidations(SDL_RWops *rw, int write) SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %i", i); /* Test read */ - i = SDL_RWread( rw, buf, 1, sizeof(RWopsHelloWorldTestString)-1 ); + s = SDL_RWread( rw, buf, 1, sizeof(RWopsHelloWorldTestString)-1 ); SDLTest_AssertPass("Call to SDL_RWread succeeded"); SDLTest_AssertCheck( - i == (Sint64)(sizeof(RWopsHelloWorldTestString)-1), + s == (size_t)(sizeof(RWopsHelloWorldTestString)-1), "Verify result from SDL_RWread, expected %i, got %i", sizeof(RWopsHelloWorldTestString)-1, - i); + s); SDLTest_AssertCheck( SDL_memcmp(buf, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1 ) == 0, "Verify read bytes match expected string, expected '%s', got '%s'", RWopsHelloWorldTestString, buf);