chiark / gitweb /
b39204692968e987bf94fd3d7bb416c401a75b03
[elogind.git] / klibc / klibc / tests / malloctest2.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 #define NCYCLES 32768
6 #define NSLOTS  4096
7
8 struct slot {
9   char *ptr;
10   size_t size;
11 };
12
13 struct slot s[NSLOTS];
14
15 int main(void)
16 {
17   size_t sp, sq;
18   char *p, *ep, *q, *eq;
19   int r, i, j;
20   int ok;
21   int err = 0;
22
23   for ( r = 0 ; r < NCYCLES ; r++ ) {
24     i = lrand48() % NSLOTS;
25
26     if ( s[i].ptr ) {
27       free(s[i].ptr);
28       printf("Freed     %8zu bytes at %p\n", s[i].size, s[i].ptr);
29       s[i].ptr  = NULL;
30       s[i].size = 0;
31     } else {
32       sp = lrand48();           /* 32-bit random number */
33       sp >>= 12+(lrand48() % 20);
34
35       s[i].size = sp;
36       s[i].ptr  = p = malloc(sp);
37       ep = p+sp;
38       ok = 1;
39       for ( j = 0 ; j < NSLOTS ; j++ ) {
40         q = s[j].ptr;
41         if ( i != j && q ) {
42           sq = s[j].size;
43           eq = q+sq;
44           
45           if ( (p < q && ep > q) || (p >= q && p < eq) ) {
46             ok = 0;
47             err = 1;
48             break;
49           }
50         }
51       }
52       printf("Allocated %8zu bytes at %p, ok = %d\n", sp, p, ok);
53
54       if ( p )
55         memset(p, 0xee, sp);    /* Poison this memory */
56     }
57   }
58   return err;
59 }
60