xref: /sqlite-3.40.0/src/malloc.c (revision 7fdb522c)
1 /*
2 ** 2001 September 15
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 ** Memory allocation functions used throughout sqlite.
14 **
15 ** $Id: malloc.c,v 1.31 2008/07/29 14:29:07 drh Exp $
16 */
17 #include "sqliteInt.h"
18 #include <stdarg.h>
19 #include <ctype.h>
20 
21 /*
22 ** This routine runs when the memory allocator sees that the
23 ** total memory allocation is about to exceed the soft heap
24 ** limit.
25 */
26 static void softHeapLimitEnforcer(
27   void *NotUsed,
28   sqlite3_int64 inUse,
29   int allocSize
30 ){
31   sqlite3_release_memory(allocSize);
32 }
33 
34 /*
35 ** Set the soft heap-size limit for the library. Passing a zero or
36 ** negative value indicates no limit.
37 */
38 void sqlite3_soft_heap_limit(int n){
39   sqlite3_uint64 iLimit;
40   int overage;
41   if( n<0 ){
42     iLimit = 0;
43   }else{
44     iLimit = n;
45   }
46   sqlite3_initialize();
47   if( iLimit>0 ){
48     sqlite3_memory_alarm(softHeapLimitEnforcer, 0, iLimit);
49   }else{
50     sqlite3_memory_alarm(0, 0, 0);
51   }
52   overage = sqlite3_memory_used() - n;
53   if( overage>0 ){
54     sqlite3_release_memory(overage);
55   }
56 }
57 
58 /*
59 ** Attempt to release up to n bytes of non-essential memory currently
60 ** held by SQLite. An example of non-essential memory is memory used to
61 ** cache database pages that are not currently in use.
62 */
63 int sqlite3_release_memory(int n){
64 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
65   int nRet = sqlite3VdbeReleaseMemory(n);
66   nRet += sqlite3PagerReleaseMemory(n-nRet);
67   return nRet;
68 #else
69   return SQLITE_OK;
70 #endif
71 }
72 
73 /*
74 ** State information local to the memory allocation subsystem.
75 */
76 static struct {
77   sqlite3_mutex *mutex;         /* Mutex to serialize access */
78 
79   /*
80   ** The alarm callback and its arguments.  The mem0.mutex lock will
81   ** be held while the callback is running.  Recursive calls into
82   ** the memory subsystem are allowed, but no new callbacks will be
83   ** issued.  The alarmBusy variable is set to prevent recursive
84   ** callbacks.
85   */
86   sqlite3_int64 alarmThreshold;
87   void (*alarmCallback)(void*, sqlite3_int64,int);
88   void *alarmArg;
89   int alarmBusy;
90 
91   /*
92   ** Pointers to the end of sqlite3Config.pScratch and
93   ** sqlite3Config.pPage to a block of memory that records
94   ** which pages are available.
95   */
96   u32 *aScratchFree;
97   u32 *aPageFree;
98 
99   /* Number of free pages for scratch and page-cache memory */
100   u32 nScratchFree;
101   u32 nPageFree;
102 } mem0;
103 
104 /*
105 ** Initialize the memory allocation subsystem.
106 */
107 int sqlite3MallocInit(void){
108   if( sqlite3Config.m.xMalloc==0 ){
109     sqlite3MemSetDefault();
110   }
111   memset(&mem0, 0, sizeof(mem0));
112   if( sqlite3Config.bCoreMutex ){
113     mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
114   }
115   if( sqlite3Config.pScratch && sqlite3Config.szScratch>=3000
116       && sqlite3Config.nScratch>0 ){
117     int i;
118     mem0.aScratchFree = (u32*)&((char*)sqlite3Config.pScratch)
119                   [sqlite3Config.szScratch*sqlite3Config.nScratch];
120     for(i=0; i<sqlite3Config.nScratch; i++){ mem0.aScratchFree[i] = i; }
121     mem0.nScratchFree = sqlite3Config.nScratch;
122   }else{
123     sqlite3Config.pScratch = 0;
124     sqlite3Config.szScratch = 0;
125   }
126   if( sqlite3Config.pPage && sqlite3Config.szPage>=512
127       && sqlite3Config.nPage>0 ){
128     int i;
129     mem0.aPageFree = (u32*)&((char*)sqlite3Config.pPage)
130                   [sqlite3Config.szPage*sqlite3Config.nPage];
131     for(i=0; i<sqlite3Config.nPage; i++){ mem0.aPageFree[i] = i; }
132     mem0.nPageFree = sqlite3Config.nPage;
133   }else{
134     sqlite3Config.pPage = 0;
135     sqlite3Config.szPage = 0;
136   }
137   return sqlite3Config.m.xInit(sqlite3Config.m.pAppData);
138 }
139 
140 /*
141 ** Deinitialize the memory allocation subsystem.
142 */
143 void sqlite3MallocEnd(void){
144   sqlite3Config.m.xShutdown(sqlite3Config.m.pAppData);
145   memset(&mem0, 0, sizeof(mem0));
146 }
147 
148 /*
149 ** Return the amount of memory currently checked out.
150 */
151 sqlite3_int64 sqlite3_memory_used(void){
152   int n, mx;
153   sqlite3_int64 res;
154   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0);
155   res = (sqlite3_int64)n;  /* Work around bug in Borland C. Ticket #3216 */
156   return res;
157 }
158 
159 /*
160 ** Return the maximum amount of memory that has ever been
161 ** checked out since either the beginning of this process
162 ** or since the most recent reset.
163 */
164 sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
165   int n, mx;
166   sqlite3_int64 res;
167   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
168   res = (sqlite3_int64)mx;  /* Work around bug in Borland C. Ticket #3216 */
169   return res;
170 }
171 
172 /*
173 ** Change the alarm callback
174 */
175 int sqlite3_memory_alarm(
176   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
177   void *pArg,
178   sqlite3_int64 iThreshold
179 ){
180   sqlite3_mutex_enter(mem0.mutex);
181   mem0.alarmCallback = xCallback;
182   mem0.alarmArg = pArg;
183   mem0.alarmThreshold = iThreshold;
184   sqlite3_mutex_leave(mem0.mutex);
185   return SQLITE_OK;
186 }
187 
188 /*
189 ** Trigger the alarm
190 */
191 static void sqlite3MallocAlarm(int nByte){
192   void (*xCallback)(void*,sqlite3_int64,int);
193   sqlite3_int64 nowUsed;
194   void *pArg;
195   if( mem0.alarmCallback==0 || mem0.alarmBusy  ) return;
196   mem0.alarmBusy = 1;
197   xCallback = mem0.alarmCallback;
198   nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
199   pArg = mem0.alarmArg;
200   sqlite3_mutex_leave(mem0.mutex);
201   xCallback(pArg, nowUsed, nByte);
202   sqlite3_mutex_enter(mem0.mutex);
203   mem0.alarmBusy = 0;
204 }
205 
206 /*
207 ** Do a memory allocation with statistics and alarms.  Assume the
208 ** lock is already held.
209 */
210 static int mallocWithAlarm(int n, void **pp){
211   int nFull;
212   void *p;
213   assert( sqlite3_mutex_held(mem0.mutex) );
214   nFull = sqlite3Config.m.xRoundup(n);
215   sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
216   if( mem0.alarmCallback!=0 ){
217     int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
218     if( nUsed+nFull >= mem0.alarmThreshold ){
219       sqlite3MallocAlarm(nFull);
220     }
221   }
222   p = sqlite3Config.m.xMalloc(nFull);
223   if( p==0 && mem0.alarmCallback ){
224     sqlite3MallocAlarm(nFull);
225     p = sqlite3Config.m.xMalloc(nFull);
226   }
227   if( p ){
228     nFull = sqlite3MallocSize(p);
229     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
230   }
231   *pp = p;
232   return nFull;
233 }
234 
235 /*
236 ** Allocate memory.  This routine is like sqlite3_malloc() except that it
237 ** assumes the memory subsystem has already been initialized.
238 */
239 void *sqlite3Malloc(int n){
240   void *p;
241   if( n<=0 ){
242     p = 0;
243   }else if( sqlite3Config.bMemstat ){
244     sqlite3_mutex_enter(mem0.mutex);
245     mallocWithAlarm(n, &p);
246     sqlite3_mutex_leave(mem0.mutex);
247   }else{
248     p = sqlite3Config.m.xMalloc(n);
249   }
250   return p;
251 }
252 
253 /*
254 ** This version of the memory allocation is for use by the application.
255 ** First make sure the memory subsystem is initialized, then do the
256 ** allocation.
257 */
258 void *sqlite3_malloc(int n){
259 #ifndef SQLITE_OMIT_AUTOINIT
260   if( sqlite3_initialize() ) return 0;
261 #endif
262   return sqlite3Malloc(n);
263 }
264 
265 /*
266 ** Each thread may only have a single outstanding allocation from
267 ** xScratchMalloc().  We verify this constraint in the single-threaded
268 ** case by setting scratchAllocOut to 1 when an allocation
269 ** is outstanding clearing it when the allocation is freed.
270 */
271 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
272 static int scratchAllocOut = 0;
273 #endif
274 
275 
276 /*
277 ** Allocate memory that is to be used and released right away.
278 ** This routine is similar to alloca() in that it is not intended
279 ** for situations where the memory might be held long-term.  This
280 ** routine is intended to get memory to old large transient data
281 ** structures that would not normally fit on the stack of an
282 ** embedded processor.
283 */
284 void *sqlite3ScratchMalloc(int n){
285   void *p;
286   assert( n>0 );
287 
288 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
289   /* Verify that no more than one scratch allocation per thread
290   ** is outstanding at one time.  (This is only checked in the
291   ** single-threaded case since checking in the multi-threaded case
292   ** would be much more complicated.) */
293   assert( scratchAllocOut==0 );
294 #endif
295 
296   if( sqlite3Config.szScratch<n ){
297     goto scratch_overflow;
298   }else{
299     sqlite3_mutex_enter(mem0.mutex);
300     if( mem0.nScratchFree==0 ){
301       sqlite3_mutex_leave(mem0.mutex);
302       goto scratch_overflow;
303     }else{
304       int i;
305       i = mem0.aScratchFree[--mem0.nScratchFree];
306       sqlite3_mutex_leave(mem0.mutex);
307       i *= sqlite3Config.szScratch;
308       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
309       p = (void*)&((char*)sqlite3Config.pScratch)[i];
310     }
311   }
312 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
313   scratchAllocOut = p!=0;
314 #endif
315 
316   return p;
317 
318 scratch_overflow:
319   if( sqlite3Config.bMemstat ){
320     sqlite3_mutex_enter(mem0.mutex);
321     n = mallocWithAlarm(n, &p);
322     if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
323     sqlite3_mutex_leave(mem0.mutex);
324   }else{
325     p = sqlite3Config.m.xMalloc(n);
326   }
327 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
328   scratchAllocOut = p!=0;
329 #endif
330   return p;
331 }
332 void sqlite3ScratchFree(void *p){
333   if( p ){
334 
335 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
336     /* Verify that no more than one scratch allocation per thread
337     ** is outstanding at one time.  (This is only checked in the
338     ** single-threaded case since checking in the multi-threaded case
339     ** would be much more complicated.) */
340     assert( scratchAllocOut==1 );
341     scratchAllocOut = 0;
342 #endif
343 
344     if( sqlite3Config.pScratch==0
345            || p<sqlite3Config.pScratch
346            || p>=(void*)mem0.aScratchFree ){
347       if( sqlite3Config.bMemstat ){
348         int iSize = sqlite3MallocSize(p);
349         sqlite3_mutex_enter(mem0.mutex);
350         sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
351         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
352         sqlite3Config.m.xFree(p);
353         sqlite3_mutex_leave(mem0.mutex);
354       }else{
355         sqlite3Config.m.xFree(p);
356       }
357     }else{
358       int i;
359       i = (u8 *)p - (u8 *)sqlite3Config.pScratch;
360       i /= sqlite3Config.szScratch;
361       assert( i>=0 && i<sqlite3Config.nScratch );
362       sqlite3_mutex_enter(mem0.mutex);
363       assert( mem0.nScratchFree<sqlite3Config.nScratch );
364       mem0.aScratchFree[mem0.nScratchFree++] = i;
365       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
366       sqlite3_mutex_leave(mem0.mutex);
367     }
368   }
369 }
370 
371 /*
372 ** Allocate memory to be used by the page cache.  Make use of the
373 ** memory buffer provided by SQLITE_CONFIG_PAGECACHE if there is one
374 ** and that memory is of the right size and is not completely
375 ** consumed.  Otherwise, failover to sqlite3Malloc().
376 */
377 void *sqlite3PageMalloc(int n){
378   void *p;
379   assert( n>0 );
380   assert( (n & (n-1))==0 );
381   assert( n>=512 && n<=32768 );
382 
383   if( sqlite3Config.szPage<n ){
384     goto page_overflow;
385   }else{
386     sqlite3_mutex_enter(mem0.mutex);
387     if( mem0.nPageFree==0 ){
388       sqlite3_mutex_leave(mem0.mutex);
389       goto page_overflow;
390     }else{
391       int i;
392       i = mem0.aPageFree[--mem0.nPageFree];
393       sqlite3_mutex_leave(mem0.mutex);
394       i *= sqlite3Config.szPage;
395       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
396       p = (void*)&((char*)sqlite3Config.pPage)[i];
397     }
398   }
399   return p;
400 
401 page_overflow:
402   if( sqlite3Config.bMemstat ){
403     sqlite3_mutex_enter(mem0.mutex);
404     n = mallocWithAlarm(n, &p);
405     if( p ) sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, n);
406     sqlite3_mutex_leave(mem0.mutex);
407   }else{
408     p = sqlite3Config.m.xMalloc(n);
409   }
410   return p;
411 }
412 void sqlite3PageFree(void *p){
413   if( p ){
414     if( sqlite3Config.pPage==0
415            || p<sqlite3Config.pPage
416            || p>=(void*)mem0.aPageFree ){
417       /* In this case, the page allocation was obtained from a regular
418       ** call to sqlite3_mem_methods.xMalloc() (a page-cache-memory
419       ** "overflow"). Free the block with sqlite3_mem_methods.xFree().
420       */
421       if( sqlite3Config.bMemstat ){
422         int iSize = sqlite3MallocSize(p);
423         sqlite3_mutex_enter(mem0.mutex);
424         sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -iSize);
425         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
426         sqlite3Config.m.xFree(p);
427         sqlite3_mutex_leave(mem0.mutex);
428       }else{
429         sqlite3Config.m.xFree(p);
430       }
431     }else{
432       /* The page allocation was allocated from the sqlite3Config.pPage
433       ** buffer. In this case all that is add the index of the page in
434       ** the sqlite3Config.pPage array to the set of free indexes stored
435       ** in the mem0.aPageFree[] array.
436       */
437       int i;
438       i = (u8 *)p - (u8 *)sqlite3Config.pPage;
439       i /= sqlite3Config.szPage;
440       assert( i>=0 && i<sqlite3Config.nPage );
441       sqlite3_mutex_enter(mem0.mutex);
442       assert( mem0.nPageFree<sqlite3Config.nPage );
443       mem0.aPageFree[mem0.nPageFree++] = i;
444       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
445       sqlite3_mutex_leave(mem0.mutex);
446 #if !defined(NDEBUG) && 0
447       /* Assert that a duplicate was not just inserted into aPageFree[]. */
448       for(i=0; i<mem0.nPageFree-1; i++){
449         assert( mem0.aPageFree[i]!=mem0.aPageFree[mem0.nPageFree-1] );
450       }
451 #endif
452     }
453   }
454 }
455 
456 /*
457 ** TRUE if p is a lookaside memory allocation from db
458 */
459 static int isLookaside(sqlite3 *db, void *p){
460   return db && p && p>=db->lookaside.pStart && p<db->lookaside.pEnd;
461 }
462 
463 /*
464 ** Return the size of a memory allocation previously obtained from
465 ** sqlite3Malloc() or sqlite3_malloc().
466 */
467 int sqlite3MallocSize(void *p){
468   return sqlite3Config.m.xSize(p);
469 }
470 int sqlite3DbMallocSize(sqlite3 *db, void *p){
471   if( isLookaside(db, p) ){
472     return db->lookaside.sz;
473   }else{
474     return sqlite3Config.m.xSize(p);
475   }
476 }
477 
478 /*
479 ** Free memory previously obtained from sqlite3Malloc().
480 */
481 void sqlite3_free(void *p){
482   if( p==0 ) return;
483   if( sqlite3Config.bMemstat ){
484     sqlite3_mutex_enter(mem0.mutex);
485     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
486     sqlite3Config.m.xFree(p);
487     sqlite3_mutex_leave(mem0.mutex);
488   }else{
489     sqlite3Config.m.xFree(p);
490   }
491 }
492 
493 /*
494 ** Free memory that might be associated with a particular database
495 ** connection.
496 */
497 void sqlite3DbFree(sqlite3 *db, void *p){
498   if( isLookaside(db, p) ){
499     LookasideSlot *pBuf = (LookasideSlot*)p;
500     pBuf->pNext = db->lookaside.pFree;
501     db->lookaside.pFree = pBuf;
502     db->lookaside.nOut--;
503   }else{
504     sqlite3_free(p);
505   }
506 }
507 
508 /*
509 ** Change the size of an existing memory allocation
510 */
511 void *sqlite3Realloc(void *pOld, int nBytes){
512   int nOld, nNew;
513   void *pNew;
514   if( pOld==0 ){
515     return sqlite3Malloc(nBytes);
516   }
517   if( nBytes<=0 ){
518     sqlite3_free(pOld);
519     return 0;
520   }
521   nOld = sqlite3MallocSize(pOld);
522   if( sqlite3Config.bMemstat ){
523     sqlite3_mutex_enter(mem0.mutex);
524     sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
525     nNew = sqlite3Config.m.xRoundup(nBytes);
526     if( nOld==nNew ){
527       pNew = pOld;
528     }else{
529       if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nNew-nOld >=
530             mem0.alarmThreshold ){
531         sqlite3MallocAlarm(nNew-nOld);
532       }
533       pNew = sqlite3Config.m.xRealloc(pOld, nNew);
534       if( pNew==0 && mem0.alarmCallback ){
535         sqlite3MallocAlarm(nBytes);
536         pNew = sqlite3Config.m.xRealloc(pOld, nNew);
537       }
538       if( pNew ){
539         nNew = sqlite3MallocSize(pNew);
540         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
541       }
542     }
543     sqlite3_mutex_leave(mem0.mutex);
544   }else{
545     pNew = sqlite3Config.m.xRealloc(pOld, nBytes);
546   }
547   return pNew;
548 }
549 
550 /*
551 ** The public interface to sqlite3Realloc.  Make sure that the memory
552 ** subsystem is initialized prior to invoking sqliteRealloc.
553 */
554 void *sqlite3_realloc(void *pOld, int n){
555 #ifndef SQLITE_OMIT_AUTOINIT
556   if( sqlite3_initialize() ) return 0;
557 #endif
558   return sqlite3Realloc(pOld, n);
559 }
560 
561 
562 /*
563 ** Allocate and zero memory.
564 */
565 void *sqlite3MallocZero(int n){
566   void *p = sqlite3Malloc(n);
567   if( p ){
568     memset(p, 0, n);
569   }
570   return p;
571 }
572 
573 /*
574 ** Allocate and zero memory.  If the allocation fails, make
575 ** the mallocFailed flag in the connection pointer.
576 */
577 void *sqlite3DbMallocZero(sqlite3 *db, int n){
578   void *p = sqlite3DbMallocRaw(db, n);
579   if( p ){
580     memset(p, 0, n);
581   }
582   return p;
583 }
584 
585 /*
586 ** Allocate and zero memory.  If the allocation fails, make
587 ** the mallocFailed flag in the connection pointer.
588 */
589 void *sqlite3DbMallocRaw(sqlite3 *db, int n){
590   void *p;
591   if( db ){
592     LookasideSlot *pBuf;
593     if( db->mallocFailed ){
594       return 0;
595     }
596     if( db->lookaside.bEnabled && n<=db->lookaside.sz
597          && (pBuf = db->lookaside.pFree)!=0 ){
598       db->lookaside.pFree = pBuf->pNext;
599       db->lookaside.nOut++;
600       if( db->lookaside.nOut>db->lookaside.mxOut ){
601         db->lookaside.mxOut = db->lookaside.nOut;
602       }
603       return (void*)pBuf;
604     }
605   }
606   p = sqlite3Malloc(n);
607   if( !p && db ){
608     db->mallocFailed = 1;
609   }
610   return p;
611 }
612 
613 /*
614 ** Resize the block of memory pointed to by p to n bytes. If the
615 ** resize fails, set the mallocFailed flag in the connection object.
616 */
617 void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
618   void *pNew = 0;
619   if( db->mallocFailed==0 ){
620     if( p==0 ){
621       return sqlite3DbMallocRaw(db, n);
622     }
623     if( isLookaside(db, p) ){
624       if( n<=db->lookaside.sz ){
625         return p;
626       }
627       pNew = sqlite3DbMallocRaw(db, n);
628       if( pNew ){
629         memcpy(pNew, p, db->lookaside.sz);
630         sqlite3DbFree(db, p);
631       }
632     }else{
633       pNew = sqlite3_realloc(p, n);
634       if( !pNew ){
635         db->mallocFailed = 1;
636       }
637     }
638   }
639   return pNew;
640 }
641 
642 /*
643 ** Attempt to reallocate p.  If the reallocation fails, then free p
644 ** and set the mallocFailed flag in the database connection.
645 */
646 void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
647   void *pNew;
648   pNew = sqlite3DbRealloc(db, p, n);
649   if( !pNew ){
650     sqlite3DbFree(db, p);
651   }
652   return pNew;
653 }
654 
655 /*
656 ** Make a copy of a string in memory obtained from sqliteMalloc(). These
657 ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
658 ** is because when memory debugging is turned on, these two functions are
659 ** called via macros that record the current file and line number in the
660 ** ThreadData structure.
661 */
662 char *sqlite3DbStrDup(sqlite3 *db, const char *z){
663   char *zNew;
664   size_t n;
665   if( z==0 ){
666     return 0;
667   }
668   n = strlen(z)+1;
669   assert( (n&0x7fffffff)==n );
670   zNew = sqlite3DbMallocRaw(db, (int)n);
671   if( zNew ){
672     memcpy(zNew, z, n);
673   }
674   return zNew;
675 }
676 char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
677   char *zNew;
678   if( z==0 ){
679     return 0;
680   }
681   assert( (n&0x7fffffff)==n );
682   zNew = sqlite3DbMallocRaw(db, n+1);
683   if( zNew ){
684     memcpy(zNew, z, n);
685     zNew[n] = 0;
686   }
687   return zNew;
688 }
689 
690 /*
691 ** Create a string from the zFromat argument and the va_list that follows.
692 ** Store the string in memory obtained from sqliteMalloc() and make *pz
693 ** point to that string.
694 */
695 void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat, ...){
696   va_list ap;
697   char *z;
698 
699   va_start(ap, zFormat);
700   z = sqlite3VMPrintf(db, zFormat, ap);
701   va_end(ap);
702   sqlite3DbFree(db, *pz);
703   *pz = z;
704 }
705 
706 
707 /*
708 ** This function must be called before exiting any API function (i.e.
709 ** returning control to the user) that has called sqlite3_malloc or
710 ** sqlite3_realloc.
711 **
712 ** The returned value is normally a copy of the second argument to this
713 ** function. However, if a malloc() failure has occured since the previous
714 ** invocation SQLITE_NOMEM is returned instead.
715 **
716 ** If the first argument, db, is not NULL and a malloc() error has occured,
717 ** then the connection error-code (the value returned by sqlite3_errcode())
718 ** is set to SQLITE_NOMEM.
719 */
720 int sqlite3ApiExit(sqlite3* db, int rc){
721   /* If the db handle is not NULL, then we must hold the connection handle
722   ** mutex here. Otherwise the read (and possible write) of db->mallocFailed
723   ** is unsafe, as is the call to sqlite3Error().
724   */
725   assert( !db || sqlite3_mutex_held(db->mutex) );
726   if( db && db->mallocFailed ){
727     sqlite3Error(db, SQLITE_NOMEM, 0);
728     db->mallocFailed = 0;
729     rc = SQLITE_NOMEM;
730   }
731   return rc & (db ? db->errMask : 0xff);
732 }
733