diff options
Diffstat (limited to 'gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h')
-rw-r--r-- | gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h new file mode 100644 index 00000000000..b181cb7fb0c --- /dev/null +++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h @@ -0,0 +1,183 @@ +#ifndef __LYLEAKS_H +/* + * Avoid include redundancy + * Include only if finding memory leaks. + */ +#define __LYLEAKS_H + +/* +** Copyright (c) 1994, University of Kansas, All Rights Reserved +** +** Include File: LYLeaks.h +** Purpose: Header to convert requests for allocation to Lynx +** custom functions to track memory leaks. +** Remarks/Portability/Dependencies/Restrictions: +** For the stdlib.h allocation functions to be overriden by the +** Lynx memory tracking functions all modules allocating, +** freeing, or resizing memory must have LY_FIND_LEAKS +** defined before including this file. +** This header file should be included in every source file which +** does any memory manipulation through use of the +** stdlib.h memory functions. +** For proper reporting of memory leaks, the function LYLeaks +** should be registered for execution by atexit as the +** very first executable statement in main. +** This code is slow and should not be used except in debugging +** circumstances (don't define LY_FIND_LEAKS). +** If you are using LY_FIND_LEAKS and don't want the LYLeak* +** memory functions to be used in a certain file, +** define NO_MEMORY_TRACKING before including this file. +** The only safe way to call the LYLeak* functions is to use +** the below macros because they depend on the static +** string created by __FILE__ to not be dynamic in +** nature (don't free it and assume will exist at all +** times during execution). +** Revision History: +** 05-26-94 created for Lynx 2-3-1, Garrett Arch Blythe +** 10-30-97 modified to handle StrAllocCopy() and +** StrAllocCat(). - KW & FM +*/ + +/* +** Required includes +*/ +#include <stdlib.h> +#include "HTUtils.h" + +/* +** Constant defines +*/ +#define MAX_CONTENT_LENGTH 50 +#ifdef VMS +#define LEAKAGE_SINK "sys$login:Lynx.leaks" +#else +#define LEAKAGE_SINK "Lynx.leaks" +#endif /* VMS */ + +/* +** Data structures +*/ +typedef struct SourceLocation_tag { + /* + * The file name and line number of where an event took place. + */ + CONST char *cp_FileName; + short ssi_LineNumber; +} +SourceLocation; + +typedef struct AllocationList_tag { + /* + * A singly linked list. + */ + struct AllocationList_tag *ALp_Next; + + /* + * The memory pointer allocated. + * If set to NULL, then an invalid request was made. + * The invalid pointer also. + */ + void *vp_Alloced; + void *vp_BadRequest; + + /* + * The size in bytes of the allocated memory. + */ + size_t st_Bytes; + + /* + * The source location of specific event (calloc, malloc, free). + * realloc kept separate since will track last realloc on pointer. + */ + SourceLocation SL_memory; + SourceLocation SL_realloc; +} AllocationList; + +/* +** Global variable declarations +*/ + +/* +** Macros +*/ +#if defined(LY_FIND_LEAKS) && !defined(NO_MEMORY_TRACKING) +/* +** Only use these macros if we are to track memory allocations. +** The reason for using a macro instead of a define is that we want +** to track where the initial allocation took place or where +** the last reallocation took place. +** Track where the allocation took place by the __FILE__ and __LINE__ +** defines which are automatic to the compiler. +*/ +#ifdef malloc +#undef malloc +#endif /* malloc */ +#define malloc(st_bytes) LYLeakMalloc(st_bytes, __FILE__, __LINE__) + +#ifdef calloc +#undef calloc +#endif /* calloc */ +#define calloc(st_number, st_bytes) LYLeakCalloc(st_number, st_bytes, \ + __FILE__, __LINE__) + +#ifdef realloc +#undef realloc +#endif /* realloc */ +#define realloc(vp_alloced, st_newbytes) LYLeakRealloc(vp_alloced, \ + st_newbytes, __FILE__, __LINE__) + +#ifdef free +#undef free +#endif /* free */ +#define free(vp_alloced) LYLeakFree(vp_alloced, __FILE__, __LINE__) + +/* +** Added the following two defines to track Lynx's frequent use +** of those macros. - KW 1997-10-12 +*/ +#ifdef StrAllocCopy +#undef StrAllocCopy +#endif /* StrAllocCopy */ +#define StrAllocCopy(dest, src) LYLeakSACopy(&(dest), src, __FILE__, __LINE__) +#ifdef StrAllocCat +#undef StrAllocCat +#endif /* StrAllocCat */ +#define StrAllocCat(dest, src) LYLeakSACat(&(dest), src, __FILE__, __LINE__) + +#endif /* LY_FIND_LEAKS && !NO_MEMORY_TRACKING */ + +/* +** Function declarations +** See the appropriate source file for usage. +*/ +extern void LYLeaks NOPARAMS; +extern void *LYLeakMalloc PARAMS(( + size_t st_bytes, + CONST char * cp_File, + CONST short ssi_Line)); +extern void *LYLeakCalloc PARAMS(( + size_t st_number, + size_t st_bytes, + CONST char * cp_File, + CONST short ssi_Line)); +extern void *LYLeakRealloc PARAMS(( + void * vp_alloced, + size_t st_newbytes, + CONST char * cp_File, + CONST short ssi_Line)); +extern void LYLeakFree PARAMS(( + void * vp_alloced, + CONST char * cp_File, + CONST short ssi_Line)); +extern char * LYLeakSACopy PARAMS(( + char ** dest, + CONST char * src, + CONST char * cp_File, + CONST short ssi_Line)); +extern char * LYLeakSACat PARAMS(( + char ** dest, + CONST char * src, + CONST char * cp_File, + CONST short ssi_Line)); + +#endif /* __LYLEAKS_H */ |