/ Hex Artifact Content
Login

Artifact 613c65f12ff0ee4edd017aa458209ab7a23cd7b1:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 65 6d 6f 72 79  ******.** Memory
0180: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63   allocation func
0190: 74 69 6f 6e 73 20 75 73 65 64 20 74 68 72 6f 75  tions used throu
01a0: 67 68 6f 75 74 20 73 71 6c 69 74 65 2e 0a 2a 2a  ghout sqlite..**
01b0: 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 6d 61 6c 6c  .**.** $Id: mall
01c0: 6f 63 2e 63 2c 76 20 31 2e 36 20 32 30 30 37 2f  oc.c,v 1.6 2007/
01d0: 30 38 2f 31 36 20 31 30 3a 30 39 3a 30 33 20 64  08/16 10:09:03 d
01e0: 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24  anielk1977 Exp $
01f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
0200: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c  liteInt.h".#incl
0210: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
0220: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23  ude <stdarg.h>.#
0230: 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
0240: 3e 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  >../*.** Set the
0250: 20 73 6f 66 74 20 68 65 61 70 2d 73 69 7a 65 20   soft heap-size 
0260: 6c 69 6d 69 74 20 66 6f 72 20 74 68 65 20 63 75  limit for the cu
0270: 72 72 65 6e 74 20 74 68 72 65 61 64 2e 20 50 61  rrent thread. Pa
0280: 73 73 69 6e 67 20 61 20 6e 65 67 61 74 69 76 65  ssing a negative
0290: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 64 69 63 61  .** value indica
02a0: 74 65 73 20 6e 6f 20 6c 69 6d 69 74 2e 0a 2a 2f  tes no limit..*/
02b0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73 6f  .void sqlite3_so
02c0: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28 69 6e  ft_heap_limit(in
02d0: 74 20 6e 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  t n){.#ifdef SQL
02e0: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
02f0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 54  Y_MANAGEMENT.  T
0300: 68 72 65 61 64 44 61 74 61 20 2a 70 54 64 20 3d  hreadData *pTd =
0310: 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61   sqlite3ThreadDa
0320: 74 61 28 29 3b 0a 20 20 69 66 28 20 70 54 64 20  ta();.  if( pTd 
0330: 29 7b 0a 20 20 20 20 70 54 64 2d 3e 6e 53 6f 66  ){.    pTd->nSof
0340: 74 48 65 61 70 4c 69 6d 69 74 20 3d 20 6e 3b 0a  tHeapLimit = n;.
0350: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65 6c    }.  sqlite3Rel
0360: 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28 29  easeThreadData()
0370: 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a  ;.#endif.}../*.*
0380: 2a 20 52 65 6c 65 61 73 65 20 6d 65 6d 6f 72 79  * Release memory
0390: 20 68 65 6c 64 20 62 79 20 53 51 4c 69 74 65 20   held by SQLite 
03a0: 69 6e 73 74 61 6e 63 65 73 20 63 72 65 61 74 65  instances create
03b0: 64 20 62 79 20 74 68 65 20 63 75 72 72 65 6e 74  d by the current
03c0: 20 74 68 72 65 61 64 2e 0a 2a 2f 0a 69 6e 74 20   thread..*/.int 
03d0: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
03e0: 6d 65 6d 6f 72 79 28 69 6e 74 20 6e 29 7b 0a 23  memory(int n){.#
03f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
0400: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
0410: 4d 41 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21  MANAGEMENT) && !
0420: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0430: 4d 49 54 5f 44 49 53 4b 49 4f 29 0a 20 20 72 65  MIT_DISKIO).  re
0440: 74 75 72 6e 20 73 71 6c 69 74 65 33 50 61 67 65  turn sqlite3Page
0450: 72 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 6e  rReleaseMemory(n
0460: 29 3b 0a 23 65 6c 73 65 0a 20 20 72 65 74 75 72  );.#else.  retur
0470: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e  n SQLITE_OK;.#en
0480: 64 69 66 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.}.../*.** Al
0490: 6c 6f 63 61 74 65 20 61 6e 64 20 7a 65 72 6f 20  locate and zero 
04a0: 6d 65 6d 6f 72 79 2e 0a 2a 2f 20 0a 76 6f 69 64  memory..*/ .void
04b0: 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
04c0: 65 72 6f 28 75 6e 73 69 67 6e 65 64 20 6e 29 7b  ero(unsigned n){
04d0: 0a 20 20 76 6f 69 64 20 2a 70 20 3d 20 73 71 6c  .  void *p = sql
04e0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 6e 29 3b 0a  ite3_malloc(n);.
04f0: 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 6d    if( p ){.    m
0500: 65 6d 73 65 74 28 70 2c 20 30 2c 20 6e 29 3b 0a  emset(p, 0, n);.
0510: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a    }.  return p;.
0520: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
0530: 65 20 61 6e 64 20 7a 65 72 6f 20 6d 65 6d 6f 72  e and zero memor
0540: 79 2e 20 20 49 66 20 74 68 65 20 61 6c 6c 6f 63  y.  If the alloc
0550: 61 74 69 6f 6e 20 66 61 69 6c 73 2c 20 6d 61 6b  ation fails, mak
0560: 65 0a 2a 2a 20 74 68 65 20 6d 61 6c 6c 6f 63 46  e.** the mallocF
0570: 61 69 6c 65 64 20 66 6c 61 67 20 69 6e 20 74 68  ailed flag in th
0580: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  e connection poi
0590: 6e 74 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  nter..*/.void *s
05a0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
05b0: 72 6f 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ro(sqlite3 *db, 
05c0: 75 6e 73 69 67 6e 65 64 20 6e 29 7b 0a 20 20 76  unsigned n){.  v
05d0: 6f 69 64 20 2a 70 20 3d 20 73 71 6c 69 74 65 33  oid *p = sqlite3
05e0: 5f 6d 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20 69 66  _malloc(n);.  if
05f0: 28 20 70 20 29 7b 0a 20 20 20 20 6d 65 6d 73 65  ( p ){.    memse
0600: 74 28 70 2c 20 30 2c 20 6e 29 3b 0a 20 20 7d 65  t(p, 0, n);.  }e
0610: 6c 73 65 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 6c  lse{.    db->mal
0620: 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
0630: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d   }.  return p;.}
0640: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
0650: 20 61 6e 64 20 7a 65 72 6f 20 6d 65 6d 6f 72 79   and zero memory
0660: 2e 20 20 49 66 20 74 68 65 20 61 6c 6c 6f 63 61  .  If the alloca
0670: 74 69 6f 6e 20 66 61 69 6c 73 2c 20 6d 61 6b 65  tion fails, make
0680: 0a 2a 2a 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61  .** the mallocFa
0690: 69 6c 65 64 20 66 6c 61 67 20 69 6e 20 74 68 65  iled flag in the
06a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
06b0: 74 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ter..*/.void *sq
06c0: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
06d0: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 75 6e  (sqlite3 *db, un
06e0: 73 69 67 6e 65 64 20 6e 29 7b 0a 20 20 76 6f 69  signed n){.  voi
06f0: 64 20 2a 70 20 3d 20 73 71 6c 69 74 65 33 5f 6d  d *p = sqlite3_m
0700: 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20 69 66 28 20  alloc(n);.  if( 
0710: 21 70 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61  !p ){.    db->ma
0720: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
0730: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a    }.  return p;.
0740: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  }../*.** Attempt
0750: 20 74 6f 20 72 65 61 6c 6c 6f 63 61 74 65 20 70   to reallocate p
0760: 2e 20 20 49 66 20 74 68 65 20 72 65 61 6c 6c 6f  .  If the reallo
0770: 63 61 74 69 6f 6e 20 66 61 69 6c 73 2c 20 74 68  cation fails, th
0780: 65 6e 20 66 72 65 65 20 70 0a 2a 2a 20 61 6e 64  en free p.** and
0790: 20 73 65 74 20 74 68 65 20 6d 61 6c 6c 6f 63 46   set the mallocF
07a0: 61 69 6c 65 64 20 66 6c 61 67 20 69 6e 20 74 68  ailed flag in th
07b0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
07c0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  ction..*/.void *
07d0: 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
07e0: 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
07f0: 64 62 2c 20 76 6f 69 64 20 2a 70 2c 20 69 6e 74  db, void *p, int
0800: 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4e 65   n){.  void *pNe
0810: 77 3b 0a 20 20 70 4e 65 77 20 3d 20 73 71 6c 69  w;.  pNew = sqli
0820: 74 65 33 5f 72 65 61 6c 6c 6f 63 28 70 2c 20 6e  te3_realloc(p, n
0830: 29 3b 0a 20 20 69 66 28 20 21 70 4e 65 77 20 29  );.  if( !pNew )
0840: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
0850: 65 65 28 70 29 3b 0a 20 20 20 20 64 62 2d 3e 6d  ee(p);.    db->m
0860: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
0870: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 4e  .  }.  return pN
0880: 65 77 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ew;.}.../*.** Ma
0890: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 61 20 73  ke a copy of a s
08a0: 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20  tring in memory 
08b0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
08c0: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 54 68  liteMalloc(). Th
08d0: 65 73 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  ese .** function
08e0: 73 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 4d 61  s call sqlite3Ma
08f0: 6c 6c 6f 63 52 61 77 28 29 20 64 69 72 65 63 74  llocRaw() direct
0900: 6c 79 20 69 6e 73 74 65 61 64 20 6f 66 20 73 71  ly instead of sq
0910: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 54 68  liteMalloc(). Th
0920: 69 73 0a 2a 2a 20 69 73 20 62 65 63 61 75 73 65  is.** is because
0930: 20 77 68 65 6e 20 6d 65 6d 6f 72 79 20 64 65 62   when memory deb
0940: 75 67 67 69 6e 67 20 69 73 20 74 75 72 6e 65 64  ugging is turned
0950: 20 6f 6e 2c 20 74 68 65 73 65 20 74 77 6f 20 66   on, these two f
0960: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 0a 2a 2a  unctions are .**
0970: 20 63 61 6c 6c 65 64 20 76 69 61 20 6d 61 63 72   called via macr
0980: 6f 73 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  os that record t
0990: 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c 65 20  he current file 
09a0: 61 6e 64 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20  and line number 
09b0: 69 6e 20 74 68 65 0a 2a 2a 20 54 68 72 65 61 64  in the.** Thread
09c0: 44 61 74 61 20 73 74 72 75 63 74 75 72 65 2e 0a  Data structure..
09d0: 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  */.char *sqlite3
09e0: 53 74 72 44 75 70 28 63 6f 6e 73 74 20 63 68 61  StrDup(const cha
09f0: 72 20 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a  r *z){.  char *z
0a00: 4e 65 77 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  New;.  int n;.  
0a10: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
0a20: 6e 20 30 3b 0a 20 20 6e 20 3d 20 73 74 72 6c 65  n 0;.  n = strle
0a30: 6e 28 7a 29 2b 31 3b 0a 20 20 7a 4e 65 77 20 3d  n(z)+1;.  zNew =
0a40: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
0a50: 6e 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20 29  n);.  if( zNew )
0a60: 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c   memcpy(zNew, z,
0a70: 20 6e 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 4e   n);.  return zN
0a80: 65 77 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69  ew;.}.char *sqli
0a90: 74 65 33 53 74 72 4e 44 75 70 28 63 6f 6e 73 74  te3StrNDup(const
0aa0: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
0ab0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a  {.  char *zNew;.
0ac0: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74    if( z==0 ) ret
0ad0: 75 72 6e 20 30 3b 0a 20 20 7a 4e 65 77 20 3d 20  urn 0;.  zNew = 
0ae0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 6e  sqlite3_malloc(n
0af0: 2b 31 29 3b 0a 20 20 69 66 28 20 7a 4e 65 77 20  +1);.  if( zNew 
0b00: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 4e  ){.    memcpy(zN
0b10: 65 77 2c 20 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a  ew, z, n);.    z
0b20: 4e 65 77 5b 6e 5d 20 3d 20 30 3b 0a 20 20 7d 0a  New[n] = 0;.  }.
0b30: 20 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d    return zNew;.}
0b40: 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ..char *sqlite3D
0b50: 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 20  bStrDup(sqlite3 
0b60: 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
0b70: 2a 7a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65  *z){.  char *zNe
0b80: 77 20 3d 20 73 71 6c 69 74 65 33 53 74 72 44 75  w = sqlite3StrDu
0b90: 70 28 7a 29 3b 0a 20 20 69 66 28 20 7a 20 26 26  p(z);.  if( z &&
0ba0: 20 21 7a 4e 65 77 20 29 7b 0a 20 20 20 20 64 62   !zNew ){.    db
0bb0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
0bc0: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
0bd0: 20 7a 4e 65 77 3b 0a 7d 0a 63 68 61 72 20 2a 73   zNew;.}.char *s
0be0: 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
0bf0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
0c00: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
0c10: 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77  n){.  char *zNew
0c20: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 4e 44 75   = sqlite3StrNDu
0c30: 70 28 7a 2c 20 6e 29 3b 0a 20 20 69 66 28 20 7a  p(z, n);.  if( z
0c40: 20 26 26 20 21 7a 4e 65 77 20 29 7b 0a 20 20 20   && !zNew ){.   
0c50: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
0c60: 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  d = 1;.  }.  ret
0c70: 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a 2f 2a 0a  urn zNew;.}../*.
0c80: 2a 2a 20 43 72 65 61 74 65 20 61 20 73 74 72 69  ** Create a stri
0c90: 6e 67 20 66 72 6f 6d 20 74 68 65 20 32 6e 64 20  ng from the 2nd 
0ca0: 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20 61  and subsequent a
0cb0: 72 67 75 6d 65 6e 74 73 20 28 75 70 20 74 6f 20  rguments (up to 
0cc0: 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 4e 55 4c  the.** first NUL
0cd0: 4c 20 61 72 67 75 6d 65 6e 74 29 2c 20 73 74 6f  L argument), sto
0ce0: 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 69 6e  re the string in
0cf0: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
0d00: 20 66 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65 4d   from.** sqliteM
0d10: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b 65  alloc() and make
0d20: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 69 6e 64   the pointer ind
0d30: 69 63 61 74 65 64 20 62 79 20 74 68 65 20 31 73  icated by the 1s
0d40: 74 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 70 6f  t argument.** po
0d50: 69 6e 74 20 74 6f 20 74 68 61 74 20 73 74 72 69  int to that stri
0d60: 6e 67 2e 20 20 54 68 65 20 31 73 74 20 61 72 67  ng.  The 1st arg
0d70: 75 6d 65 6e 74 20 6d 75 73 74 20 65 69 74 68 65  ument must eithe
0d80: 72 20 62 65 20 4e 55 4c 4c 20 6f 72 20 0a 2a 2a  r be NULL or .**
0d90: 20 70 6f 69 6e 74 20 74 6f 20 6d 65 6d 6f 72 79   point to memory
0da0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
0db0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 0a 2a  qliteMalloc()..*
0dc0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  /.void sqlite3Se
0dd0: 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 70  tString(char **p
0de0: 7a 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  z, ...){.  va_li
0df0: 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 42 79  st ap;.  int nBy
0e00: 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  te;.  const char
0e10: 20 2a 7a 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65   *z;.  char *zRe
0e20: 73 75 6c 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  sult;..  assert(
0e30: 20 70 7a 21 3d 30 20 29 3b 0a 20 20 6e 42 79 74   pz!=0 );.  nByt
0e40: 65 20 3d 20 31 3b 0a 20 20 76 61 5f 73 74 61 72  e = 1;.  va_star
0e50: 74 28 61 70 2c 20 70 7a 29 3b 0a 20 20 77 68 69  t(ap, pz);.  whi
0e60: 6c 65 28 20 28 7a 20 3d 20 76 61 5f 61 72 67 28  le( (z = va_arg(
0e70: 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  ap, const char*)
0e80: 29 21 3d 30 20 29 7b 0a 20 20 20 20 6e 42 79 74  )!=0 ){.    nByt
0e90: 65 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a  e += strlen(z);.
0ea0: 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29    }.  va_end(ap)
0eb0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
0ec0: 28 2a 70 7a 29 3b 0a 20 20 2a 70 7a 20 3d 20 7a  (*pz);.  *pz = z
0ed0: 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 33  Result = sqlite3
0ee0: 5f 6d 61 6c 6c 6f 63 28 6e 42 79 74 65 29 3b 0a  _malloc(nByte);.
0ef0: 20 20 69 66 28 20 7a 52 65 73 75 6c 74 3d 3d 30    if( zResult==0
0f00: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a   ){.    return;.
0f10: 20 20 7d 0a 20 20 2a 7a 52 65 73 75 6c 74 20 3d    }.  *zResult =
0f20: 20 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61   0;.  va_start(a
0f30: 70 2c 20 70 7a 29 3b 0a 20 20 77 68 69 6c 65 28  p, pz);.  while(
0f40: 20 28 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   (z = va_arg(ap,
0f50: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 21 3d   const char*))!=
0f60: 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d  0 ){.    int n =
0f70: 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20   strlen(z);.    
0f80: 6d 65 6d 63 70 79 28 7a 52 65 73 75 6c 74 2c 20  memcpy(zResult, 
0f90: 7a 2c 20 6e 29 3b 0a 20 20 20 20 7a 52 65 73 75  z, n);.    zResu
0fa0: 6c 74 20 2b 3d 20 6e 3b 0a 20 20 7d 0a 20 20 7a  lt += n;.  }.  z
0fb0: 52 65 73 75 6c 74 5b 30 5d 20 3d 20 30 3b 0a 20  Result[0] = 0;. 
0fc0: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a 0a   va_end(ap);.}..
0fd0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  ./*.** This func
0fe0: 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 63 61 6c  tion must be cal
0ff0: 6c 65 64 20 62 65 66 6f 72 65 20 65 78 69 74 69  led before exiti
1000: 6e 67 20 61 6e 79 20 41 50 49 20 66 75 6e 63 74  ng any API funct
1010: 69 6f 6e 20 28 69 2e 65 2e 20 0a 2a 2a 20 72 65  ion (i.e. .** re
1020: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
1030: 74 6f 20 74 68 65 20 75 73 65 72 29 20 74 68 61  to the user) tha
1040: 74 20 68 61 73 20 63 61 6c 6c 65 64 20 73 71 6c  t has called sql
1050: 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 6f 72 0a 2a  ite3_malloc or.*
1060: 2a 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  * sqlite3_reallo
1070: 63 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 74  c..**.** The ret
1080: 75 72 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e  urned value is n
1090: 6f 72 6d 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f  ormally a copy o
10a0: 66 20 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67  f the second arg
10b0: 75 6d 65 6e 74 20 74 6f 20 74 68 69 73 0a 2a 2a  ument to this.**
10c0: 20 66 75 6e 63 74 69 6f 6e 2e 20 48 6f 77 65 76   function. Howev
10d0: 65 72 2c 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  er, if a malloc(
10e0: 29 20 66 61 69 6c 75 72 65 20 68 61 73 20 6f 63  ) failure has oc
10f0: 63 75 72 65 64 20 73 69 6e 63 65 20 74 68 65 20  cured since the 
1100: 70 72 65 76 69 6f 75 73 0a 2a 2a 20 69 6e 76 6f  previous.** invo
1110: 63 61 74 69 6f 6e 20 53 51 4c 49 54 45 5f 4e 4f  cation SQLITE_NO
1120: 4d 45 4d 20 69 73 20 72 65 74 75 72 6e 65 64 20  MEM is returned 
1130: 69 6e 73 74 65 61 64 2e 20 0a 2a 2a 0a 2a 2a 20  instead. .**.** 
1140: 49 66 20 74 68 65 20 66 69 72 73 74 20 61 72 67  If the first arg
1150: 75 6d 65 6e 74 2c 20 64 62 2c 20 69 73 20 6e 6f  ument, db, is no
1160: 74 20 4e 55 4c 4c 20 61 6e 64 20 61 20 6d 61 6c  t NULL and a mal
1170: 6c 6f 63 28 29 20 65 72 72 6f 72 20 68 61 73 20  loc() error has 
1180: 6f 63 63 75 72 65 64 2c 0a 2a 2a 20 74 68 65 6e  occured,.** then
1190: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
11a0: 65 72 72 6f 72 2d 63 6f 64 65 20 28 74 68 65 20  error-code (the 
11b0: 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
11c0: 79 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  y sqlite3_errcod
11d0: 65 28 29 29 0a 2a 2a 20 69 73 20 73 65 74 20 74  e()).** is set t
11e0: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0a  o SQLITE_NOMEM..
11f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  */.int sqlite3Ap
1200: 69 45 78 69 74 28 73 71 6c 69 74 65 33 2a 20 64  iExit(sqlite3* d
1210: 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66  b, int rc){.  if
1220: 28 20 64 62 20 26 26 20 64 62 2d 3e 6d 61 6c 6c  ( db && db->mall
1230: 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  ocFailed ){.    
1240: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
1250: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30   SQLITE_NOMEM, 0
1260: 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  );.    db->mallo
1270: 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20  cFailed = 0;.   
1280: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
1290: 45 4d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  EM;.  }.  return
12a0: 20 72 63 20 26 20 28 64 62 20 3f 20 64 62 2d 3e   rc & (db ? db->
12b0: 65 72 72 4d 61 73 6b 20 3a 20 30 78 66 66 29 3b  errMask : 0xff);
12c0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
12d0: 45 5f 4d 45 4d 44 45 42 55 47 0a 2f 2a 0a 2a 2a  E_MEMDEBUG./*.**
12e0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 73   This function s
12f0: 65 74 73 20 61 20 66 6c 61 67 20 69 6e 20 74 68  ets a flag in th
1300: 65 20 74 68 72 65 61 64 2d 73 70 65 63 69 66 69  e thread-specifi
1310: 63 2d 64 61 74 61 20 73 74 72 75 63 74 75 72 65  c-data structure
1320: 20 74 68 61 74 20 77 69 6c 6c 0a 2a 2a 20 63 61   that will.** ca
1330: 75 73 65 20 61 6e 20 61 73 73 65 72 74 20 74 6f  use an assert to
1340: 20 66 61 69 6c 20 69 66 20 73 71 6c 69 74 65 4d   fail if sqliteM
1350: 61 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74  alloc() or sqlit
1360: 65 52 65 61 6c 6c 6f 63 28 29 20 69 73 20 63 61  eRealloc() is ca
1370: 6c 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 30 0a 76  lled..*/.#if 0.v
1380: 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
1390: 63 44 69 73 61 6c 6c 6f 77 28 29 7b 0a 23 69 66  cDisallow(){.#if
13a0: 20 30 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c   0.  assert( sql
13b0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69 73 61 6c  ite3_mallocDisal
13c0: 6c 6f 77 65 64 3e 3d 30 20 29 3b 0a 20 20 73 71  lowed>=0 );.  sq
13d0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69 73 61  lite3_mallocDisa
13e0: 6c 6c 6f 77 65 64 2b 2b 3b 0a 23 65 6e 64 69 66  llowed++;.#endif
13f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
1400: 75 6e 63 74 69 6f 6e 20 63 6c 65 61 72 73 20 74  unction clears t
1410: 68 65 20 66 6c 61 67 20 73 65 74 20 69 6e 20 74  he flag set in t
1420: 68 65 20 74 68 72 65 61 64 2d 73 70 65 63 69 66  he thread-specif
1430: 69 63 2d 64 61 74 61 20 73 74 72 75 63 74 75 72  ic-data structur
1440: 65 20 73 65 74 0a 2a 2a 20 62 79 20 73 71 6c 69  e set.** by sqli
1450: 74 65 33 4d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f  te3MallocDisallo
1460: 77 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  w()..*/.void sql
1470: 69 74 65 33 4d 61 6c 6c 6f 63 41 6c 6c 6f 77 28  ite3MallocAllow(
1480: 29 7b 0a 23 69 66 20 30 0a 20 20 61 73 73 65 72  ){.#if 0.  asser
1490: 74 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  t( sqlite3_mallo
14a0: 63 44 69 73 61 6c 6c 6f 77 65 64 3e 30 20 29 3b  cDisallowed>0 );
14b0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  .  sqlite3_mallo
14c0: 63 44 69 73 61 6c 6c 6f 77 65 64 2d 2d 3b 0a 23  cDisallowed--;.#
14d0: 65 6e 64 69 66 0a 7d 0a 23 65 6e 64 69 66 0a 23  endif.}.#endif.#
14e0: 65 6e 64 69 66 0a                                endif.