⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmemory.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
字号:
/*							       	     HTMemory.c**	DYNAMIC MEMORY MANAGER****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTMemory.c,v 2.10 1999/02/22 22:10:11 frystyk Exp $**** History:**	 8 Feb 95	Written by Eric and Henrik*//* Library include files */#include "wwwsys.h"#include "HTUtils.h"#include "HTList.h"#include "HTMemory.h"					 /* Implemented here */PRIVATE HTList * HTMemCall = NULL;		    /* List of memory freers */PRIVATE HTMemory_exitCallback * PExit = NULL;	  /* panic and exit function */PRIVATE size_t LastAllocSize = 0;		  /* size of last allocation */ /* ------------------------------------------------------------------------- *//*	HTMemoryCall_add**	----------------**	Register a call back function that is to be called if we need more**	memory. Several call back functions can be registered in which case**	all of them are called in the order of which they were registered.*/PUBLIC BOOL HTMemoryCall_add (HTMemoryCallback * cbf){    HTTRACE(MEM_TRACE, "Mem Add..... Callback %p\n" _ (void *) cbf);    if (!HTMemCall) HTMemCall = HTList_new();    return cbf ? HTList_addObject(HTMemCall, (void *) cbf) : NO;}/*	HTMemoryCall_delete**	-------------------**	Unregister a call back function from a list*/PUBLIC BOOL HTMemoryCall_delete (HTMemoryCallback * cbf){    HTTRACE(MEM_TRACE, "Mem Delete.. Callback %p\n" _ (void *) cbf);    return (HTMemCall && cbf) ? HTList_removeObject(HTMemCall,(void*)cbf) : NO;}/*	HTMemoryCall_deleteAll**	----------------------**	Unregisters all call back functions*/PUBLIC BOOL HTMemoryCall_deleteAll (void){    HTTRACE(MEM_TRACE, "Mem Delete.. All Callback functions\n");    if (HTMemCall) {	HTList_delete(HTMemCall);	HTMemCall = NULL;	return YES;    }    return NO;}/***	Allocates memory using malloc*/PUBLIC void * HTMemory_malloc (size_t size){    void * ptr;    ptr = malloc(LastAllocSize = size);    if (ptr != NULL) return ptr;    if (HTMemCall) {	HTMemoryCallback * pres;	while ((pres = (HTMemoryCallback *) HTList_nextObject(HTMemCall))) {	    HTTRACE(MEM_TRACE, "Mem Calling. %p (size %d)\n" _ (void*)pres _ size);	    (*pres)(size);	    if ((ptr = malloc(size)) != NULL) return ptr;	}    }    HTTRACE(MEM_TRACE, "Memory.... Couldn't allocate %d bytes\n" _ size);    return NULL;}/***	Allocates memory using calloc*/PUBLIC void * HTMemory_calloc (size_t nobj, size_t size){    void * ptr;    ptr = calloc(nobj, LastAllocSize = size);    if (ptr != NULL) return ptr;    if (HTMemCall) {	HTMemoryCallback * pres;	size_t total = size * nobj;	while ((pres = (HTMemoryCallback *) HTList_nextObject(HTMemCall))) {	    HTTRACE(MEM_TRACE, "Mem Calling. %p (size %d)\n" _ 				   (void *) pres _ total);	    (*pres)(total);	    if ((ptr = calloc(nobj, size)) != NULL) return ptr;	}    }    HTTRACE(MEM_TRACE, "Memory...... Couldn't allocate %d objects of size %d\n" _ 		 nobj _ size);    return NULL;}/***	Reallocates memory using realloc*/PUBLIC void * HTMemory_realloc (void * p, size_t size){    void * ptr;    ptr = realloc(p, LastAllocSize = size);    if (ptr != NULL) return ptr;    if (HTMemCall) {	HTMemoryCallback * pres;	while ((pres = (HTMemoryCallback *) HTList_nextObject(HTMemCall))) {	    HTTRACE(MEM_TRACE, "Mem Calling. %p (size %d)\n" _ (void*)pres _ size);	    (*pres)(size);	    if ((ptr = realloc(p, size)) != NULL) return ptr;	}    }    HTTRACE(MEM_TRACE, "Memory...... Couldn't reallocate %d bytes\n" _ size);    return NULL;}/***	Frees memory*/PUBLIC void HTMemory_free (void * ptr){    if (ptr) {	HTTRACE(MEM_TRACE, "Memory Free. %p\n" _ ptr);	free(ptr);    }}/*	HTMemory_setExit**	----------------**	Register the memory exit function. This function notifies the user that**	it is all over. If this function returns or is undefined, **	HTMemory_outofmem calls abort.*/PUBLIC void HTMemory_setExit (HTMemory_exitCallback * pExit){    PExit = pExit;}/*	HTMemory_exit**	-------------**	Get the current exit function.*/PUBLIC HTMemory_exitCallback * HTMemory_exit (void){    return PExit;}/*	HTMemory_outofmem**	-----------------**	Call app defined exit function. If that returns, exit anyway.*/PUBLIC void HTMemory_outofmem (char * name, char * file, unsigned long line){    if (PExit)	(*PExit)(name, file, line);    HTTRACE(ALL_TRACE, "%s:%ld failed allocation for \"%s\" (%ld bytes).\nProgram aborted.\n" _	    file _ line _ name _ LastAllocSize);    abort();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -