mescc: Tinycc support: calloc,malloc,realloc.
[mes.git] / mlibc / libc-mes.c
index 259f13948afd6e7b425ea046200a35286c4d9b1e..16eea931d2d41bf407383d9219450fcf1d58739d 100644 (file)
@@ -18,6 +18,9 @@
  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <stdarg.h>
+#include <stdlib.h>
+
 int g_stdin = 0;
 char **g_environment;
 int _env ();
 int g_stdin = 0;
 char **g_environment;
 int _env ();
@@ -303,28 +306,24 @@ atoi (char const *s)
   return i * sign;
 }
 
   return i * sign;
 }
 
-//void *g_malloc_base = 0;
-char *g_malloc_base = 0;
+char *g_brk = 0;
 
 
-//void *
-int *
-malloc (int size)
+void *
+malloc (size_t size)
 {
 {
-  //void *p = brk (0);
-  char *p = 0;
-  p = brk (0);
-  if (!g_malloc_base) g_malloc_base = p;
-  brk (p+size);
+  if (!g_brk) g_brk = brk (0);
+  char *p = g_brk;
+  if (size < 0 || brk (g_brk + size) == -1)
+      return 0;
+  g_brk += size;
   return p;
 }
 
   return p;
 }
 
-//void *
-int *
-//realloc (void *p, int size)
-realloc (int *p, int size)
+void *
+realloc (void *p, int size)
 {
 {
-  brk (g_malloc_base + size);
-  return g_malloc_base;
+  brk (g_brk + size);
+  return p;
 }
 
 int
 }
 
 int
@@ -334,7 +333,6 @@ strncmp (char const* a, char const* b, int length)
   return *a - *b;
 }
 
   return *a - *b;
 }
 
-char **g_environment;
 char *
 getenv (char const* s)
 {
 char *
 getenv (char const* s)
 {
@@ -348,8 +346,6 @@ getenv (char const* s)
   return 0;
 }
 
   return 0;
 }
 
-#include <stdarg.h>
-
 int
 vprintf (char const* format, va_list ap)
 {
 int
 vprintf (char const* format, va_list ap)
 {