mirror of
https://github.com/yawut/SDL.git
synced 2026-07-29 14:43:21 -05:00
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.
This commit is contained in:
parent
4fc45bbcb3
commit
cd3bfd9c92
|
|
@ -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…
Reference in New Issue
Block a user