--- deliantra/server/common/utils.C 2007/11/08 19:43:24 1.68 +++ deliantra/server/common/utils.C 2008/01/22 15:53:01 1.69 @@ -496,6 +496,46 @@ return ptr; } +/******************************************************************************/ + +#ifdef DEBUG_SALLOC + +#define MAGIC 0xa1b2c35543deadL + +void *g_slice_alloc (unsigned long size) +{ + unsigned long *p = (unsigned long *) (g_slice_alloc)(size + sizeof (unsigned long)); + *p++ = size ^ MAGIC; + //fprintf (stderr, "g_slice_alloc %ld %p\n", size, p);//D + return (void *)p; +} + +void *g_slice_alloc0 (unsigned long size) +{ + return memset (g_slice_alloc (size), 0, size); +} + +void g_slice_free1 (unsigned long size, void *ptr) +{ + if (expect_true (ptr)) + { + //fprintf (stderr, "g_slice_free %ld %p\n", size, ptr);//D + unsigned long *p = (unsigned long *)ptr; + unsigned long s = *--p ^ MAGIC; + + if ((*p ^ MAGIC) != size) + LOG (logBacktrace | llevError, "slice free size (%lx) doesn't match alloc size (%lx)\n", size, s); + + *p = MAGIC; + + (g_slice_free1)(s + sizeof (unsigned long), p); + } +} + +#endif + +/******************************************************************************/ + void assign (char *dst, const char *src, int maxlen) { if (!src)