Fix bug 1560 - SDL_RWFromConstMem write operation returns -1 but should return 0.
authorAndreas Schiffler <aschiffler@ferzkopp.net>
Tue, 12 Mar 2013 09:10:37 -0700
changeset 6996 bc0fd5bced25
parent 6995 7c87aa0a189f
child 6997 0f91d1be17a4
Fix bug 1560 - SDL_RWFromConstMem write operation returns -1 but should return 0.
include/SDL_rwops.h
src/file/SDL_rwops.c
test/testautomation_rwops.c
--- a/include/SDL_rwops.h	Sun Mar 10 21:10:10 2013 -0700
+++ b/include/SDL_rwops.h	Tue Mar 12 09:10:37 2013 -0700
@@ -54,7 +54,7 @@
      *  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);
--- a/src/file/SDL_rwops.c	Sun Mar 10 21:10:10 2013 -0700
+++ b/src/file/SDL_rwops.c	Tue Mar 12 09:10:37 2013 -0700
@@ -451,7 +451,7 @@
 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
--- a/test/testautomation_rwops.c	Sun Mar 10 21:10:10 2013 -0700
+++ b/test/testautomation_rwops.c	Tue Mar 12 09:10:37 2013 -0700
@@ -78,6 +78,7 @@
 {
    char buf[sizeof(RWopsHelloWorldTestString)];
    Sint64 i;
+   size_t s;
    int seekPos = SDLTest_RandomIntegerInRange(4, 8);
 
    /* Clear buffer */
@@ -89,13 +90,13 @@
    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 @@
    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);