summaryrefslogtreecommitdiffstats
path: root/src/VBox/GuestHost/OpenGL/util/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/util/mem.c')
-rw-r--r--src/VBox/GuestHost/OpenGL/util/mem.c160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/VBox/GuestHost/OpenGL/util/mem.c b/src/VBox/GuestHost/OpenGL/util/mem.c
new file mode 100644
index 00000000..c28c4f55
--- /dev/null
+++ b/src/VBox/GuestHost/OpenGL/util/mem.c
@@ -0,0 +1,160 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "cr_mem.h"
+#include "cr_error.h"
+
+#include <stdlib.h>
+#include <memory.h>
+
+#include <iprt/types.h>
+#include <iprt/mem.h>
+
+#if DEBUG_MEM
+#include <stdio.h>
+#define THRESHOLD 100 * 1024
+
+#undef crAlloc
+#undef crCalloc
+
+/* Need these stubs because util.def says we're always exporting crAlloc
+ * and crCalloc.
+ */
+extern void *crAlloc( unsigned int bytes );
+void *crAlloc( unsigned int bytes )
+{
+ return NULL;
+}
+
+extern void *crCalloc( unsigned int bytes );
+void *crCalloc( unsigned int bytes )
+{
+ return NULL;
+}
+#endif /* DEBUG_MEM */
+
+
+
+#if DEBUG_MEM
+static void *_crAlloc( unsigned int nbytes )
+#else
+DECLEXPORT(void) *crAlloc( unsigned int nbytes )
+#endif
+{
+#ifdef VBOX
+ void *ret = RTMemAlloc( nbytes );
+#else
+ void *ret = malloc( nbytes );
+#endif
+ if (!ret) {
+ crError( "Out of memory trying to allocate %d bytes!", nbytes );
+ abort();
+ }
+ return ret;
+}
+
+void *crAllocDebug( unsigned int nbytes, const char *file, int line )
+{
+#if DEBUG_MEM
+ if (nbytes >= THRESHOLD)
+ fprintf(stderr, "crAllocDebug(%d bytes) in %s at %d\n", nbytes, file, line);
+ return _crAlloc(nbytes);
+#else
+ RT_NOREF2(file, line);
+ return crAlloc(nbytes);
+#endif
+}
+
+#if DEBUG_MEM
+static void *_crCalloc( unsigned int nbytes )
+#else
+DECLEXPORT(void) *crCalloc( unsigned int nbytes )
+#endif
+{
+#ifdef VBOX
+ void *ret = RTMemAlloc( nbytes );
+#else
+ void *ret = malloc( nbytes );
+#endif
+ if (!ret) {
+ crError( "Out of memory trying to (c)allocate %d bytes!", nbytes );
+ abort();
+ }
+ crMemset( ret, 0, nbytes );
+ return ret;
+}
+
+void *crCallocDebug( unsigned int nbytes, const char *file, int line )
+{
+#if DEBUG_MEM
+ if (nbytes >= THRESHOLD)
+ fprintf(stderr, "crCallocDebug(%d bytes) in %s at %d\n", nbytes, file, line);
+ return _crCalloc(nbytes);
+#else
+ RT_NOREF2(file, line);
+ return crCalloc(nbytes);
+#endif
+}
+
+DECLEXPORT(void) crRealloc( void **ptr, unsigned int nbytes )
+{
+ if ( *ptr == NULL )
+ {
+#if DEBUG_MEM
+ *ptr = _crAlloc( nbytes );
+#else
+ *ptr = crAlloc( nbytes );
+#endif
+ }
+ else
+ {
+#ifdef VBOX
+ *ptr = RTMemRealloc( *ptr, nbytes );
+#else
+ *ptr = realloc( *ptr, nbytes );
+#endif
+ if (*ptr == NULL)
+ crError( "Couldn't realloc %d bytes!", nbytes );
+ }
+}
+
+DECLEXPORT(void) crFree( void *ptr )
+{
+#ifdef VBOX
+ if (ptr)
+ RTMemFree(ptr);
+#else
+ if (ptr)
+ free(ptr);
+#endif
+}
+
+DECLEXPORT(void) crMemcpy( void *dst, const void *src, unsigned int bytes )
+{
+ CRASSERT(dst || 0==bytes);
+ CRASSERT(src || 0==bytes);
+ (void) memcpy( dst, src, bytes );
+}
+
+DECLEXPORT(void) crMemset( void *ptr, int value, unsigned int bytes )
+{
+ CRASSERT(ptr);
+ memset( ptr, value, bytes );
+}
+
+DECLEXPORT(void) crMemZero( void *ptr, unsigned int bytes )
+{
+ CRASSERT(ptr);
+ memset( ptr, 0, bytes );
+}
+
+DECLEXPORT(int) crMemcmp( const void *p1, const void *p2, unsigned int bytes )
+{
+ CRASSERT(p1);
+ CRASSERT(p2);
+ return memcmp( p1, p2, bytes );
+}
+