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  }