summaryrefslogtreecommitdiff
path: root/nuttx/mm/mm_mallinfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/mm/mm_mallinfo.c')
-rw-r--r--nuttx/mm/mm_mallinfo.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/nuttx/mm/mm_mallinfo.c b/nuttx/mm/mm_mallinfo.c
index 4aba9770c..68c2a7bb7 100644
--- a/nuttx/mm/mm_mallinfo.c
+++ b/nuttx/mm/mm_mallinfo.c
@@ -65,15 +65,26 @@
*
************************************************************/
+#ifdef CONFIG_CAN_PASS_STRUCTS
struct mallinfo mallinfo(void)
+#else
+int mallinfo(struct mallinfo *info)
+#endif
{
- static struct mallinfo stats;
struct mm_allocnode_s *node;
size_t mxordblk = 0;
int ordblks = 0; /* Number of non-inuse chunks */
size_t uordblks = 0; /* Total allocated space */
size_t fordblks = 0; /* Total non-inuse space */
+#ifdef CONFIG_CAN_PASS_STRUCTS
+ static struct mallinfo info;
+#else
+ if (!info)
+ {
+ return ERROR;
+ }
+#endif
/* Visit each node in physical memory */
for (node = g_heapstart;
@@ -99,10 +110,19 @@ struct mallinfo mallinfo(void)
uordblks += SIZEOF_MM_ALLOCNODE; /* account for the tail node */
DEBUGASSERT(uordblks + fordblks == g_heapsize);
- stats.arena = g_heapsize;
- stats.ordblks = ordblks;
- stats.mxordblk = mxordblk;
- stats.uordblks = uordblks;
- stats.fordblks = fordblks;
- return stats;
+#ifdef CONFIG_CAN_PASS_STRUCTS
+ info.arena = g_heapsize;
+ info.ordblks = ordblks;
+ info.mxordblk = mxordblk;
+ info.uordblks = uordblks;
+ info.fordblks = fordblks;
+ return info;
+#else
+ info->arena = g_heapsize;
+ info->ordblks = ordblks;
+ info->mxordblk = mxordblk;
+ info->uordblks = uordblks;
+ info->fordblks = fordblks;
+ return OK;
+#endif
}