# HG changeset patch
# User Matthew Wild <mwild1@gmail.com>
# Date 1341769708 -3600
# Node ID 2c1de519f639567beba869151de156f62816a29b
# Parent  2975c7008ccdaacb929e1da5333c2b0db9551cae# Parent  6d9317ea79b2f2053a65b1756bd7551f2f94e96c
Merge with backout

diff -r 6d9317ea79b2 -r 2c1de519f639 util-src/pposix.c
--- a/util-src/pposix.c	Sun Jul 08 18:48:22 2012 +0100
+++ b/util-src/pposix.c	Sun Jul 08 18:48:28 2012 +0100
@@ -34,6 +34,11 @@
 #include "lua.h"
 #include "lauxlib.h"
 
+#if (defined(_SVID_SOURCE) && !defined(WITHOUT_MALLINFO))
+	#include <malloc.h>
+	#define WITH_MALLINFO
+#endif
+
 /* Daemonization support */
 
 static int lc_daemonize(lua_State *L)
@@ -612,6 +617,25 @@
 	return 1;
 }
 
+#ifdef WITH_MALLINFO
+int lc_meminfo(lua_State* L)
+{
+	struct mallinfo info = mallinfo();
+	lua_newtable(L);
+	lua_pushinteger(L, info.arena);
+	lua_setfield(L, -2, "allocated");
+	lua_pushinteger(L, info.hblkhd);
+	lua_setfield(L, -2, "allocated_mmap");
+	lua_pushinteger(L, info.uordblks);
+	lua_setfield(L, -2, "used");
+	lua_pushinteger(L, info.fordblks);
+	lua_setfield(L, -2, "unused");
+	lua_pushinteger(L, info.keepcost);
+	lua_setfield(L, -2, "returnable");
+	return 1;
+}
+#endif
+
 /* Register functions */
 
 int luaopen_util_pposix(lua_State *L)
@@ -645,6 +669,10 @@
 
 		{ "setenv", lc_setenv },
 
+#ifdef WITH_MALLINFO
+		{ "meminfo", lc_meminfo },
+#endif
+
 		{ NULL, NULL }
 	};