summaryrefslogtreecommitdiff
path: root/security/gvmd/files/patch-src_utils.c
blob: cf3e94bdf3ca08808acd9bc2135e68810df6aa02 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--- src/utils.c	2024-09-11 02:00:14.000000000 -0700
+++ src/utils.c	2024-09-19 13:33:16.044626000 -0700
@@ -34,7 +34,7 @@
 /**
  * @brief Needed for nanosleep.
  */
-#define _POSIX_C_SOURCE 199309L
+//#define _POSIX_C_SOURCE 199309L
 
 #include "utils.h"
 
@@ -50,6 +50,11 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
+#if defined(__FreeBSD__)
+#include <sys/sysctl.h>
+#include <sys/types.h>
+#endif
+
 #include <gvm/base/gvm_sentry.h>
 
 #undef G_LOG_DOMAIN
@@ -1035,8 +1040,23 @@
 guint64
 phys_mem_available ()
 {
-  return (unsigned long long)(sysconf(_SC_AVPHYS_PAGES))
+  uint64_t retval;
+
+#if defined(__FreeBSD__)
+  uint64_t npages, pagesize;
+  size_t npages_len = sizeof(npages);
+  size_t pagesize_len = sizeof(pagesize);
+
+  sysctlbyname("vm.stats.vm.v_free_count", &npages, &npages_len, NULL, 0);
+  sysctlbyname("vm.stats.vm.v_page_size", &pagesize, &pagesize_len, NULL, 0);
+
+  retval = pagesize * npages;
+#else
+  retval=(unsigned long long)(sysconf(_SC_AVPHYS_PAGES))
     * sysconf(_SC_PAGESIZE);
+#endif
+
+ return retval;
 }
 
 /**