MINOR: pools: use mallinfo2() when available instead of mallinfo()

Ilya reported in issue #1391 a build warning on Fedora about mallinfo()
being deprecated in favor of mallinfo2() since glibc-2.33. Let's add
support for it. This should be backported where the following commit is
also backported: 157e39303 ("MINOR: pools: automatically disable
malloc_trim() with external allocators").

(cherry picked from commit c2afb860f297eb82039d821bd25bdd3cf66abe28)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/include/haproxy/compat.h b/include/haproxy/compat.h
index 8ce6932..8e5d09c 100644
--- a/include/haproxy/compat.h
+++ b/include/haproxy/compat.h
@@ -282,6 +282,12 @@
 #define HA_HAVE_FAST_MALLOC
 #endif
 
+/* glibc 2.33 provides mallinfo2() that overcomes mallinfo()'s type limitations */
+#if (defined(__GNU_LIBRARY__) && (__GLIBC__ > 2 || __GLIBC__ == 2 && __GLIBC_MINOR__ >= 33))
+#include <malloc.h>
+#define HA_HAVE_MALLINFO2
+#endif
+
 /* FreeBSD also has malloc_usable_size() but it requires malloc_np.h */
 #if defined(USE_MEMORY_PROFILING) && defined(__FreeBSD__) && (__FreeBSD_version >= 700002)
 #include <malloc_np.h>
diff --git a/src/pool.c b/src/pool.c
index 3c2e4a4..b8984c2 100644
--- a/src/pool.c
+++ b/src/pool.c
@@ -58,12 +58,24 @@
  */
 static void detect_allocator(void)
 {
+#ifdef HA_HAVE_MALLINFO2
+	struct mallinfo2 mi1, mi2;
+#else
 	struct mallinfo mi1, mi2;
+#endif
 	void *ptr;
 
+#ifdef HA_HAVE_MALLINFO2
+	mi1 = mallinfo2();
+#else
 	mi1 = mallinfo();
+#endif
 	ptr = DISGUISE(malloc(1));
+#ifdef HA_HAVE_MALLINFO2
+	mi2 = mallinfo2();
+#else
 	mi2 = mallinfo();
+#endif
 	free(DISGUISE(ptr));
 
 	using_libc_allocator = !!memcmp(&mi1, &mi2, sizeof(mi1));