1 /*	$OpenBSD: malloc_ulimit2.c,v 1.2 2006/05/16 05:47:13 otto Exp $	*/
2 
3 /* Public Domain, 2006, Otto Moerbeek <otto@drijf.net> */
4 
5 #include <sys/types.h>
6 #include <sys/time.h>
7 #include <sys/resource.h>
8 #include <err.h>
9 #include <stdlib.h>
10 #include <stdio.h>
11 
12 #define FACTOR 	1024
13 
14 main()
15 {
16 	struct rlimit lim;
17 	size_t sz;
18 	int i;
19 	void *p;
20 
21 	if (getrlimit(RLIMIT_DATA, &lim) == -1)
22 		err(1, "getrlimit");
23 
24 	sz = lim.rlim_cur / FACTOR;
25 
26 	for (i = 0; ; i++) {
27 		size_t len = (sz-i) * FACTOR;
28 		p = malloc(len);
29 		if (p != NULL) {
30 			free(p);
31 			break;
32 		}
33 	}
34 	i += 10;
35 	for (; i >= 0; i--) {
36 		size_t len = (sz-i) * FACTOR;
37 		p = malloc(len);
38 		free(p);
39 		free(malloc(4096));
40 	}
41 	return (0);
42 }
43