]> git.ipfire.org Git - thirdparty/systemd.git/blob - klibc/klibc/tests/malloctest2.c
[PATCH] support log-priority levels in udev.conf
[thirdparty/systemd.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