1 /*************************************************************************/ 2 /* module: Library for Memory Functions */ 3 /* */ 4 /* file: libmem.c */ 5 /* target system: ALL */ 6 /* target OS: ALL */ 7 /* */ 8 /* Description: */ 9 /* Header for the implementation of common memory handling functions */ 10 /*************************************************************************/ 11 12 /* 13 * Copyright Notice 14 * Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication 15 * Industrial Co., Ltd., Motorola, Nokia, Openwave Systems, Inc., 16 * Palm, Inc., Psion, Starfish Software, Symbian, Ltd. (2001). 17 * All Rights Reserved. 18 * Implementation of all or part of any Specification may require 19 * licenses under third party intellectual property rights, 20 * including without limitation, patent rights (such a third party 21 * may or may not be a Supporter). The Sponsors of the Specification 22 * are not responsible and shall not be held responsible in any 23 * manner for identifying or failing to identify any or all such 24 * third party intellectual property rights. 25 * 26 * THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED 27 * ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM, 28 * LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA, 29 * NOKIA, PALM INC., PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML 30 * SPONSORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 31 * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 32 * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 33 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT 34 * SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO., 35 * LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE OR ANY 36 * OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF 37 * PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF 38 * BUSINESS, OR FOR DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, 39 * PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH 40 * THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED 41 * OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE. 42 * 43 * The above notice and this paragraph must be included on all copies 44 * of this document that are made. 45 * 46 */ 47 48 /************************************************************************* 49 * Definitions 50 *************************************************************************/ 51 52 53 #include <smldef.h> 54 #include "dmMemory.h" 55 #include "libmem.h" 56 #ifdef __PALM_OS__ 57 #include "MemoryMgr.h" 58 #endif 59 60 #ifdef MEMORY_PROFILING 61 // %%% luz 2002-10-02 62 #include "profiling.h" 63 #endif 64 65 /************************************************************************* 66 * External Functions for all TOOLKIT Versions 67 *************************************************************************/ 68 69 70 /** 71 * FUNCTION: smlLibFree 72 * 73 * Deallocates the memory of object "pObject", which has been allocated 74 * previously. 75 * If "pObject" is a NULL pointer nothing happens. 76 * If "pObject" is a pointer to memory which has not been allocated 77 * previouly, the behaviour is undefined. 78 * The contents of the deallocated memory object is destroyed. 79 */ 80 SML_API void smlLibFree(void *pObject) 81 { 82 if (! pObject) return; 83 #ifdef __PALM_OS__ 84 MemPtrFree(pObject); 85 #else 86 DmFreeMem(pObject); 87 #endif 88 } 89 90 91 /** 92 * FUNCTION: smlLibRealloc 93 * 94 * Changes size of preallocated space for memory object "pObject" 95 * to the new size specified by "constSize". 96 * 97 * If the new size is larger than the old size, the old contents 98 * is not changed. Additionally space is added at the the end of 99 * "pObject". The new allocated space is not initialized 100 * to any special value. 101 * If the new size is smaller than the old size, the unused space 102 * is discarded. 103 * 104 * If "pObject" is a NULL pointer, this function behaves just like 105 * smlLibMalloc(). 106 * If "pObject" does not point to a previously allocated memory area, 107 * the behavior is undefined. 108 * If "constSize" is 0, a NULL pointer is returned and the space 109 * which "pObject" points to is freed up. 110 * 111 * Returns a pointer to the first byte of the resized object. 112 * If no new memory could be allocated, a NULL Pointer is returned 113 * without changing the memory object "pObject" (Nothing happens to the content). 114 * 115 * IN/OUT void *pObject, memory object, which size should be changed 116 * IN: MemSize_t constSize new size the memory object shall use 117 * RETURN: void* Pointer to memory object, which size has been 118 * be changed 119 * NULL, if not successfull or 120 * if constSize==0 121 */ 122 SML_API void *smlLibRealloc(void *pObject, MemSize_t constSize) 123 { 124 #ifdef __PALM_OS__ 125 VoidPtr_t _new_object; 126 MemSize_t _old_size; 127 128 // It's a malloc! 129 if (pObject == NULL) 130 return smlLibMalloc(constSize); 131 132 _old_size = MemPtrSize(pObject); 133 if (constSize <= _old_size) { 134 // make it smaller 135 MemPtrResize(pObject, constSize); 136 _new_object = pObject; 137 } else { 138 // maker it larger (we need to allocate new memory somewhere else) 139 _new_object = smlLibMalloc(constSize); 140 if (_new_object != NULL) { 141 smlLibMemmove(_new_object, pObject, _old_size); 142 smlLibFree(pObject); 143 } 144 } 145 146 return _new_object; 147 #else 148 return DmReallocMem(pObject, (UINT32)constSize); 149 150 #endif 151 } 152 153 154 #ifndef __PALM_OS__ 155 /* If not Palm OS we use the Standard ANSI C functions */ 156 SML_API void *smlLibMemset(void *pObject, int value, MemSize_t count){ 157 return memset(pObject, value, count); 158 } 159 SML_API void *smlLibMemcpy(void *pTarget, const void *pSource, MemSize_t count){ 160 return memcpy(pTarget, pSource, count); 161 } 162 SML_API void *smlLibMemmove(void *pTarget, const void *pSource, MemSize_t count){ 163 return memmove(pTarget, pSource, count); 164 } 165 SML_API int smlLibMemcmp(const void *pTarget, const void *pSource, MemSize_t count){ 166 return memcmp(pTarget, pSource, count); 167 } 168 /*SML_API void *smlLibMalloc(MemSize_t size) { 169 return (void *)DmAllocMem((UINT32)size); 170 171 }*/ 172 #endif 173 174 175 176