Wiki Page Content

Differences between revisions 7 and 9 (spanning 2 versions)
Revision 7 as of 2011-05-17 19:00:48
Size: 2264
Editor: SheenaSmith
Comment: add SDL_GetError to RV
Revision 9 as of 2013-08-08 18:08:39
Size: 2273
Editor: RyanGordon
Comment: Apps don't usually need this function.
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
||<tablewidth="100%" style="color: #FF0000;" :> DRAFT||
Line 6: Line 5:
Use this function to *allocate an empty, unpopulated SDL_RWops structure. * Use this function to allocate an empty, unpopulated SDL_RWops structure.
Line 16: Line 15:
*Returns a pointer to ,,the allocated memory on success,, ^a data stream^, or NULL on failure*; call [[SDL_GetError]]() for more information. Returns a pointer to the allocated memory on success, or NULL on failure; call [[SDL_GetError]]() for more information.
Line 19: Line 18:
*<<BR>>
Line 21: Line 19:
#include <string.h> /* for memset */
#include "SDL_error.h" /* for SDL_SetError */
#include "SDL_rwops.h"
Line 34: Line 28:
  memset(ptr,0,size*maxnum);   SDL_memset(ptr,0,size*maxnum);
Line 56: Line 50:
/* Note that this function is NOT static -- we want it directly callable from other source files */
Line 70: Line 63:
}}}<<BR>>* }}}
Line 73: Line 66:
*<<BR>>
/!\ You must free any memory allocated ,,with,, ^using^ [[SDL_AllocRW]]() 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. <<BR>>*
Applications do not need to use this function unless they are providing their own RWops implementation. If you just need a RWops to read/write a common data source, you should use the built-in implementations in SDL, like [[SDL_RWFromFile]]() or [[SDL_RWFromMem]](), etc.
Line 76: Line 68:
<<Color2(green,Should malloc() and free() be formatted `malloc()` and `free()`?)>> 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 RWops must free themselves when their '''close''' method is called, all RWops must be allocated through this function, so they can all be freed correctly with [[SDL_FreeRW]]().
Line 79: Line 71:
 .[[SDL_FreeRW]] *  .[[SDL_FreeRW]]

SDL_AllocRW

Use this function to allocate an empty, unpopulated SDL_RWops structure.

Syntax

SDL_RWops* SDL_AllocRW(void)

Return Value

Returns a pointer to the allocated memory on success, or NULL on failure; call SDL_GetError() for more information.

Code Examples

/* These functions should not be used except from pointers in a RWops */
static int myseekfunc(SDL_RWops *context, int offset, int whence)
{
  SDL_SetError("Can't seek in this kind of RWops");
  return(-1);
}

static int myreadfunc(SDL_RWops *context, void *ptr, int size, int maxnum)
{
  SDL_memset(ptr,0,size*maxnum);
  return(maxnum);
}

static int mywritefunc(SDL_RWops *context, const void *ptr, int size, int num)
{
  return(num);
}

static int myclosefunc(SDL_RWops *context)
{
  if(context->type != 0xdeadbeef)
  {
    SDL_SetError("Wrong kind of RWops for myclosefunc()");
    return(-1);
  }

  free(context->hidden.unknown.data1);
  SDL_FreeRW(context);
  return(0);
}

SDL_RWops *MyCustomRWop()
{
  SDL_RWops *c=SDL_AllocRW();
  if(c==NULL) return(NULL);

  c->seek =myseekfunc;
  c->read =myreadfunc;
  c->write=mywritefunc;
  c->close=myclosefunc;
  c->type =0xdeadbeef;
  c->hidden.unknown.data1=malloc(256);
  return(c);
}

Remarks

Applications do not need to use this function unless they are providing their own RWops implementation. If you just need a 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 RWops must free themselves when their close method is called, all RWops must be allocated through this function, so they can all be freed correctly with SDL_FreeRW().


CategoryAPI, CategoryIO

None: SDL_AllocRW (last edited 2016-11-20 21:53:05 by PhilippWiesemann)

(Page Info.)
Feedback
Please include your contact information if you'd like to receive a reply.
Submit