Import Upstream version 20180207
[hcoop/debian/mlton.git] / runtime / platform / sysctl.c
CommitLineData
7f918cf1
CE
1size_t GC_pageSize (void) {
2 size_t len;
3 int mib[2];
4
5 len = 0;
6 mib[0] = CTL_HW;
7 mib[1] = HW_PAGESIZE;
8 if (-1 == sysctl (mib, 2, NULL, &len, NULL, 0))
9 diee ("sysctl failed");
10 if (len == sizeof(unsigned long long int)) {
11 unsigned long long int pageSize;
12 if (-1 == sysctl (mib, 2, &pageSize, &len, NULL, 0))
13 diee ("sysctl failed");
14 return (size_t)pageSize;
15 } else if (len == sizeof(unsigned long int)) {
16 unsigned long int pageSize;
17 if (-1 == sysctl (mib, 2, &pageSize, &len, NULL, 0))
18 diee ("sysctl failed");
19 return (size_t)pageSize;
20 } else if (len == sizeof(unsigned int)) {
21 unsigned int pageSize;
22 if (-1 == sysctl (mib, 2, &pageSize, &len, NULL, 0))
23 diee ("sysctl failed");
24 return (size_t)pageSize;
25 } else {
26 die ("GC_pageSize");
27 }
28}
29
30uintmax_t GC_physMem (void) {
31 size_t len;
32 int mib[2];
33
34 len = 0;
35 mib[0] = CTL_HW;
36#if defined(HW_MEMSIZE)
37 /* Darwin */
38 mib[1] = HW_MEMSIZE;
39#elif defined(HW_PHYSMEM64)
40 /* NetBSD */
41 mib[1] = HW_PHYSMEM64;
42#else
43 mib[1] = HW_PHYSMEM;
44#endif
45 if (-1 == sysctl (mib, 2, NULL, &len, NULL, 0))
46 diee ("sysctl failed");
47 if (len == sizeof(unsigned long long int)) {
48 unsigned long long int physMem;
49 if (-1 == sysctl (mib, 2, &physMem, &len, NULL, 0))
50 diee ("sysctl failed");
51 return (uintmax_t)physMem;
52 } else if (len == sizeof(unsigned long int)) {
53 unsigned long int physMem;
54 if (-1 == sysctl (mib, 2, &physMem, &len, NULL, 0))
55 diee ("sysctl failed");
56 return (uintmax_t)physMem;
57 } else if (len == sizeof(unsigned int)) {
58 unsigned int physMem;
59 if (-1 == sysctl (mib, 2, &physMem, &len, NULL, 0))
60 diee ("sysctl failed");
61 return (uintmax_t)physMem;
62 } else {
63 die ("GC_physMem");
64 }
65}