1 /*	$OpenBSD: malloc_ulimit2.c,v 1.5 2019/06/12 11:31:36 bluhm 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 /* This test takes forever with junking turned on. */
15 char *malloc_options = "jj";
16 
17 int
18 main()
19 {
20 	struct rlimit lim;
21 	size_t sz;
22 	int i;
23 	void *p;
24 
25 	if (getrlimit(RLIMIT_DATA, &lim) == -1)
26 		err(1, "getrlimit");
27 
28 	sz = lim.rlim_cur / FACTOR;
29 
30 	for (i = 0; ; i++) {
31 		size_t len = (sz-i) * FACTOR;
32 		p = malloc(len);
33 		if (p != NULL) {
34 			free(p);
35 			break;
36 		}
37 	}
38 	i += 10;
39 	for (; i >= 0; i--) {
40 		size_t len = (sz-i) * FACTOR;
41 		p = malloc(len);
42 		free(p);
43 		free(malloc(4096));
44 	}
45 	return (0);
46 }
47