4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
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.
11 *************************************************************************
13 ** Helper routines for memory allocation.
18 ** The following routines are called internally by LSM sub-routines. In
19 ** this case a valid environment pointer must be supplied.
21 void *lsmMalloc(lsm_env
*pEnv
, size_t N
){
23 return pEnv
->xMalloc(pEnv
, N
);
25 void lsmFree(lsm_env
*pEnv
, void *p
){
29 void *lsmRealloc(lsm_env
*pEnv
, void *p
, size_t N
){
31 return pEnv
->xRealloc(pEnv
, p
, N
);
35 ** Core memory allocation routines for LSM.
37 void *lsm_malloc(lsm_env
*pEnv
, size_t N
){
38 return lsmMalloc(pEnv
? pEnv
: lsm_default_env(), N
);
40 void lsm_free(lsm_env
*pEnv
, void *p
){
41 lsmFree(pEnv
? pEnv
: lsm_default_env(), p
);
43 void *lsm_realloc(lsm_env
*pEnv
, void *p
, size_t N
){
44 return lsmRealloc(pEnv
? pEnv
: lsm_default_env(), p
, N
);
47 void *lsmMallocZero(lsm_env
*pEnv
, size_t N
){
50 pRet
= lsmMalloc(pEnv
, N
);
51 if( pRet
) memset(pRet
, 0, N
);
55 void *lsmMallocRc(lsm_env
*pEnv
, size_t N
, int *pRc
){
58 pRet
= lsmMalloc(pEnv
, N
);
60 *pRc
= LSM_NOMEM_BKPT
;
66 void *lsmMallocZeroRc(lsm_env
*pEnv
, size_t N
, int *pRc
){
69 pRet
= lsmMallocZero(pEnv
, N
);
71 *pRc
= LSM_NOMEM_BKPT
;
77 void *lsmReallocOrFree(lsm_env
*pEnv
, void *p
, size_t N
){
79 pNew
= lsm_realloc(pEnv
, p
, N
);
80 if( !pNew
) lsm_free(pEnv
, p
);
84 void *lsmReallocOrFreeRc(lsm_env
*pEnv
, void *p
, size_t N
, int *pRc
){
89 pRet
= lsmReallocOrFree(pEnv
, p
, N
);
90 if( !pRet
) *pRc
= LSM_NOMEM_BKPT
;
95 char *lsmMallocStrdup(lsm_env
*pEnv
, const char *zIn
){
99 zRet
= lsmMalloc(pEnv
, nByte
+1);
101 memcpy(zRet
, zIn
, nByte
+1);