Home | History | Annotate | Download | only in src
      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