diff options
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tcl.h | 16 | ||||
-rw-r--r-- | generic/tclAlloc.c | 16 |
2 files changed, 30 insertions, 2 deletions
diff --git a/generic/tcl.h b/generic/tcl.h index a12be09..404c89e 100644 --- a/generic/tcl.h +++ b/generic/tcl.h @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tcl.h,v 1.31 1999/01/05 01:18:34 rjohnson Exp $ + * RCS: @(#) $Id: tcl.h,v 1.32 1999/01/06 21:08:50 stanton Exp $ */ #ifndef _TCL @@ -71,6 +71,12 @@ # ifndef USE_PROTOTYPE # define USE_PROTOTYPE 1 # endif + +/* + * Under Windows we need to call Tcl_Alloc in all cases to avoid competing + * C run-time library issues. + */ + # ifndef USE_TCLALLOC # define USE_TCLALLOC 1 # endif @@ -743,6 +749,14 @@ EXTERN void Tcl_ValidateAllMemory _ANSI_ARGS_((char *file, #else +/* + * If USE_TCLALLOC is true, then we need to call Tcl_Alloc instead of + * the native malloc/free. The only time USE_TCLALLOC should not be + * true is when compiling the Tcl/Tk libraries on Unix systems. In this + * case we can safely call the native malloc/free directly as a performance + * optimization. + */ + # if USE_TCLALLOC # define ckalloc(x) Tcl_Alloc(x) # define ckfree(x) Tcl_Free(x) diff --git a/generic/tclAlloc.c b/generic/tclAlloc.c index 7a693ac..6111a7c 100644 --- a/generic/tclAlloc.c +++ b/generic/tclAlloc.c @@ -14,7 +14,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclAlloc.c,v 1.2 1998/09/14 18:39:57 stanton Exp $ + * RCS: @(#) $Id: tclAlloc.c,v 1.3 1999/01/06 21:08:51 stanton Exp $ */ #include "tclInt.h" @@ -125,6 +125,9 @@ char * TclpAlloc( unsigned int nbytes) /* Number of bytes to allocate. */ { +#ifdef USE_NATIVEMALLOC + return (char*) malloc(nbytes); +#else register union overhead *op; register long bucket; register unsigned amt; @@ -203,6 +206,7 @@ TclpAlloc( *(unsigned short *)((caddr_t)(op + 1) + op->ov_size) = RMAGIC; #endif return ((char *)(op + 1)); +#endif /* USE_NATIVEMALLOC */ } /* @@ -279,6 +283,10 @@ void TclpFree( char *cp) /* Pointer to memory to free. */ { +#ifdef USE_NATIVEMALLOC + free(cp); + return; +#else register long size; register union overhead *op; @@ -310,6 +318,7 @@ TclpFree( #ifdef MSTATS nmalloc[size]--; #endif +#endif /* USE_NATIVEMALLOC */ } /* @@ -333,6 +342,9 @@ TclpRealloc( char *cp, /* Pointer to alloced block. */ unsigned int nbytes) /* New size of memory. */ { +#ifdef USE_NATIVEMALLOC + return (char*) realloc(cp, nbytes); +#else int i; union overhead *op; int expensive; @@ -407,6 +419,7 @@ TclpRealloc( *(unsigned short *)((caddr_t)(op + 1) + op->ov_size) = RMAGIC; #endif return(cp); +#endif /* USE_NATIVEMALLOC */ } /* @@ -454,3 +467,4 @@ mstats( MAXMALLOC, nmalloc[NBUCKETS]); } #endif + |