parent
4f27de131e
commit
b1aae9194c
1 changed files with 0 additions and 142 deletions
@ -1,142 +0,0 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* memdebug.c */ |
||||
/* */ |
||||
/* Memory debugging functions (body only). */ |
||||
/* */ |
||||
/* Copyright 1996-2000 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
|
||||
|
||||
typedef struct TBlockRec_ |
||||
{ |
||||
char* base; |
||||
long size; |
||||
|
||||
} TBlockRec; |
||||
|
||||
|
||||
static TBlockRec* mem_blocks; |
||||
static int num_mem_blocks; |
||||
static int max_mem_blocks; |
||||
|
||||
|
||||
void DM_Init_Mem() |
||||
{ |
||||
num_mem_blocks = 0; |
||||
max_mem_blocks = 4096; |
||||
mem_blocks = (TBlockRec*)malloc( max_mem_blocks * |
||||
sizeof ( *mem_blocks ) ); |
||||
} |
||||
|
||||
|
||||
void DM_Done_Mem() |
||||
{ |
||||
/* Now print the remaining blocks */ |
||||
if ( num_mem_blocks == 0 ) |
||||
fprintf( stderr, "No memory leaked!\n" ); |
||||
else |
||||
{ |
||||
int i; |
||||
|
||||
|
||||
fprintf( stderr, "There were %d leaked memory blocks\n\n", |
||||
num_mem_blocks ); |
||||
|
||||
fprintf( stderr, "base size\n" ); |
||||
fprintf( stderr, "------------------\n" ); |
||||
|
||||
for ( i = 0; i < num_mem_blocks; i++ ) |
||||
{ |
||||
fprintf( stderr, "%08lx %04lx\n",
|
||||
(long)mem_blocks[i].base, mem_blocks[i].size ); |
||||
} |
||||
} |
||||
|
||||
free( mem_blocks ); |
||||
} |
||||
|
||||
|
||||
void DM_Record( char* base, |
||||
long size ) |
||||
{ |
||||
TBlockRec* block; |
||||
|
||||
|
||||
#if 0 |
||||
/* First, check that the block is not located within one of the */ |
||||
/* recorded blocks */ |
||||
for ( i = 0; i < num_mem_blocks; i++ ) |
||||
{ |
||||
char *start, *end, *_limit, *_base; |
||||
|
||||
|
||||
_base = mem_blocks[i].base; |
||||
_limit = _base + mem_blocks[i].size; |
||||
|
||||
start = base; |
||||
end = base + size - 1; |
||||
|
||||
if ( ( start >= base && start < limit ) || |
||||
( end >= base && end < limit ) ) |
||||
{ |
||||
fprintf( stderr, "Warning: Recording an invalid block!\n" ); |
||||
} |
||||
} |
||||
#endif |
||||
|
||||
/* Add block to list */ |
||||
if ( num_mem_blocks >= max_mem_blocks ) |
||||
{ |
||||
max_mem_blocks *= 2; |
||||
mem_blocks = realloc( mem_blocks, |
||||
max_mem_blocks * sizeof ( *mem_blocks ) ); |
||||
} |
||||
block = mem_blocks + num_mem_blocks; |
||||
block->base = base; |
||||
block->size = size; |
||||
num_mem_blocks++; |
||||
} |
||||
|
||||
|
||||
void DM_Forget( char* base ) |
||||
{ |
||||
TBlockRec* block = mem_blocks; |
||||
int i; |
||||
|
||||
|
||||
for ( i = 0; i < num_mem_blocks; i++, block++ ) |
||||
{ |
||||
if ( block->base == base ) |
||||
{ |
||||
/* simply move last block to the current position */ |
||||
if ( num_mem_blocks > 1 ) |
||||
*block = mem_blocks[num_mem_blocks - 1]; |
||||
|
||||
num_mem_blocks--; |
||||
return; |
||||
} |
||||
|
||||
#if 1 |
||||
if ( base >= block->base && base < block->base + block->size ) |
||||
{ |
||||
fprintf( stderr, "Invalid block forgotten!\n" ); |
||||
} |
||||
#endif |
||||
} |
||||
} |
||||
|
||||
|
||||
/* END */ |
Loading…
Reference in new issue