dmalloc_support.cc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (C) 1997 by the University of Southern California
  3.  * $Id: dmalloc_support.cc,v 1.8 2005/08/25 18:58:06 johnh Exp $
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License,
  7.  * version 2, as published by the Free Software Foundation.
  8.  *
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License along
  15.  * with this program; if not, write to the Free Software Foundation, Inc.,
  16.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  17.  *
  18.  *
  19.  * The copyright of this module includes the following
  20.  * linking-with-specific-other-licenses addition:
  21.  *
  22.  * In addition, as a special exception, the copyright holders of
  23.  * this module give you permission to combine (via static or
  24.  * dynamic linking) this module with free software programs or
  25.  * libraries that are released under the GNU LGPL and with code
  26.  * included in the standard release of ns-2 under the Apache 2.0
  27.  * license or under otherwise-compatible licenses with advertising
  28.  * requirements (or modified versions of such code, with unchanged
  29.  * license).  You may copy and distribute such a system following the
  30.  * terms of the GNU GPL for this module and the licenses of the
  31.  * other code concerned, provided that you include the source code of
  32.  * that other code when and as the GNU GPL requires distribution of
  33.  * source code.
  34.  *
  35.  * Note that people who make modified versions of this module
  36.  * are not obligated to grant this special exception for their
  37.  * modified versions; it is their choice whether to do so.  The GNU
  38.  * General Public License gives permission to release a modified
  39.  * version without this exception; this exception also makes it
  40.  * possible to release a modified version which carries forward this
  41.  * exception.
  42.  *
  43.  */
  44. /*
  45.  * Redefine new and friends to use dmalloc.
  46.  */
  47. #ifdef HAVE_LIBDMALLOC
  48. /*
  49.  * XXX dmalloc 3.x is no longer supported
  50.  *
  51.  * - haoboy, Aug 2000
  52.  */
  53. /* 
  54.  * This portion copied from ~dmalloc/dmalloc.cc 
  55.  * Copyright 1999 by Gray Watson
  56.  */
  57. extern "C" {
  58. #include <stdio.h>
  59. #include <stdlib.h>
  60. /* Prototype declaration for TclpAlloc originally
  61. defined in tcl8.3.2/generic/tclAlloc.c */ 
  62. char *TclpAlloc(unsigned int);
  63. char *Tcl_Alloc(unsigned int);
  64. #define DMALLOC_DISABLE
  65. #include "dmalloc.h"
  66. #include "return.h"
  67. }
  68. #ifndef DMALLOC_VERSION_MAJOR
  69. #error DMALLOC 3.x is no longer supported.
  70. #endif
  71. /*
  72.  * An overload function for the C++ new.
  73.  */
  74. void *
  75. operator new[](size_t size)
  76. {
  77. char *file;
  78. GET_RET_ADDR(file);
  79. return _malloc_leap(file, 0, size);
  80. }
  81. /*
  82.  * An overload function for the C++ delete.
  83.  */
  84. void
  85. operator delete(void *pnt)
  86. {
  87. char *file;
  88. GET_RET_ADDR(file);
  89. _free_leap(file, 0, pnt);
  90. }
  91. /*
  92.  * An overload function for the C++ delete[].  Thanks to Jens Krinke
  93.  * <j.krinke@gmx.de>
  94.  */
  95. void
  96. operator delete[](void *pnt)
  97. {
  98. char *file;
  99. GET_RET_ADDR(file);
  100. _free_leap(file, 0, pnt);
  101. }
  102. char *
  103. TclpAlloc(unsigned int nbytes)
  104. {
  105.   char *file;
  106.  
  107.   GET_RET_ADDR(file);
  108.   return (char*) _malloc_leap(file,0,nbytes);
  109. }
  110. char *
  111. Tcl_Alloc (unsigned int size)
  112.   /*    unsigned int size; */
  113.   {
  114.       char *result;
  115.       char *file;
  116.       /* 
  117.        * Replacing the call to TclpAlloc with malloc directly to help 
  118.        * memory debugging 
  119.        *    result = TclpAlloc(size);
  120.        */
  121.       GET_RET_ADDR(file);
  122.       result = (char *)_malloc_leap(file,0,size);
  123.      /*
  124.       * Most systems will not alloc(0), instead bumping it to one so
  125.       * that NULL isn't returned.  Some systems (AIX, Tru64) will alloc(0)
  126.       * by returning NULL, so we have to check that the NULL we get is
  127.       * not in response to alloc(0).
  128.       *
  129.       * The ANSI spec actually says that systems either return NULL *or*
  130.       * a special pointer on failure, but we only check for NULL
  131.       */
  132.       if ((result == NULL) && size) {
  133. printf("unable to alloc %d bytes", size);
  134.       }
  135.       return result;
  136. }
  137. #endif /* HAVE_LIBDMALLOC */