#include <signal.h>
#include <sys/wait.h>'''],
['mallinfo', '''#include <malloc.h>'''],
+ ['mallinfo2', '''#include <malloc.h>'''],
['execveat', '''#include <unistd.h>'''],
['close_range', '''#include <unistd.h>'''],
['epoll_pwait2', '''#include <sys/epoll.h>'''],
}
#if HAVE_SELINUX
-# if HAVE_MALLINFO
-static struct mallinfo mallinfo_nowarn(void) {
- /* glibc has deprecated mallinfo(), but the replacement malloc_info() returns an XML blob ;=[ */
+# if HAVE_MALLINFO2
+# define HAVE_GENERIC_MALLINFO 1
+typedef struct mallinfo2 generic_mallinfo;
+static generic_mallinfo generic_mallinfo_get(void) {
+ return mallinfo2();
+}
+# elif HAVE_MALLINFO
+# define HAVE_GENERIC_MALLINFO 1
+typedef struct mallinfo generic_mallinfo;
+static generic_mallinfo generic_mallinfo_get(void) {
+ /* glibc has deprecated mallinfo(), let's suppress the deprecation warning if mallinfo2() doesn't
+ * exist yet. */
DISABLE_WARNING_DEPRECATED_DECLARATIONS
return mallinfo();
REENABLE_WARNING
}
# else
-# warning "mallinfo() is missing, add mallinfo2() supported instead."
+# define HAVE_GENERIC_MALLINFO 0
# endif
static int open_label_db(void) {
usec_t before_timestamp, after_timestamp;
char timespan[FORMAT_TIMESPAN_MAX];
-# if HAVE_MALLINFO
- struct mallinfo before_mallinfo = mallinfo_nowarn();
+# if HAVE_GENERIC_MALLINFO
+ generic_mallinfo before_mallinfo = generic_mallinfo_get();
# endif
before_timestamp = now(CLOCK_MONOTONIC);
return log_enforcing_errno(errno, "Failed to initialize SELinux labeling handle: %m");
after_timestamp = now(CLOCK_MONOTONIC);
-# if HAVE_MALLINFO
- struct mallinfo after_mallinfo = mallinfo_nowarn();
- int l = after_mallinfo.uordblks > before_mallinfo.uordblks ? after_mallinfo.uordblks - before_mallinfo.uordblks : 0;
- log_debug("Successfully loaded SELinux database in %s, size on heap is %iK.",
+# if HAVE_GENERIC_MALLINFO
+ generic_mallinfo after_mallinfo = generic_mallinfo_get();
+ size_t l = LESS_BY((size_t) after_mallinfo.uordblks, (size_t) before_mallinfo.uordblks);
+ log_debug("Successfully loaded SELinux database in %s, size on heap is %zuK.",
format_timespan(timespan, sizeof(timespan), after_timestamp - before_timestamp, 0),
DIV_ROUND_UP(l, 1024));
# else