diff dmd2/root/rmem.c @ 1452:638d16625da2

LDC 2 compiles again.
author Robert Clipsham <robert@octarineparrot.com>
date Sat, 30 May 2009 17:23:32 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dmd2/root/rmem.c	Sat May 30 17:23:32 2009 +0100
@@ -0,0 +1,143 @@
+
+/* Copyright (c) 2000 Digital Mars	*/
+/* All Rights Reserved 			*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if linux || __APPLE__ || __FreeBSD__ || __sun&&__SVR4
+#include "../root/rmem.h"
+#else
+#include "rmem.h"
+#endif
+
+/* This implementation of the storage allocator uses the standard C allocation package.
+ */
+
+Mem mem;
+
+void Mem::init()
+{
+}
+
+char *Mem::strdup(const char *s)
+{
+    char *p;
+
+    if (s)
+    {
+	p = ::strdup(s);
+	if (p)
+	    return p;
+	error();
+    }
+    return NULL;
+}
+
+void *Mem::malloc(size_t size)
+{   void *p;
+
+    if (!size)
+	p = NULL;
+    else
+    {
+	p = ::malloc(size);
+	if (!p)
+	    error();
+    }
+    return p;
+}
+
+void *Mem::calloc(size_t size, size_t n)
+{   void *p;
+
+    if (!size || !n)
+	p = NULL;
+    else
+    {
+	p = ::calloc(size, n);
+	if (!p)
+	    error();
+    }
+    return p;
+}
+
+void *Mem::realloc(void *p, size_t size)
+{
+    if (!size)
+    {	if (p)
+	{   ::free(p);
+	    p = NULL;
+	}
+    }
+    else if (!p)
+    {
+	p = ::malloc(size);
+	if (!p)
+	    error();
+    }
+    else
+    {
+	p = ::realloc(p, size);
+	if (!p)
+	    error();
+    }
+    return p;
+}
+
+void Mem::free(void *p)
+{
+    if (p)
+	::free(p);
+}
+
+void *Mem::mallocdup(void *o, size_t size)
+{   void *p;
+
+    if (!size)
+	p = NULL;
+    else
+    {
+	p = ::malloc(size);
+	if (!p)
+	    error();
+	else
+	    memcpy(p,o,size);
+    }
+    return p;
+}
+
+void Mem::error()
+{
+    printf("Error: out of memory\n");
+    exit(EXIT_FAILURE);
+}
+
+void Mem::fullcollect()
+{
+}
+
+void Mem::mark(void *pointer)
+{
+    (void) pointer;		// necessary for VC /W4
+}
+
+/* =================================================== */
+
+void * operator new(size_t m_size)
+{   
+    void *p = malloc(m_size);
+    if (p)
+	return p;
+    printf("Error: out of memory\n");
+    exit(EXIT_FAILURE);
+    return p;
+}
+
+void operator delete(void *p)
+{
+    free(p);
+}
+
+