medit/moo/medit-app/mem-debug.h

98 lines
1.8 KiB
C

/*
* mem-debug.h
*
* Copyright (C) 2004-2010 by Yevgen Muntyan <emuntyan@users.sourceforge.net>
*
* This file is part of medit. medit is free software; you can
* redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public
* License along with medit. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MOO_MEM_DEBUG_H
#define MOO_MEM_DEBUG_H
#undef DEBUG_MEMORY
#ifndef DEBUG_MEMORY
static void
init_mem_stuff (void)
{
}
#else
#define ALIGN 8
#include <libxml/xmlmemory.h>
static gpointer
my_malloc (gsize n_bytes)
{
char *mem = malloc (n_bytes + ALIGN);
return mem ? mem + ALIGN : NULL;
}
static gpointer
my_realloc (gpointer mem,
gsize n_bytes)
{
if (mem)
{
char *new_mem = realloc ((char*) mem - ALIGN, n_bytes + ALIGN);
return new_mem ? new_mem + ALIGN : NULL;
}
else
{
return my_malloc (n_bytes);
}
}
static char *
my_strdup (const char *s)
{
if (s)
{
char *new_s = my_malloc (strlen (s) + 1);
if (new_s)
strcpy (new_s, s);
return new_s;
}
else
{
return NULL;
}
}
static void
my_free (gpointer mem)
{
if (mem)
free ((char*) mem - ALIGN);
}
static void
init_mem_stuff (void)
{
GMemVTable mem_table = {
my_malloc,
my_realloc,
my_free,
NULL, NULL, NULL
};
if (1)
{
g_mem_set_vtable (&mem_table);
g_slice_set_config (G_SLICE_CONFIG_ALWAYS_MALLOC, TRUE);
}
else
{
xmlMemSetup (my_free, my_malloc, my_realloc, my_strdup);
}
}
#endif
#endif /* MOO_MEM_DEBUG_H */