Added function to create RWops from const memory: SDL_RWFromConstMem()

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40765
diff --git a/WhatsNew b/WhatsNew
index 1ba2809..0421260 100644
--- a/WhatsNew
+++ b/WhatsNew
@@ -6,6 +6,7 @@
 1.2.7:
 	Added CPU feature detection functions to SDL_cpuinfo.h:
 		SDL_HasRDTSC(), SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE()
+	Added function to create RWops from const memory: SDL_RWFromConstMem()
 
 1.2.6:
 	Added SDL_LoadObject(), SDL_LoadFunction(), and SDL_UnloadObject()
diff --git a/include/SDL_rwops.h b/include/SDL_rwops.h
index b8ac438..036cd2b 100644
--- a/include/SDL_rwops.h
+++ b/include/SDL_rwops.h
@@ -92,6 +92,7 @@
 extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose);
 
 extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size);
+extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size);
 
 extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void);
 extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area);
diff --git a/src/file/SDL_rwops.c b/src/file/SDL_rwops.c
index 2855578..d39f164 100644
--- a/src/file/SDL_rwops.c
+++ b/src/file/SDL_rwops.c
@@ -129,6 +129,11 @@
 	context->hidden.mem.here += num*size;
 	return(num);
 }
+static int mem_writeconst(SDL_RWops *context, const void *ptr, int size, int num)
+{
+	SDL_SetError("Can't write to read-only memory");
+	return(-1);
+}
 static int mem_close(SDL_RWops *context)
 {
 	if ( context ) {
@@ -258,6 +263,23 @@
 	return(rwops);
 }
 
+SDL_RWops *SDL_RWFromConstMem(const void *mem, int size)
+{
+	SDL_RWops *rwops;
+
+	rwops = SDL_AllocRW();
+	if ( rwops != NULL ) {
+		rwops->seek = mem_seek;
+		rwops->read = mem_read;
+		rwops->write = mem_writeconst;
+		rwops->close = mem_close;
+		rwops->hidden.mem.base = (Uint8 *)mem;
+		rwops->hidden.mem.here = rwops->hidden.mem.base;
+		rwops->hidden.mem.stop = rwops->hidden.mem.base+size;
+	}
+	return(rwops);
+}
+
 SDL_RWops *SDL_AllocRW(void)
 {
 	SDL_RWops *area;
diff --git a/src/main/beos/exports/SDL.exp b/src/main/beos/exports/SDL.exp
index 46dc94b..591b9f9 100644
--- a/src/main/beos/exports/SDL.exp
+++ b/src/main/beos/exports/SDL.exp
@@ -112,6 +112,7 @@
 _SDL_RWFromFile
 _SDL_RWFromFP
 _SDL_RWFromMem
+_SDL_RWFromConstMem
 _SDL_AllocRW
 _SDL_FreeRW
 _SDL_GetWMInfo
diff --git a/src/main/macos/exports/SDL.x b/src/main/macos/exports/SDL.x
index ee4579a..40d1a8c 100644
--- a/src/main/macos/exports/SDL.x
+++ b/src/main/macos/exports/SDL.x
@@ -111,6 +111,7 @@
 	SDL_RWFromFile
 	SDL_RWFromFP
 	SDL_RWFromMem
+	SDL_RWFromConstMem
 	SDL_AllocRW
 	SDL_FreeRW
 	SDL_GetWMInfo
diff --git a/src/main/macosx/exports/SDL.x b/src/main/macosx/exports/SDL.x
index 7785b90..37a25b9 100644
--- a/src/main/macosx/exports/SDL.x
+++ b/src/main/macosx/exports/SDL.x
@@ -112,6 +112,7 @@
 	_SDL_RWFromFile
 	_SDL_RWFromFP
 	_SDL_RWFromMem
+	_SDL_RWFromConstMem
 	_SDL_AllocRW
 	_SDL_FreeRW
 	_SDL_GetWMInfo
diff --git a/src/main/win32/exports/SDL.def b/src/main/win32/exports/SDL.def
index 61f458c..8cb3f9a 100644
--- a/src/main/win32/exports/SDL.def
+++ b/src/main/win32/exports/SDL.def
@@ -112,6 +112,7 @@
 	SDL_RWFromFile
 	SDL_RWFromFP
 	SDL_RWFromMem
+	SDL_RWFromConstMem
 	SDL_AllocRW
 	SDL_FreeRW
 	SDL_GetWMInfo