static int do_rand_allocs(void)
{
- unsigned int size, nr, rounds = 0, ret = 0;
+ unsigned int i, size, nr, rounds = 0, ret = 0;
unsigned long total;
struct elem *e;
bool error;
+ char *c;
while (rounds++ < LOOPS) {
#ifdef STEST_SEED
nr = total = 0;
while (total < MAXSMALLOC) {
size = 8 * sizeof(struct elem) + (int) (999.0 * (rand() / (RAND_MAX + 1.0)));
- e = smalloc(size);
+ e = scalloc(1, size);
if (!e) {
printf("fail at %lu, size %u\n", total, size);
ret++;
break;
}
+
+ c = (char *)e;
+ for (i = 0; i < size; i++) {
+ if (*(c+i) != 0) {
+ printf("buffer not cleared at %lu, size %u\n", total, size);
+ ret++;
+ break;
+ }
+ }
+
+ /* stop the while loop if buffer was not cleared */
+ if (i < size)
+ break;
+
e->magic1 = MAGIC1;
e->magic2 = MAGIC2;
e->size = size;
sfree(e);
if (!error) {
- e = smalloc(LARGESMALLOC);
+ e = scalloc(1, LARGESMALLOC);
if (!e) {
error = true;
ret++;
printf("failure allocating %u bytes at %lu allocated during sfree phase\n",
LARGESMALLOC, total);
+ break;
}
- else
- sfree(e);
+
+ c = (char *)e;
+ for (i = 0; i < LARGESMALLOC; i++) {
+ if (*(c+i) != 0) {
+ error = true;
+ ret++;
+ printf("large buffer not cleared at %lu, size %u\n", total, size);
+ break;
+ }
+ }
+
+ sfree(e);
}
}
}