libc/minimal: Use a sys_heap for the malloc implementation

The older sys_mem_pool is going away and being replaced by a new
allocator.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
diff --git a/lib/libc/minimal/source/stdlib/malloc.c b/lib/libc/minimal/source/stdlib/malloc.c
index c3e3314..3ee9e74 100644
--- a/lib/libc/minimal/source/stdlib/malloc.c
+++ b/lib/libc/minimal/source/stdlib/malloc.c
@@ -25,14 +25,15 @@
 #define POOL_SECTION .data
 #endif /* CONFIG_USERSPACE */
 
-SYS_MEM_POOL_DEFINE(z_malloc_mem_pool, NULL, 16,
-		    CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE, 1, 4, POOL_SECTION);
+#define HEAP_BYTES CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE
+
+Z_GENERIC_SECTION(POOL_SECTION) static struct sys_heap z_malloc_heap;
+Z_GENERIC_SECTION(POOL_SECTION) static char z_malloc_heap_mem[HEAP_BYTES];
 
 void *malloc(size_t size)
 {
 	void *ret;
-
-	ret = sys_mem_pool_alloc(&z_malloc_mem_pool, size);
+	ret = sys_heap_alloc(&z_malloc_heap, size);
 	if (ret == NULL) {
 		errno = ENOMEM;
 	}
@@ -44,11 +45,23 @@
 {
 	ARG_UNUSED(unused);
 
-	sys_mem_pool_init(&z_malloc_mem_pool);
+	sys_heap_init(&z_malloc_heap, z_malloc_heap_mem, HEAP_BYTES);
 
 	return 0;
 }
 
+void *realloc(void *ptr, size_t requested_size)
+{
+	void *ret = sys_heap_realloc(&z_malloc_heap, ptr, requested_size);
+
+	return ret == NULL ? ptr : ret;
+}
+
+void free(void *ptr)
+{
+	sys_heap_free(&z_malloc_heap, ptr);
+}
+
 SYS_INIT(malloc_prepare, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
 #else /* No malloc arena */
 void *malloc(size_t size)
@@ -60,43 +73,19 @@
 
 	return NULL;
 }
-#endif
-
-void *realloc(void *ptr, size_t requested_size)
-{
-	void *new_ptr;
-	size_t copy_size;
-
-	if (ptr == NULL) {
-		return malloc(requested_size);
-	}
-
-	if (requested_size == 0) {
-		free(ptr);
-		return NULL;
-	}
-
-	copy_size = sys_mem_pool_try_expand_inplace(ptr, requested_size);
-	if (copy_size == 0) {
-		/* Existing block large enough, nothing else to do */
-		return ptr;
-	}
-
-	new_ptr = malloc(requested_size);
-	if (new_ptr == NULL) {
-		return NULL;
-	}
-
-	memcpy(new_ptr, ptr, copy_size);
-	free(ptr);
-
-	return new_ptr;
-}
 
 void free(void *ptr)
 {
-	sys_mem_pool_free(ptr);
+	ARG_UNUSED(ptr);
 }
+
+void *realloc(void *ptr, size_t requested_size)
+{
+	ARG_UNUSED(ptr);
+	return malloc(requested_size);
+}
+#endif
+
 #endif /* CONFIG_MINIMAL_LIBC_MALLOC */
 
 #ifdef CONFIG_MINIMAL_LIBC_CALLOC
@@ -122,10 +111,14 @@
 #ifdef CONFIG_MINIMAL_LIBC_REALLOCARRAY
 void *reallocarray(void *ptr, size_t nmemb, size_t size)
 {
+#if (CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE > 0)
 	if (size_mul_overflow(nmemb, size, &size)) {
 		errno = ENOMEM;
 		return NULL;
 	}
-	return realloc(ptr, size);
+	return sys_heap_realloc(&z_malloc_heap, ptr, size);
+#else
+	return NULL;
+#endif
 }
 #endif /* CONFIG_MINIMAL_LIBC_REALLOCARRAY */