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