Patch from Antonio SJ Musumeci:
" This code with SDL-1.2.8 and CVS: #include <stdio.h> #include <stdlib.h> #include <SDL.h> int main(int argc, char** argv) { char alphabet[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char buffer_file[27] = {0}; char buffer_mem[27] = {0}; int rv_file; int rv_mem; FILE* file_ptr; SDL_RWops* rwop_file; SDL_RWops* rwop_mem; file_ptr = fopen("./blah", "w"); fwrite(alphabet, 1, sizeof(alphabet), file_ptr); fclose(file_ptr); rwop_mem = SDL_RWFromMem(alphabet, sizeof(alphabet)); rwop_file = SDL_RWFromFile("./blah", "r"); rv_mem = SDL_RWread(rwop_mem , buffer_mem, 5, 6); rv_file = SDL_RWread(rwop_file, buffer_file, 5, 6); printf("From File: %d %s\n" "From Mem: %d %s\n", rv_file, buffer_file, rv_mem, buffer_mem); printf("Seek end of File: %d\n" "Seek end of Mem: %d\n", SDL_RWseek(rwop_file, 0, SEEK_END), SDL_RWseek(rwop_mem , 0, SEEK_END)); SDL_RWclose(rwop_file); SDL_RWclose(rwop_mem); return 0; } Produces this output: From File: 5 ABCDEFGHIJKLMNOPQRSTUVWXYZ From Mem: 5 ABCDEFGHIJKLMNOPQRSTUVWXY Seek end of File: 26 Seek end of Mem: 26 " --ryan. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401079
This commit is contained in:
parent
a3c1fe415f
commit
3a608a4430
1 changed files with 15 additions and 7 deletions
|
@ -110,15 +110,23 @@ static int mem_seek(SDL_RWops *context, int offset, int whence)
|
|||
}
|
||||
static int mem_read(SDL_RWops *context, void *ptr, int size, int maxnum)
|
||||
{
|
||||
int num;
|
||||
int total_bytes;
|
||||
int mem_available;
|
||||
|
||||
num = maxnum;
|
||||
if ( (context->hidden.mem.here + (num*size)) > context->hidden.mem.stop ) {
|
||||
num = (context->hidden.mem.stop-context->hidden.mem.here)/size;
|
||||
total_bytes = (maxnum * size);
|
||||
if ( (maxnum <= 0) || (size <= 0) || ((total_bytes / maxnum) != size) ) {
|
||||
return 0;
|
||||
}
|
||||
memcpy(ptr, context->hidden.mem.here, num*size);
|
||||
context->hidden.mem.here += num*size;
|
||||
return(num);
|
||||
|
||||
mem_available = (context->hidden.mem.stop - context->hidden.mem.here);
|
||||
if (total_bytes > mem_available) {
|
||||
total_bytes = mem_available;
|
||||
}
|
||||
|
||||
memcpy(ptr, context->hidden.mem.here, total_bytes);
|
||||
context->hidden.mem.here += total_bytes;
|
||||
|
||||
return (total_bytes / size);
|
||||
}
|
||||
static int mem_write(SDL_RWops *context, const void *ptr, int size, int num)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue