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

📄 libmem.c

📁 SyncML手册及其编程
💻 C
字号:
/*************************************************************************//* module:          Library for Memory Functions                         *//*                                                                       *//* file:            libmem.c                                             *//* target system:   ALL                                                  *//* target OS:       ALL                                                  */   /*                                                                       *//* Description:                                                          *//* Header for the implementation of common memory handling functions     *//*************************************************************************//* * Copyright Notice * Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication  * Industrial Co., Ltd., Motorola, Nokia, Openwave Systems, Inc.,  * Palm, Inc., Psion, Starfish Software, Symbian, Ltd. (2001). * All Rights Reserved. * Implementation of all or part of any Specification may require  * licenses under third party intellectual property rights,  * including without limitation, patent rights (such a third party  * may or may not be a Supporter). The Sponsors of the Specification  * are not responsible and shall not be held responsible in any  * manner for identifying or failing to identify any or all such  * third party intellectual property rights. *  * THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED  * ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM,  * LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA,  * NOKIA, PALM INC., PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML  * SPONSORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING  * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION  * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT  * SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO.,  * LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE OR ANY  * OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF  * PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF  * BUSINESS, OR FOR DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL,  * PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH  * THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED  * OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE. *  * The above notice and this paragraph must be included on all copies  * of this document that are made. *  *//************************************************************************* *  Definitions *************************************************************************/#include "syncml_tk_prefix_file.h" // %%% luz: needed for precompiled headers in eVC++#include <smldef.h>#include "libmem.h"      #ifdef __PALM_OS__#include "MemoryMgr.h"#endif#ifdef MEMORY_PROFILING  // %%% luz 2002-10-02  #include "profiling.h"#endif/************************************************************************* *  External Functions  for all TOOLKIT Versions *************************************************************************//** * FUNCTION: smlLibFree * * Deallocates the memory of object "pObject", which has been allocated * previously. * If "pObject" is a NULL pointer nothing happens. * If "pObject" is a pointer to memory which has not been allocated  * previouly, the behaviour is undefined. * The contents of the deallocated memory object is destroyed. */SML_API void smlLibFree(void *pObject){	if (! pObject) return;  #ifdef __PALM_OS__	  MemPtrFree(pObject);  #else    // %%% luz 2002-10-02    #ifdef MEMORY_PROFILING    sysync_free(pObject);    #else	  free(pObject);  	#endif  #endif}/** * FUNCTION: smlLibRealloc * * Changes size of preallocated space for memory object "pObject" * to the new size specified by "constSize". * * If the new size is larger than the old size, the old contents  * is not changed. Additionally space is added at the the end of  * "pObject". The new allocated space is not initialized  * to any special value. * If the new size is smaller than the old size, the unused space * is discarded. * * If "pObject" is a NULL pointer, this function behaves just like  * smlLibMalloc(). * If "pObject" does not point to a previously allocated memory area,  * the behavior is undefined. * If "constSize" is 0, a NULL pointer is returned and the space  * which "pObject" points to is freed up. * * Returns a pointer to the first byte of the resized object. * If no new memory could be allocated, a NULL Pointer is returned  * without changing the memory object "pObject" (Nothing happens to the content). * * IN/OUT           void *pObject,      memory object, which size should be changed * IN:              MemSize_t constSize new size the memory object shall use * RETURN:          void*               Pointer to memory object, which size has been *                                      be changed *                                      NULL, if not successfull or *                                            if constSize==0 */SML_API void *smlLibRealloc(void *pObject, MemSize_t constSize){#ifdef __PALM_OS__	VoidPtr_t	_new_object;	MemSize_t 	_old_size;        	// It's a malloc!  	if (pObject == NULL)    		return smlLibMalloc(constSize);      	_old_size = MemPtrSize(pObject);   	if (constSize <= _old_size) {     		// make it smaller     		MemPtrResize(pObject, constSize);     		_new_object = pObject;  	} else {     		// maker it larger (we need to allocate new memory somewhere else)     		_new_object = smlLibMalloc(constSize);     		if (_new_object != NULL) {        		smlLibMemmove(_new_object, pObject, _old_size);        		smlLibFree(pObject);     		}  	}           	return _new_object;#else  // %%% luz 2002-10-02  #ifdef MEMORY_PROFILING  return sysync_realloc(pObject, constSize);  #else	return realloc(pObject, constSize);	#endif#endif}#ifndef __PALM_OS__  /* If not Palm OS we use the Standard ANSI C functions */SML_API void *smlLibMemset(void *pObject, int value, MemSize_t count){	return memset(pObject, value, count);}SML_API void *smlLibMemcpy(void *pTarget, const void *pSource, MemSize_t count){	return memcpy(pTarget, pSource, count);}SML_API void *smlLibMemmove(void *pTarget, const void *pSource, MemSize_t count){	return memmove(pTarget, pSource, count);}SML_API int smlLibMemcmp(const void *pTarget, const void *pSource, MemSize_t count){	return memcmp(pTarget, pSource, count);}SML_API void *smlLibMalloc(MemSize_t size) {  // %%% luz 2002-10-02  #ifdef MEMORY_PROFILING  return (void *)sysync_malloc(size);  #else	return (void *)malloc(size);	#endif}#endif

⌨️ 快捷键说明

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