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

📄 alloc.c

📁 lzo-1.08-src.zip 高效的压缩解压代码
💻 C
字号:
/* alloc.c -- memory allocation   This file is part of the LZO real-time data compression library.   Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer   All Rights Reserved.   The LZO library is free software; you can redistribute it and/or   modify it under the terms of the GNU General Public License as   published by the Free Software Foundation; either version 2 of   the License, or (at your option) any later version.   The LZO library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with the LZO library; see the file COPYING.   If not, write to the Free Software Foundation, Inc.,   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   Markus F.X.J. Oberhumer   <markus@oberhumer.com> */#include "lzo_conf.h"#include <lzoutil.h>#if defined(HAVE_MALLOC_H)#  include <malloc.h>#endif#if defined(__palmos__)#  include <System/MemoryMgr.h>#endif#undef lzo_alloc_hook#undef lzo_free_hook#undef lzo_alloc#undef lzo_malloc#undef lzo_free/***********************************************************************// implementation************************************************************************/LZO_PRIVATE(lzo_voidp)lzo_alloc_internal(lzo_uint nelems, lzo_uint size){	lzo_voidp p = NULL;	unsigned long s = (unsigned long) nelems * size;	if (nelems <= 0 || size <= 0 || s < nelems || s < size)		return NULL;#if defined(__palmos__)	p = (lzo_voidp) MemPtrNew(s);#elif (LZO_UINT_MAX <= SIZE_T_MAX)	if (s < SIZE_T_MAX)		p = (lzo_voidp) malloc((size_t)s);#elif defined(HAVE_HALLOC) && defined(__DMC__)	if (size < SIZE_T_MAX)		p = (lzo_voidp) _halloc(nelems,(size_t)size);#elif defined(HAVE_HALLOC)	if (size < SIZE_T_MAX)		p = (lzo_voidp) halloc(nelems,(size_t)size);#else	if (s < SIZE_T_MAX)		p = (lzo_voidp) malloc((size_t)s);#endif	return p;}LZO_PRIVATE(void)lzo_free_internal(lzo_voidp p){	if (!p)		return;#if defined(__palmos__)	MemPtrFree(p);#elif (LZO_UINT_MAX <= SIZE_T_MAX)	free(p);#elif defined(HAVE_HALLOC) && defined(__DMC__)	_hfree(p);#elif defined(HAVE_HALLOC)	hfree(p);#else	free(p);#endif}/***********************************************************************// public interface using the global hooks************************************************************************//* global allocator hooks */LZO_PUBLIC_VAR(lzo_alloc_hook_t) lzo_alloc_hook = lzo_alloc_internal;LZO_PUBLIC_VAR(lzo_free_hook_t) lzo_free_hook = lzo_free_internal;LZO_PUBLIC(lzo_voidp)lzo_alloc(lzo_uint nelems, lzo_uint size){	if (!lzo_alloc_hook)		return NULL;	return lzo_alloc_hook(nelems,size);}LZO_PUBLIC(lzo_voidp)lzo_malloc(lzo_uint size){	if (!lzo_alloc_hook)		return NULL;#if defined(__palmos__)	return lzo_alloc_hook(size,1);#elif (LZO_UINT_MAX <= SIZE_T_MAX)	return lzo_alloc_hook(size,1);#elif defined(HAVE_HALLOC)	/* use segment granularity by default */    if (size + 15 > size)   /* avoid overflow */		return lzo_alloc_hook((size+15)/16,16);	return lzo_alloc_hook(size,1);#else	return lzo_alloc_hook(size,1);#endif}LZO_PUBLIC(void)lzo_free(lzo_voidp p){	if (!lzo_free_hook)		return;	lzo_free_hook(p);}/*vi:ts=4:et*/

⌨️ 快捷键说明

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