1 /* $OpenBSD: malloc_errno.c,v 1.5 2019/06/11 22:16:13 bluhm Exp $ */
2 /*
3 * Public domain. 2003, Otto Moerbeek
4 */
5 #include <err.h>
6 #include <errno.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9
10 /* On arm64 with 2G of memory this test hangs while junking. */
11 char *malloc_options = "jj";
12
13 static void
testerrno(size_t sz)14 testerrno(size_t sz)
15 {
16 void *p;
17
18 errno = -1;
19 p = malloc(sz);
20
21 if (p == NULL && errno != ENOMEM)
22 errx(1, "fail: %lx %p %d", (unsigned long)sz, p, errno);
23
24 /* if alloc succeeded, test if errno did not change */
25 if (p != NULL && errno != -1)
26 errx(1, "fail: %lx %p %d", (unsigned long)sz, p, errno);
27
28 free(p);
29 }
30
31 /*
32 * Provide some (silly) arguments to malloc(), and check if ERRNO is set
33 * correctly.
34 */
35 int
main(int argc,char * argv[])36 main(int argc, char *argv[])
37 {
38 size_t i;
39
40 testerrno(1);
41 testerrno(100000);
42 testerrno(-1);
43 testerrno(-1000);
44 testerrno(-10000);
45 testerrno(-10000000);
46 for (i = 0; i < 0x10; i++)
47 testerrno(i * 0x10000000);
48 return 0;
49 }
50