modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/lsm1/lsm_mem.c (about) 1 /* 2 ** 2011-08-18 3 ** 4 ** The author disclaims copyright to this source code. In place of 5 ** a legal notice, here is a blessing: 6 ** 7 ** May you do good and not evil. 8 ** May you find forgiveness for yourself and forgive others. 9 ** May you share freely, never taking more than you give. 10 ** 11 ************************************************************************* 12 ** 13 ** Helper routines for memory allocation. 14 */ 15 #include "lsmInt.h" 16 17 /* 18 ** The following routines are called internally by LSM sub-routines. In 19 ** this case a valid environment pointer must be supplied. 20 */ 21 void *lsmMalloc(lsm_env *pEnv, size_t N){ 22 assert( pEnv ); 23 return pEnv->xMalloc(pEnv, N); 24 } 25 void lsmFree(lsm_env *pEnv, void *p){ 26 assert( pEnv ); 27 pEnv->xFree(pEnv, p); 28 } 29 void *lsmRealloc(lsm_env *pEnv, void *p, size_t N){ 30 assert( pEnv ); 31 return pEnv->xRealloc(pEnv, p, N); 32 } 33 34 /* 35 ** Core memory allocation routines for LSM. 36 */ 37 void *lsm_malloc(lsm_env *pEnv, size_t N){ 38 return lsmMalloc(pEnv ? pEnv : lsm_default_env(), N); 39 } 40 void lsm_free(lsm_env *pEnv, void *p){ 41 lsmFree(pEnv ? pEnv : lsm_default_env(), p); 42 } 43 void *lsm_realloc(lsm_env *pEnv, void *p, size_t N){ 44 return lsmRealloc(pEnv ? pEnv : lsm_default_env(), p, N); 45 } 46 47 void *lsmMallocZero(lsm_env *pEnv, size_t N){ 48 void *pRet; 49 assert( pEnv ); 50 pRet = lsmMalloc(pEnv, N); 51 if( pRet ) memset(pRet, 0, N); 52 return pRet; 53 } 54 55 void *lsmMallocRc(lsm_env *pEnv, size_t N, int *pRc){ 56 void *pRet = 0; 57 if( *pRc==LSM_OK ){ 58 pRet = lsmMalloc(pEnv, N); 59 if( pRet==0 ){ 60 *pRc = LSM_NOMEM_BKPT; 61 } 62 } 63 return pRet; 64 } 65 66 void *lsmMallocZeroRc(lsm_env *pEnv, size_t N, int *pRc){ 67 void *pRet = 0; 68 if( *pRc==LSM_OK ){ 69 pRet = lsmMallocZero(pEnv, N); 70 if( pRet==0 ){ 71 *pRc = LSM_NOMEM_BKPT; 72 } 73 } 74 return pRet; 75 } 76 77 void *lsmReallocOrFree(lsm_env *pEnv, void *p, size_t N){ 78 void *pNew; 79 pNew = lsm_realloc(pEnv, p, N); 80 if( !pNew ) lsm_free(pEnv, p); 81 return pNew; 82 } 83 84 void *lsmReallocOrFreeRc(lsm_env *pEnv, void *p, size_t N, int *pRc){ 85 void *pRet = 0; 86 if( *pRc ){ 87 lsmFree(pEnv, p); 88 }else{ 89 pRet = lsmReallocOrFree(pEnv, p, N); 90 if( !pRet ) *pRc = LSM_NOMEM_BKPT; 91 } 92 return pRet; 93 } 94 95 char *lsmMallocStrdup(lsm_env *pEnv, const char *zIn){ 96 int nByte; 97 char *zRet; 98 nByte = strlen(zIn); 99 zRet = lsmMalloc(pEnv, nByte+1); 100 if( zRet ){ 101 memcpy(zRet, zIn, nByte+1); 102 } 103 return zRet; 104 }