summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
Diffstat (limited to 'generic')
-rw-r--r--generic/tcl.h16
-rw-r--r--generic/tclAlloc.c16
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
+