mirror of /home/gitosis/repositories/libowfat.git
Mirror of :pserver:cvs@cvs.fefe.de:/cvs libowfat
https://www.fefe.de/libowfat/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
20 lines
664 B
20 lines
664 B
#include <rangecheck.h> |
|
#include <safemult.h> |
|
|
|
/* does an array of "elements" members of size "membersize" starting at |
|
* "arraystart" lie inside buf1[0..len-1]? */ |
|
int range_arrayinbuf(const void* buf1,size_t len, |
|
const void* arraystart,size_t elements,size_t membersize) { |
|
size_t alen; |
|
if (sizeof(alen)==8) { |
|
uint64 x; |
|
if (!umult64(elements,membersize,&x)) return 0; |
|
alen=x; |
|
} else { |
|
unsigned long long t=(unsigned long long)elements*membersize; |
|
alen=t; /* this strips the upper 32 bits of t */ |
|
if (alen!=t) return 0; /* if that changes something, we overflowed */ |
|
} |
|
return range_bufinbuf(buf1,len,arraystart,alen); |
|
} |
|
|
|
|