13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*************************************************************************/ 23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* module: Library for Memory Functions */ 33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* */ 43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* file: libmem.c */ 53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* target system: ALL */ 63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* target OS: ALL */ 73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* */ 83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Description: */ 93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Header for the implementation of common memory handling functions */ 103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*************************************************************************/ 113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* 133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright Notice 143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication 153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Industrial Co., Ltd., Motorola, Nokia, Openwave Systems, Inc., 163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Palm, Inc., Psion, Starfish Software, Symbian, Ltd. (2001). 173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * All Rights Reserved. 183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Implementation of all or part of any Specification may require 193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * licenses under third party intellectual property rights, 203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * including without limitation, patent rights (such a third party 213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * may or may not be a Supporter). The Sponsors of the Specification 223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * are not responsible and shall not be held responsible in any 233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * manner for identifying or failing to identify any or all such 243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * third party intellectual property rights. 253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED 273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM, 283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA, 293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * NOKIA, PALM INC., PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML 303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SPONSORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT 343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO., 353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE OR ANY 363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF 373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF 383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * BUSINESS, OR FOR DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, 393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH 403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED 413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE. 423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * The above notice and this paragraph must be included on all copies 443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * of this document that are made. 453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/************************************************************************* 493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Definitions 503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *************************************************************************/ 513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include <smldef.h> 543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmMemory.h" 553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "libmem.h" 563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef __PALM_OS__ 573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "MemoryMgr.h" 583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef MEMORY_PROFILING 613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // %%% luz 2002-10-02 623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby #include "profiling.h" 633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/************************************************************************* 663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * External Functions for all TOOLKIT Versions 673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *************************************************************************/ 683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/** 713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION: smlLibFree 723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Deallocates the memory of object "pObject", which has been allocated 743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * previously. 753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If "pObject" is a NULL pointer nothing happens. 763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If "pObject" is a pointer to memory which has not been allocated 773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * previouly, the behaviour is undefined. 783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * The contents of the deallocated memory object is destroyed. 793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API void smlLibFree(void *pObject) 813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (! pObject) return; 833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby #ifdef __PALM_OS__ 843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby MemPtrFree(pObject); 853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby #else 863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmFreeMem(pObject); 873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby #endif 883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/** 923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION: smlLibRealloc 933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Changes size of preallocated space for memory object "pObject" 953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * to the new size specified by "constSize". 963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If the new size is larger than the old size, the old contents 983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * is not changed. Additionally space is added at the the end of 993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * "pObject". The new allocated space is not initialized 1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * to any special value. 1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If the new size is smaller than the old size, the unused space 1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * is discarded. 1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If "pObject" is a NULL pointer, this function behaves just like 1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * smlLibMalloc(). 1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If "pObject" does not point to a previously allocated memory area, 1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * the behavior is undefined. 1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If "constSize" is 0, a NULL pointer is returned and the space 1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * which "pObject" points to is freed up. 1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Returns a pointer to the first byte of the resized object. 1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * If no new memory could be allocated, a NULL Pointer is returned 1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * without changing the memory object "pObject" (Nothing happens to the content). 1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN/OUT void *pObject, memory object, which size should be changed 1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN: MemSize_t constSize new size the memory object shall use 1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN: void* Pointer to memory object, which size has been 1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * be changed 1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * NULL, if not successfull or 1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * if constSize==0 1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API void *smlLibRealloc(void *pObject, MemSize_t constSize) 1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef __PALM_OS__ 1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby VoidPtr_t _new_object; 1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby MemSize_t _old_size; 1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // It's a malloc! 1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pObject == NULL) 1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return smlLibMalloc(constSize); 1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby _old_size = MemPtrSize(pObject); 1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (constSize <= _old_size) { 1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // make it smaller 1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby MemPtrResize(pObject, constSize); 1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby _new_object = pObject; 1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // maker it larger (we need to allocate new memory somewhere else) 1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby _new_object = smlLibMalloc(constSize); 1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (_new_object != NULL) { 1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby smlLibMemmove(_new_object, pObject, _old_size); 1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby smlLibFree(pObject); 1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return _new_object; 1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#else 1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return DmReallocMem(pObject, (UINT32)constSize); 1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef __PALM_OS__ 1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* If not Palm OS we use the Standard ANSI C functions */ 1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API void *smlLibMemset(void *pObject, int value, MemSize_t count){ 1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return memset(pObject, value, count); 1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API void *smlLibMemcpy(void *pTarget, const void *pSource, MemSize_t count){ 1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return memcpy(pTarget, pSource, count); 1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API void *smlLibMemmove(void *pTarget, const void *pSource, MemSize_t count){ 1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return memmove(pTarget, pSource, count); 1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API int smlLibMemcmp(const void *pTarget, const void *pSource, MemSize_t count){ 1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return memcmp(pTarget, pSource, count); 1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*SML_API void *smlLibMalloc(MemSize_t size) { 1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return (void *)DmAllocMem((UINT32)size); 1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}*/ 1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 176