Use this function to allocate an empty, unpopulated SDL_RWops structure.
<syntaxhighlight lang="c"> SDL_RWops* SDL_AllocRW(void); </syntaxhighlight>
Returns a pointer to the allocated memory on success, or NULL on failure; call SDL_GetError() for more information.
Applications do not need to use this function unless they are providing their own SDL_RWops implementation. If you just need a SDL_RWops to read/write a common data source, you should use the built-in implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc.
You must free the returned pointer with SDL_FreeRW(). Depending on your operating system and compiler, there may be a difference between the malloc() and free() your program uses and the versions SDL calls internally. Trying to mix the two can cause crashing such as segmentation faults. Since all SDL_RWops must free themselves when their close method is called, all SDL_RWops must be allocated through this function, so they can all be freed correctly with SDL_FreeRW().
This function is available since SDL 2.0.0.
<syntaxhighlight lang="c++"></syntaxhighlight>
- include <stdlib.h>
- include "SDL.h"
return -1;
}
static Sint64 myseekfunc(SDL_RWops *context, Sint64 offset, int whence) {
return SDL_SetError("Can't seek in this kind of SDL_RWops");
}
static size_t myreadfunc(SDL_RWops *context, void *ptr, size_t size, size_t maxnum) {
SDL_memset(ptr,0,size*maxnum); return maxnum;
}
static size_t mywritefunc(SDL_RWops *context, const void *ptr, size_t size, size_t num) {
return num;
}
static int myclosefunc(SDL_RWops *context) {
if(context->type != 0xdeadbeef) { return SDL_SetError("Wrong kind of SDL_RWops for myclosefunc()"); }
free(context->hidden.unknown.data1); SDL_FreeRW(context); return 0;
}
SDL_RWops *MyCustomRWop(void) {
SDL_RWops *c=SDL_AllocRW(); if(c==NULL) return NULL;
c->size = mysizefunc; c->seek = myseekfunc; c->read = myreadfunc; c->write = mywritefunc; c->close = myclosefunc; c->type = 0xdeadbeef; c->hidden.unknown.data1 = SDL_malloc(256); return c;
} </syntaxhighlight></stdlib.h>
CategoryAPI, CategoryIO