⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_malloc.c

📁 最新的sqlite3.6.2源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
  Tcl_SetObjResult(interp, pResult);  return TCL_OK;}/*** Usage:    sqlite3_config_pagecache SIZE N**** Set the page-cache memory buffer using SQLITE_CONFIG_PAGECACHE.** The buffer is static and is of limited size.  N might be** adjusted downward as needed to accomodate the requested size.** The revised value of N is returned.**** A negative SIZE causes the buffer pointer to be NULL.*/static int test_config_pagecache(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int sz, N, rc;  Tcl_Obj *pResult;  static char *buf = 0;  if( objc!=3 ){    Tcl_WrongNumArgs(interp, 1, objv, "SIZE N");    return TCL_ERROR;  }  if( Tcl_GetIntFromObj(interp, objv[1], &sz) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &N) ) return TCL_ERROR;  free(buf);  if( sz<0 ){    buf = 0;    rc = sqlite3_config(SQLITE_CONFIG_PAGECACHE, 0, 0, 0);  }else{    buf = malloc( sz*N );    rc = sqlite3_config(SQLITE_CONFIG_PAGECACHE, buf, sz, N);  }  pResult = Tcl_NewObj();  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(rc));  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(N));  Tcl_SetObjResult(interp, pResult);  return TCL_OK;}/*** Usage:    sqlite3_config_memstatus BOOLEAN**** Enable or disable memory status reporting using SQLITE_CONFIG_MEMSTATUS.*/static int test_config_memstatus(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int enable, rc;  if( objc!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "BOOLEAN");    return TCL_ERROR;  }  if( Tcl_GetBooleanFromObj(interp, objv[1], &enable) ) return TCL_ERROR;  rc = sqlite3_config(SQLITE_CONFIG_MEMSTATUS, enable);  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));  return TCL_OK;}/*** Usage:    sqlite3_config_chunkalloc ***/static int test_config_chunkalloc(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int rc;  int nThreshold;  if( objc!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "THRESHOLD");    return TCL_ERROR;  }  if( Tcl_GetIntFromObj(interp, objv[1], &nThreshold) ) return TCL_ERROR;  rc = sqlite3_config(SQLITE_CONFIG_CHUNKALLOC, nThreshold);  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));  return TCL_OK;}/*** Usage:    sqlite3_config_lookaside  SIZE  COUNT***/static int test_config_lookaside(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int rc;  int sz, cnt;  if( objc!=3 ){    Tcl_WrongNumArgs(interp, 1, objv, "SIZE COUNT");    return TCL_ERROR;  }  if( Tcl_GetIntFromObj(interp, objv[1], &sz) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &cnt) ) return TCL_ERROR;  rc = sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, cnt);  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));  return TCL_OK;}/*** Usage:    sqlite3_db_config_lookaside  CONNECTION  BUFID  SIZE  COUNT**** There are two static buffers with BUFID 1 and 2.   Each static buffer** is 10KB in size.  A BUFID of 0 indicates that the buffer should be NULL** which will cause sqlite3_db_config() to allocate space on its own.*/static int test_db_config_lookaside(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int rc;  int sz, cnt;  sqlite3 *db;  int bufid;  static char azBuf[2][10000];  int getDbPointer(Tcl_Interp*, const char*, sqlite3**);  if( objc!=5 ){    Tcl_WrongNumArgs(interp, 1, objv, "BUFID SIZE COUNT");    return TCL_ERROR;  }  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[2], &bufid) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[3], &sz) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, objv[4], &cnt) ) return TCL_ERROR;  if( bufid==0 ){    rc = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, 0, sz, cnt);  }else if( bufid>=1 && bufid<=2 && sz*cnt<=sizeof(azBuf[0]) ){    rc = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, azBuf[bufid], sz,cnt);  }else{    Tcl_AppendResult(interp, "illegal arguments - see documentation", (char*)0);    return TCL_ERROR;  }  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));  return TCL_OK;}/*** Usage:****   sqlite3_config_heap NBYTE NMINALLOC*/static int test_config_heap(  void * clientData,   Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  static char *zBuf; /* Use this memory */  static int szBuf;  /* Bytes allocated for zBuf */  int nByte;         /* Size of buffer to pass to sqlite3_config() */  int nMinAlloc;     /* Size of minimum allocation */  int rc;            /* Return code of sqlite3_config() */  Tcl_Obj * CONST *aArg = &objv[1];  int nArg = objc-1;  if( nArg!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "NBYTE NMINALLOC");    return TCL_ERROR;  }  if( Tcl_GetIntFromObj(interp, aArg[0], &nByte) ) return TCL_ERROR;  if( Tcl_GetIntFromObj(interp, aArg[1], &nMinAlloc) ) return TCL_ERROR;  if( nByte==0 ){    free( zBuf );    zBuf = 0;    szBuf = 0;    rc = sqlite3_config(SQLITE_CONFIG_HEAP, (void*)0, 0, 0);  }else{    zBuf = realloc(zBuf, nByte);    szBuf = nByte;    rc = sqlite3_config(SQLITE_CONFIG_HEAP, zBuf, nByte, nMinAlloc);  }  Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);  return TCL_OK;}/*** tclcmd:     sqlite3_config_error  [DB]**** Invoke sqlite3_config() or sqlite3_db_config() with invalid** opcodes and verify that they return errors.*/static int test_config_error(  void * clientData,   Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3 *db;  int getDbPointer(Tcl_Interp*, const char*, sqlite3**);  if( objc!=2 && objc!=1 ){    Tcl_WrongNumArgs(interp, 1, objv, "[DB]");    return TCL_ERROR;  }  if( objc==2 ){    if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;    if( sqlite3_db_config(db, 99999)!=SQLITE_ERROR ){      Tcl_AppendResult(interp,             "sqlite3_db_config(db, 99999) does not return SQLITE_ERROR",            (char*)0);      return TCL_ERROR;    }  }else{    if( sqlite3_config(99999)!=SQLITE_ERROR ){      Tcl_AppendResult(interp,           "sqlite3_config(99999) does not return SQLITE_ERROR",          (char*)0);      return TCL_ERROR;    }  }  return TCL_OK;}/*** Usage:    ****   sqlite3_dump_memsys3  FILENAME**   sqlite3_dump_memsys5  FILENAME**** Write a summary of unfreed memsys3 allocations to FILENAME.*/static int test_dump_memsys3(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  if( objc!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "FILENAME");    return TCL_ERROR;  }  switch( (int)clientData ){    case 3: {#ifdef SQLITE_ENABLE_MEMSYS3      extern void sqlite3Memsys3Dump(const char*);      sqlite3Memsys3Dump(Tcl_GetString(objv[1]));      break;#endif    }    case 5: {#ifdef SQLITE_ENABLE_MEMSYS5      extern void sqlite3Memsys5Dump(const char*);      sqlite3Memsys5Dump(Tcl_GetString(objv[1]));      break;#endif    }  }  return TCL_OK;}/*** Usage:    sqlite3_status  OPCODE  RESETFLAG**** Return a list of three elements which are the sqlite3_status() return** code, the current value, and the high-water mark value.*/static int test_status(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int rc, iValue, mxValue;  int i, op, resetFlag;  const char *zOpName;  static const struct {    const char *zName;    int op;  } aOp[] = {    { "SQLITE_STATUS_MEMORY_USED",         SQLITE_STATUS_MEMORY_USED         },    { "SQLITE_STATUS_MALLOC_SIZE",         SQLITE_STATUS_MALLOC_SIZE         },    { "SQLITE_STATUS_PAGECACHE_USED",      SQLITE_STATUS_PAGECACHE_USED      },    { "SQLITE_STATUS_PAGECACHE_OVERFLOW",  SQLITE_STATUS_PAGECACHE_OVERFLOW  },    { "SQLITE_STATUS_PAGECACHE_SIZE",      SQLITE_STATUS_PAGECACHE_SIZE      },    { "SQLITE_STATUS_SCRATCH_USED",        SQLITE_STATUS_SCRATCH_USED        },    { "SQLITE_STATUS_SCRATCH_OVERFLOW",    SQLITE_STATUS_SCRATCH_OVERFLOW    },    { "SQLITE_STATUS_SCRATCH_SIZE",        SQLITE_STATUS_SCRATCH_SIZE        },    { "SQLITE_STATUS_PARSER_STACK",        SQLITE_STATUS_PARSER_STACK        },  };  Tcl_Obj *pResult;  if( objc!=3 ){    Tcl_WrongNumArgs(interp, 1, objv, "PARAMETER RESETFLAG");    return TCL_ERROR;  }  zOpName = Tcl_GetString(objv[1]);  for(i=0; i<ArraySize(aOp); i++){    if( strcmp(aOp[i].zName, zOpName)==0 ){      op = aOp[i].op;      break;    }  }  if( i>=ArraySize(aOp) ){    if( Tcl_GetIntFromObj(interp, objv[1], &op) ) return TCL_ERROR;  }  if( Tcl_GetBooleanFromObj(interp, objv[2], &resetFlag) ) return TCL_ERROR;  iValue = 0;  mxValue = 0;  rc = sqlite3_status(op, &iValue, &mxValue, resetFlag);  pResult = Tcl_NewObj();  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(rc));  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(iValue));  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(mxValue));  Tcl_SetObjResult(interp, pResult);  return TCL_OK;}/*** Usage:    sqlite3_db_status  DATABASE  OPCODE  RESETFLAG**** Return a list of three elements which are the sqlite3_db_status() return** code, the current value, and the high-water mark value.*/static int test_db_status(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int rc, iValue, mxValue;  int i, op, resetFlag;  const char *zOpName;  sqlite3 *db;  int getDbPointer(Tcl_Interp*, const char*, sqlite3**);  static const struct {    const char *zName;    int op;  } aOp[] = {    { "SQLITE_DBSTATUS_LOOKASIDE_USED",    SQLITE_DBSTATUS_LOOKASIDE_USED   },  };  Tcl_Obj *pResult;  if( objc!=4 ){    Tcl_WrongNumArgs(interp, 1, objv, "PARAMETER RESETFLAG");    return TCL_ERROR;  }  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;  zOpName = Tcl_GetString(objv[2]);  for(i=0; i<ArraySize(aOp); i++){    if( strcmp(aOp[i].zName, zOpName)==0 ){      op = aOp[i].op;      break;    }  }  if( i>=ArraySize(aOp) ){    if( Tcl_GetIntFromObj(interp, objv[2], &op) ) return TCL_ERROR;  }  if( Tcl_GetBooleanFromObj(interp, objv[3], &resetFlag) ) return TCL_ERROR;  iValue = 0;  mxValue = 0;  rc = sqlite3_db_status(db, op, &iValue, &mxValue, resetFlag);  pResult = Tcl_NewObj();  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(rc));  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(iValue));  Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(mxValue));  Tcl_SetObjResult(interp, pResult);  return TCL_OK;}/*** install_malloc_faultsim BOOLEAN*/static int test_install_malloc_faultsim(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  int rc;  int isInstall;  if( objc!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "BOOLEAN");    return TCL_ERROR;  }  if( TCL_OK!=Tcl_GetBooleanFromObj(interp, objv[1], &isInstall) ){    return TCL_ERROR;  }  rc = faultsimInstall(isInstall);  Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);  return TCL_OK;}/*** Register commands with the TCL interpreter.*/int Sqlitetest_malloc_Init(Tcl_Interp *interp){  static struct {     char *zName;     Tcl_ObjCmdProc *xProc;     int clientData;  } aObjCmd[] = {     { "sqlite3_malloc",             test_malloc                   ,0 },     { "sqlite3_realloc",            test_realloc                  ,0 },     { "sqlite3_free",               test_free                     ,0 },     { "memset",                     test_memset                   ,0 },     { "memget",                     test_memget                   ,0 },     { "sqlite3_memory_used",        test_memory_used              ,0 },     { "sqlite3_memory_highwater",   test_memory_highwater         ,0 },     { "sqlite3_memdebug_backtrace", test_memdebug_backtrace       ,0 },     { "sqlite3_memdebug_dump",      test_memdebug_dump            ,0 },     { "sqlite3_memdebug_fail",      test_memdebug_fail            ,0 },     { "sqlite3_memdebug_pending",   test_memdebug_pending         ,0 },     { "sqlite3_memdebug_settitle",  test_memdebug_settitle        ,0 },     { "sqlite3_memdebug_malloc_count", test_memdebug_malloc_count ,0 },     { "sqlite3_memdebug_log",       test_memdebug_log             ,0 },     { "sqlite3_config_scratch",     test_config_scratch           ,0 },     { "sqlite3_config_pagecache",   test_config_pagecache         ,0 },     { "sqlite3_status",             test_status                   ,0 },     { "sqlite3_db_status",          test_db_status                ,0 },     { "install_malloc_faultsim",    test_install_malloc_faultsim  ,0 },     { "sqlite3_config_heap",        test_config_heap              ,0 },     { "sqlite3_config_memstatus",   test_config_memstatus         ,0 },     { "sqlite3_config_chunkalloc",  test_config_chunkalloc        ,0 },     { "sqlite3_config_lookaside",   test_config_lookaside         ,0 },     { "sqlite3_config_error",       test_config_error             ,0 },     { "sqlite3_db_config_lookaside",test_db_config_lookaside      ,0 },     { "sqlite3_dump_memsys3",       test_dump_memsys3             ,3 },     { "sqlite3_dump_memsys5",       test_dump_memsys3             ,5 }  };  int i;  for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){    ClientData c = (ClientData)aObjCmd[i].clientData;    Tcl_CreateObjCommand(interp, aObjCmd[i].zName, aObjCmd[i].xProc, c, 0);  }  return TCL_OK;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -