src/file/SDL_rwops.c
changeset 1078 e2ef6b7001fd
parent 769 b8d311d90021
child 1202 0748fbb272e7
     1.1 --- a/src/file/SDL_rwops.c	Wed Jun 15 23:41:57 2005 +0000
     1.2 +++ b/src/file/SDL_rwops.c	Fri Jun 24 12:48:38 2005 +0000
     1.3 @@ -110,15 +110,23 @@
     1.4  }
     1.5  static int mem_read(SDL_RWops *context, void *ptr, int size, int maxnum)
     1.6  {
     1.7 -	int num;
     1.8 +	int total_bytes;
     1.9 +	int mem_available;
    1.10 +
    1.11 +	total_bytes = (maxnum * size);
    1.12 +	if ( (maxnum <= 0) || (size <= 0) || ((total_bytes / maxnum) != size) ) {
    1.13 +		return 0;
    1.14 +	}
    1.15  
    1.16 -	num = maxnum;
    1.17 -	if ( (context->hidden.mem.here + (num*size)) > context->hidden.mem.stop ) {
    1.18 -		num = (context->hidden.mem.stop-context->hidden.mem.here)/size;
    1.19 +	mem_available = (context->hidden.mem.stop - context->hidden.mem.here);
    1.20 +	if (total_bytes > mem_available) {
    1.21 +		total_bytes = mem_available;
    1.22  	}
    1.23 -	memcpy(ptr, context->hidden.mem.here, num*size);
    1.24 -	context->hidden.mem.here += num*size;
    1.25 -	return(num);
    1.26 +
    1.27 +	memcpy(ptr, context->hidden.mem.here, total_bytes);
    1.28 +	context->hidden.mem.here += total_bytes;
    1.29 +
    1.30 +	return (total_bytes / size);
    1.31  }
    1.32  static int mem_write(SDL_RWops *context, const void *ptr, int size, int num)
    1.33  {