zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/build/uClibc/libc/stdlib/malloc/heap_alloc.c b/ap/build/uClibc/libc/stdlib/malloc/heap_alloc.c
new file mode 100644
index 0000000..77b7d85
--- /dev/null
+++ b/ap/build/uClibc/libc/stdlib/malloc/heap_alloc.c
@@ -0,0 +1,51 @@
+/*
+ * libc/stdlib/malloc/heap_alloc.c -- allocate memory from a heap
+ *
+ *  Copyright (C) 2002  NEC Corporation
+ *  Copyright (C) 2002  Miles Bader <miles@gnu.org>
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License.  See the file COPYING.LIB in the main
+ * directory of this archive for more details.
+ *
+ * Written by Miles Bader <miles@gnu.org>
+ */
+
+#include <stdlib.h>
+
+#include "heap.h"
+
+
+/* Allocate and return a block at least *SIZE bytes long from HEAP.
+   *SIZE is adjusted to reflect the actual amount allocated (which may be
+   greater than requested).  */
+void *
+__heap_alloc (struct heap_free_area **heap, size_t *size)
+{
+  struct heap_free_area *fa;
+  size_t _size = *size;
+  void *mem = 0;
+
+  _size = HEAP_ADJUST_SIZE (_size);
+
+  if (_size < sizeof (struct heap_free_area))
+    /* Because we sometimes must use a freed block to hold a free-area node,
+       we must make sure that every allocated block can hold one.  */
+    _size = HEAP_ADJUST_SIZE (sizeof (struct heap_free_area));
+
+  HEAP_DEBUG (*heap, "before __heap_alloc");
+
+  /* Look for a free area that can contain _SIZE bytes.  */
+  for (fa = *heap; fa; fa = fa->next)
+    if (fa->size >= _size)
+      {
+	/* Found one!  */
+	mem = HEAP_FREE_AREA_START (fa);
+	*size = __heap_free_area_alloc (heap, fa, _size);
+	break;
+      }
+
+  HEAP_DEBUG (*heap, "after __heap_alloc");
+
+  return mem;
+}