Mercurial > sdl-ios-xcode
changeset 1078:e2ef6b7001fd
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.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Fri, 24 Jun 2005 12:48:38 +0000 |
parents | f122afdfa025 |
children | 39b5606fa543 |
files | src/file/SDL_rwops.c |
diffstat | 1 files changed, 15 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/file/SDL_rwops.c Wed Jun 15 23:41:57 2005 +0000 +++ b/src/file/SDL_rwops.c Fri Jun 24 12:48:38 2005 +0000 @@ -110,15 +110,23 @@ } static int mem_read(SDL_RWops *context, void *ptr, int size, int maxnum) { - int num; + int total_bytes; + int mem_available; + + total_bytes = (maxnum * size); + if ( (maxnum <= 0) || (size <= 0) || ((total_bytes / maxnum) != size) ) { + return 0; + } - num = maxnum; - if ( (context->hidden.mem.here + (num*size)) > context->hidden.mem.stop ) { - num = (context->hidden.mem.stop-context->hidden.mem.here)/size; + 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, num*size); - context->hidden.mem.here += num*size; - return(num); + + 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) {