diff options
Diffstat (limited to 'mdk-stage1/slang/slmalloc.c')
-rw-r--r-- | mdk-stage1/slang/slmalloc.c | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/mdk-stage1/slang/slmalloc.c b/mdk-stage1/slang/slmalloc.c deleted file mode 100644 index be4ed6cae..000000000 --- a/mdk-stage1/slang/slmalloc.c +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (c) 1992, 1999, 2001 John E. Davis - * This file is part of the S-Lang library. - * - * You may distribute under the terms of either the GNU General Public - * License or the Perl Artistic License. - */ -#include "slinclud.h" - -#ifdef SL_MALLOC_DEBUG -# undef SL_MALLOC_DEBUG -#endif - -#include "slang.h" -#include "_slang.h" - -#ifdef __alpha -# define Chunk 8 -#else -# define Chunk 4 -#endif - -static long Total_Allocated; -static long Max_Single_Allocation; -static long Max_Allocated; -/* #define SLDEBUG_DOUT */ - -#ifdef SLDEBUG_DOUT -static FILE *dout; -#endif - -void SLmalloc_dump_statistics (void) -{ -#ifdef SLDEBUG_DOUT - fflush (dout); -#endif - fprintf (stderr, "Total Allocated: %ld\nHighest single allocation: %ld\nHighest Total Allocated:%ld\n", - Total_Allocated, Max_Single_Allocation, Max_Allocated); -} - -static void register_at_exit_fun (void) -{ - static int is_registered = 0; - if (is_registered) - return; - is_registered = 1; - -#ifdef SLDEBUG_DOUT - if (dout == NULL) dout = fopen ("malloc.out", "w"); -#endif - SLang_add_cleanup_function (SLmalloc_dump_statistics); -} - -static void fixup (unsigned char *p, unsigned long n, char *what) -{ - register_at_exit_fun (); - - p += Chunk; - *(p - 4)= (unsigned char) ((n >> 24) & 0xFF); - *(p - 3) = (unsigned char) ((n >> 16) & 0xFF); - *(p - 2) = (unsigned char) ((n >> 8) & 0xFF); - *(p - 1) = (unsigned char) (n & 0xFF); - *(p + (int) n) = 27; - *(p + (int) (n + 1)) = 182; - *(p + (int) (n + 2)) = 81; - *(p + (int) (n + 3)) = 86; - Total_Allocated += (long) n; - if (Total_Allocated > Max_Allocated) Max_Allocated = Total_Allocated; - if ((long) n > Max_Single_Allocation) - Max_Single_Allocation = (long) n; - -#ifdef SLDEBUG_DOUT - fprintf (dout, "ALLOC: %s\t%p %ld\n", what, p, (long) n); -#else - (void) what; -#endif -} - -static void SLmalloc_doerror (char *buf) -{ - SLang_doerror (buf); -} - -static int check_memory (unsigned char *p, char *what) -{ - char buf[128]; - unsigned long n; - - register_at_exit_fun (); - - n = ((unsigned long) *(p - 4)) << 24; - n |= ((unsigned long) *(p - 3)) << 16; - n |= ((unsigned long) *(p - 2)) << 8; - n |= (unsigned long) *(p - 1); - - if (n == 0xFFFFFFFFUL) - { - sprintf (buf, "%s: %p: Already FREE! Abort NOW.", what, (void*)p - Chunk); - SLmalloc_doerror (buf); - return -1; - } - - if ((*(p + (int) n) != 27) - || (*(p + (int) (n + 1)) != 182) - || (*(p + (int) (n + 2)) != 81) - || (*(p + (int) (n + 3)) != 86)) - { - sprintf (buf, "\007%s: %p: Memory corrupt! Abort NOW.", what, (void*)p); - SLmalloc_doerror (buf); - return -1; - } - - *(p - 4) = *(p - 3) = *(p - 2) = *(p - 1) = 0xFF; - - Total_Allocated -= (long) n; - if (Total_Allocated < 0) - { - sprintf (buf, "\007%s: %p\nFreed %ld, Allocated is: %ld!\n", - what, (void*)p, (long) n, Total_Allocated); - SLang_doerror (buf); - } -#ifdef SLDEBUG_DOUT - fprintf (dout, "FREE: %s:\t%p %ld\n", what, p, (long) n); -#endif - return 0; -} - -void SLdebug_free (char *p) -{ - if (p == NULL) return; - if (-1 == check_memory ((unsigned char *) p, "FREE")) return; - - SLFREE (p - Chunk); -} - -char *SLdebug_malloc (unsigned long n) -{ - char *p; - - if ((p = (char *) SLMALLOC (n + 2 * Chunk)) == NULL) return NULL; - - fixup ((unsigned char *) p, n, "MALLOC"); - return p + Chunk; -} - -char *SLdebug_realloc (char *p, unsigned long n) -{ - if (-1 == check_memory ((unsigned char *) p, "REALLOC")) return NULL; - if ((p = (char *) SLREALLOC (p - Chunk, n + 2 * Chunk)) == NULL) return NULL; - fixup ((unsigned char *) p, n, "REALLOC"); - return p + Chunk; -} - -char *SLdebug_calloc (unsigned long n, unsigned long size) -{ - char *p; - int m; - - /* This is tough -- hope this is a good assumption!! */ - if (size >= Chunk) m = 1; else m = Chunk; - - if ((p = (char *) SLCALLOC (n + m + m, size)) == NULL) return NULL; - fixup ((unsigned char *) p, size * n, "CALLOC"); - return p + Chunk; -} - |