Commit 028eb838 authored by Sam Lantinga's avatar Sam Lantinga

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

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40765
parent 9c03bae4
...@@ -6,6 +6,7 @@ Version 1.0: ...@@ -6,6 +6,7 @@ Version 1.0:
1.2.7: 1.2.7:
Added CPU feature detection functions to SDL_cpuinfo.h: Added CPU feature detection functions to SDL_cpuinfo.h:
SDL_HasRDTSC(), SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() SDL_HasRDTSC(), SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE()
Added function to create RWops from const memory: SDL_RWFromConstMem()
1.2.6: 1.2.6:
Added SDL_LoadObject(), SDL_LoadFunction(), and SDL_UnloadObject() Added SDL_LoadObject(), SDL_LoadFunction(), and SDL_UnloadObject()
......
...@@ -92,6 +92,7 @@ extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char ...@@ -92,6 +92,7 @@ extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose); 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_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 SDL_RWops * SDLCALL SDL_AllocRW(void);
extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area); extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area);
......
...@@ -129,6 +129,11 @@ static int mem_write(SDL_RWops *context, const void *ptr, int size, int num) ...@@ -129,6 +129,11 @@ static int mem_write(SDL_RWops *context, const void *ptr, int size, int num)
context->hidden.mem.here += num*size; context->hidden.mem.here += num*size;
return(num); 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) static int mem_close(SDL_RWops *context)
{ {
if ( context ) { if ( context ) {
...@@ -258,6 +263,23 @@ SDL_RWops *SDL_RWFromMem(void *mem, int size) ...@@ -258,6 +263,23 @@ SDL_RWops *SDL_RWFromMem(void *mem, int size)
return(rwops); 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 *SDL_AllocRW(void)
{ {
SDL_RWops *area; SDL_RWops *area;
......
...@@ -112,6 +112,7 @@ _SDL_CondWaitTimeout ...@@ -112,6 +112,7 @@ _SDL_CondWaitTimeout
_SDL_RWFromFile _SDL_RWFromFile
_SDL_RWFromFP _SDL_RWFromFP
_SDL_RWFromMem _SDL_RWFromMem
_SDL_RWFromConstMem
_SDL_AllocRW _SDL_AllocRW
_SDL_FreeRW _SDL_FreeRW
_SDL_GetWMInfo _SDL_GetWMInfo
......
...@@ -111,6 +111,7 @@ ...@@ -111,6 +111,7 @@
SDL_RWFromFile SDL_RWFromFile
SDL_RWFromFP SDL_RWFromFP
SDL_RWFromMem SDL_RWFromMem
SDL_RWFromConstMem
SDL_AllocRW SDL_AllocRW
SDL_FreeRW SDL_FreeRW
SDL_GetWMInfo SDL_GetWMInfo
......
...@@ -112,6 +112,7 @@ ...@@ -112,6 +112,7 @@
_SDL_RWFromFile _SDL_RWFromFile
_SDL_RWFromFP _SDL_RWFromFP
_SDL_RWFromMem _SDL_RWFromMem
_SDL_RWFromConstMem
_SDL_AllocRW _SDL_AllocRW
_SDL_FreeRW _SDL_FreeRW
_SDL_GetWMInfo _SDL_GetWMInfo
......
...@@ -112,6 +112,7 @@ ...@@ -112,6 +112,7 @@
SDL_RWFromFile SDL_RWFromFile
SDL_RWFromFP SDL_RWFromFP
SDL_RWFromMem SDL_RWFromMem
SDL_RWFromConstMem
SDL_AllocRW SDL_AllocRW
SDL_FreeRW SDL_FreeRW
SDL_GetWMInfo SDL_GetWMInfo
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment