xref: /sqlite-3.40.0/src/malloc.c (revision facf0307)
1a3152895Sdrh /*
2a3152895Sdrh ** 2001 September 15
3a3152895Sdrh **
4a3152895Sdrh ** The author disclaims copyright to this source code.  In place of
5a3152895Sdrh ** a legal notice, here is a blessing:
6a3152895Sdrh **
7a3152895Sdrh **    May you do good and not evil.
8a3152895Sdrh **    May you find forgiveness for yourself and forgive others.
9a3152895Sdrh **    May you share freely, never taking more than you give.
10a3152895Sdrh **
11a3152895Sdrh *************************************************************************
12fec00eabSdrh **
13a3152895Sdrh ** Memory allocation functions used throughout sqlite.
14a3152895Sdrh **
15*facf0307Sdrh ** $Id: malloc.c,v 1.18 2008/06/17 15:12:01 drh Exp $
16a3152895Sdrh */
17a3152895Sdrh #include "sqliteInt.h"
18a3152895Sdrh #include <stdarg.h>
19a3152895Sdrh #include <ctype.h>
20a3152895Sdrh 
21a3152895Sdrh /*
22b21c8cd4Sdrh ** This routine runs when the memory allocator sees that the
23b21c8cd4Sdrh ** total memory allocation is about to exceed the soft heap
24b21c8cd4Sdrh ** limit.
25b21c8cd4Sdrh */
26b21c8cd4Sdrh static void softHeapLimitEnforcer(
27b21c8cd4Sdrh   void *NotUsed,
28153c62c4Sdrh   sqlite3_int64 inUse,
29153c62c4Sdrh   int allocSize
30b21c8cd4Sdrh ){
31b21c8cd4Sdrh   sqlite3_release_memory(allocSize);
32b21c8cd4Sdrh }
33b21c8cd4Sdrh 
34b21c8cd4Sdrh /*
35b21c8cd4Sdrh ** Set the soft heap-size limit for the current thread. Passing a
36b21c8cd4Sdrh ** zero or negative value indicates no limit.
37a3152895Sdrh */
38a3152895Sdrh void sqlite3_soft_heap_limit(int n){
39b21c8cd4Sdrh   sqlite3_uint64 iLimit;
40b21c8cd4Sdrh   int overage;
41b21c8cd4Sdrh   if( n<0 ){
42b21c8cd4Sdrh     iLimit = 0;
43b21c8cd4Sdrh   }else{
44b21c8cd4Sdrh     iLimit = n;
45a3152895Sdrh   }
46b21c8cd4Sdrh   if( iLimit>0 ){
47b21c8cd4Sdrh     sqlite3_memory_alarm(softHeapLimitEnforcer, 0, iLimit);
48b21c8cd4Sdrh   }else{
49b21c8cd4Sdrh     sqlite3_memory_alarm(0, 0, 0);
50b21c8cd4Sdrh   }
51b21c8cd4Sdrh   overage = sqlite3_memory_used() - n;
52b21c8cd4Sdrh   if( overage>0 ){
53b21c8cd4Sdrh     sqlite3_release_memory(overage);
54b21c8cd4Sdrh   }
55a3152895Sdrh }
56a3152895Sdrh 
57a3152895Sdrh /*
58a3152895Sdrh ** Release memory held by SQLite instances created by the current thread.
59a3152895Sdrh */
60a3152895Sdrh int sqlite3_release_memory(int n){
6186f8c197Sdrh #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
62dfb316d4Sdanielk1977   int nRet = sqlite3VdbeReleaseMemory(n);
63dfb316d4Sdanielk1977   nRet += sqlite3PagerReleaseMemory(n-nRet);
64dfb316d4Sdanielk1977   return nRet;
651e536953Sdanielk1977 #else
661e536953Sdanielk1977   return SQLITE_OK;
671e536953Sdanielk1977 #endif
68a3152895Sdrh }
69a3152895Sdrh 
70fec00eabSdrh /*
71fec00eabSdrh ** State information local to the memory allocation subsystem.
72fec00eabSdrh */
73fec00eabSdrh static struct {
74fec00eabSdrh   sqlite3_mutex *mutex;         /* Mutex to serialize access */
75fec00eabSdrh 
76fec00eabSdrh   /*
77fec00eabSdrh   ** The alarm callback and its arguments.  The mem0.mutex lock will
78fec00eabSdrh   ** be held while the callback is running.  Recursive calls into
79fec00eabSdrh   ** the memory subsystem are allowed, but no new callbacks will be
80fec00eabSdrh   ** issued.  The alarmBusy variable is set to prevent recursive
81fec00eabSdrh   ** callbacks.
82fec00eabSdrh   */
83fec00eabSdrh   sqlite3_int64 alarmThreshold;
84fec00eabSdrh   void (*alarmCallback)(void*, sqlite3_int64,int);
85fec00eabSdrh   void *alarmArg;
86fec00eabSdrh   int alarmBusy;
87fec00eabSdrh 
88fec00eabSdrh   /*
89fec00eabSdrh   ** Performance statistics
90fec00eabSdrh   */
91fec00eabSdrh   sqlite3_int64 nowUsed;  /* Main memory currently in use */
92fec00eabSdrh   sqlite3_int64 mxUsed;   /* Highwater mark for nowUsed */
93e5ae5735Sdrh   int mxReq;              /* Max request size for ordinary mallocs */
94*facf0307Sdrh   int mxScratchReq;       /* Max request size for xTemp mallocs */
95fec00eabSdrh } mem0;
96fec00eabSdrh 
97fec00eabSdrh /*
98fec00eabSdrh ** Initialize the memory allocation subsystem.
99fec00eabSdrh */
100fec00eabSdrh int sqlite3MallocInit(void){
101fec00eabSdrh   if( sqlite3Config.m.xMalloc==0 ){
102fec00eabSdrh     sqlite3MemSetDefault();
103fec00eabSdrh   }
104fec00eabSdrh   memset(&mem0, 0, sizeof(mem0));
105fec00eabSdrh   if( sqlite3Config.bMemstat && sqlite3Config.bCoreMutex ){
106fec00eabSdrh     mem0.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MEM);
107fec00eabSdrh   }
108fec00eabSdrh   return sqlite3Config.m.xInit(sqlite3Config.m.pAppData);
109fec00eabSdrh }
110fec00eabSdrh 
111fec00eabSdrh /*
112fec00eabSdrh ** Deinitialize the memory allocation subsystem.
113fec00eabSdrh */
114fec00eabSdrh void sqlite3MallocEnd(void){
115fec00eabSdrh    sqlite3Config.m.xShutdown(sqlite3Config.m.pAppData);
116fec00eabSdrh }
117fec00eabSdrh 
118fec00eabSdrh /*
119fec00eabSdrh ** Return the amount of memory currently checked out.
120fec00eabSdrh */
121fec00eabSdrh sqlite3_int64 sqlite3_memory_used(void){
122fec00eabSdrh   sqlite3_int64 n;
123fec00eabSdrh   sqlite3_mutex_enter(mem0.mutex);
124fec00eabSdrh   n = mem0.nowUsed;
125fec00eabSdrh   sqlite3_mutex_leave(mem0.mutex);
126fec00eabSdrh   return n;
127fec00eabSdrh }
128fec00eabSdrh 
129fec00eabSdrh /*
130fec00eabSdrh ** Return the maximum amount of memory that has ever been
131fec00eabSdrh ** checked out since either the beginning of this process
132fec00eabSdrh ** or since the most recent reset.
133fec00eabSdrh */
134fec00eabSdrh sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
135fec00eabSdrh   sqlite3_int64 n;
136fec00eabSdrh   sqlite3_mutex_enter(mem0.mutex);
137fec00eabSdrh   n = mem0.mxUsed;
138fec00eabSdrh   if( resetFlag ){
139fec00eabSdrh     mem0.mxUsed = mem0.nowUsed;
140fec00eabSdrh   }
141fec00eabSdrh   sqlite3_mutex_leave(mem0.mutex);
142fec00eabSdrh   return n;
143fec00eabSdrh }
144fec00eabSdrh 
145fec00eabSdrh /*
146fec00eabSdrh ** Change the alarm callback
147fec00eabSdrh */
148fec00eabSdrh int sqlite3_memory_alarm(
149fec00eabSdrh   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
150fec00eabSdrh   void *pArg,
151fec00eabSdrh   sqlite3_int64 iThreshold
152fec00eabSdrh ){
153fec00eabSdrh   sqlite3_mutex_enter(mem0.mutex);
154fec00eabSdrh   mem0.alarmCallback = xCallback;
155fec00eabSdrh   mem0.alarmArg = pArg;
156fec00eabSdrh   mem0.alarmThreshold = iThreshold;
157fec00eabSdrh   sqlite3_mutex_leave(mem0.mutex);
158fec00eabSdrh   return SQLITE_OK;
159fec00eabSdrh }
160fec00eabSdrh 
161fec00eabSdrh /*
162fec00eabSdrh ** Trigger the alarm
163fec00eabSdrh */
164fec00eabSdrh static void sqlite3MallocAlarm(int nByte){
165fec00eabSdrh   void (*xCallback)(void*,sqlite3_int64,int);
166fec00eabSdrh   sqlite3_int64 nowUsed;
167fec00eabSdrh   void *pArg;
168fec00eabSdrh   if( mem0.alarmCallback==0 || mem0.alarmBusy  ) return;
169fec00eabSdrh   mem0.alarmBusy = 1;
170fec00eabSdrh   xCallback = mem0.alarmCallback;
171fec00eabSdrh   nowUsed = mem0.nowUsed;
172fec00eabSdrh   pArg = mem0.alarmArg;
173fec00eabSdrh   sqlite3_mutex_leave(mem0.mutex);
174fec00eabSdrh   xCallback(pArg, nowUsed, nByte);
175fec00eabSdrh   sqlite3_mutex_enter(mem0.mutex);
176fec00eabSdrh   mem0.alarmBusy = 0;
177fec00eabSdrh }
178fec00eabSdrh 
179fec00eabSdrh 
180fec00eabSdrh /*
181fec00eabSdrh ** Allocate memory.  This routine is like sqlite3_malloc() except that it
182fec00eabSdrh ** assumes the memory subsystem has already been initialized.
183fec00eabSdrh */
184fec00eabSdrh void *sqlite3Malloc(int n){
185fec00eabSdrh   void *p;
186fec00eabSdrh   int nFull;
187fec00eabSdrh   if( n<=0 ){
188fec00eabSdrh     return 0;
189fec00eabSdrh   }else if( sqlite3Config.bMemstat ){
190fec00eabSdrh     nFull = sqlite3Config.m.xRoundup(n);
191fec00eabSdrh     sqlite3_mutex_enter(mem0.mutex);
192fec00eabSdrh     if( n>mem0.mxReq ) mem0.mxReq = n;
193fec00eabSdrh     if( mem0.alarmCallback!=0 && mem0.nowUsed+nFull>=mem0.alarmThreshold ){
194fec00eabSdrh       sqlite3MallocAlarm(nFull);
195fec00eabSdrh     }
196fec00eabSdrh     if( sqlite3FaultStep(SQLITE_FAULTINJECTOR_MALLOC) ){
197fec00eabSdrh       p = 0;
198fec00eabSdrh     }else{
199fec00eabSdrh       p = sqlite3Config.m.xMalloc(nFull);
200fec00eabSdrh       if( p==0 ){
201fec00eabSdrh         sqlite3MallocAlarm(nFull);
202fec00eabSdrh         p = malloc(nFull);
203fec00eabSdrh       }
204fec00eabSdrh     }
205fec00eabSdrh     if( p ){
206fec00eabSdrh       mem0.nowUsed += nFull;
207fec00eabSdrh       if( mem0.nowUsed>mem0.mxUsed ){
208fec00eabSdrh         mem0.mxUsed = mem0.nowUsed;
209fec00eabSdrh       }
210fec00eabSdrh     }
211fec00eabSdrh     sqlite3_mutex_leave(mem0.mutex);
212fec00eabSdrh   }else{
213fec00eabSdrh     p = sqlite3Config.m.xMalloc(n);
214fec00eabSdrh   }
215fec00eabSdrh   return p;
216fec00eabSdrh }
217fec00eabSdrh 
218fec00eabSdrh /*
219fec00eabSdrh ** This version of the memory allocation is for use by the application.
220fec00eabSdrh ** First make sure the memory subsystem is initialized, then do the
221fec00eabSdrh ** allocation.
222fec00eabSdrh */
223fec00eabSdrh void *sqlite3_malloc(int n){
224fec00eabSdrh #ifndef SQLITE_OMIT_AUTOINIT
225fec00eabSdrh   if( sqlite3_initialize() ) return 0;
226fec00eabSdrh #endif
227fec00eabSdrh   return sqlite3Malloc(n);
228fec00eabSdrh }
229fec00eabSdrh 
230fec00eabSdrh /*
231e5ae5735Sdrh ** Each thread may only have a single outstanding allocation from
232*facf0307Sdrh ** xScratchMalloc().  We verify this constraint in the single-threaded
233*facf0307Sdrh ** case by setting scratchAllocOut to 1 when an allocation
234e5ae5735Sdrh ** is outstanding clearing it when the allocation is freed.
235e5ae5735Sdrh */
236e5ae5735Sdrh #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
237*facf0307Sdrh static int scratchAllocOut = 0;
238e5ae5735Sdrh #endif
239e5ae5735Sdrh 
240e5ae5735Sdrh 
241e5ae5735Sdrh /*
242e5ae5735Sdrh ** Allocate memory that is to be used and released right away.
243e5ae5735Sdrh ** This routine is similar to alloca() in that it is not intended
244e5ae5735Sdrh ** for situations where the memory might be held long-term.  This
245e5ae5735Sdrh ** routine is intended to get memory to old large transient data
246e5ae5735Sdrh ** structures that would not normally fit on the stack of an
247e5ae5735Sdrh ** embedded processor.
248e5ae5735Sdrh */
249*facf0307Sdrh void *sqlite3ScratchMalloc(int n){
250e5ae5735Sdrh   void *p;
251e5ae5735Sdrh   assert( n>0 );
252e5ae5735Sdrh   if( sqlite3FaultStep(SQLITE_FAULTINJECTOR_MALLOC) ){
253e5ae5735Sdrh     return 0;
254e5ae5735Sdrh   }
255e5ae5735Sdrh #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
256*facf0307Sdrh   assert( scratchAllocOut==0 );
257*facf0307Sdrh   scratchAllocOut = 1;
258e5ae5735Sdrh #endif
259e5ae5735Sdrh   if( sqlite3Config.bMemstat ){
260e5ae5735Sdrh     sqlite3_mutex_enter(mem0.mutex);
261*facf0307Sdrh     if( n>mem0.mxScratchReq ) mem0.mxScratchReq = n;
262*facf0307Sdrh     p = sqlite3Config.m.xMalloc(n);
263e5ae5735Sdrh     sqlite3_mutex_leave(mem0.mutex);
264e5ae5735Sdrh   }else{
265*facf0307Sdrh     p = sqlite3Config.m.xMalloc(n);
266e5ae5735Sdrh   }
267e5ae5735Sdrh   return p;
268e5ae5735Sdrh }
269*facf0307Sdrh void sqlite3ScratchFree(void *p){
270e5ae5735Sdrh   if( p ){
271e5ae5735Sdrh #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
272*facf0307Sdrh     assert( scratchAllocOut==1 );
273*facf0307Sdrh     scratchAllocOut = 0;
274e5ae5735Sdrh #endif
275*facf0307Sdrh     sqlite3Config.m.xFree(p);
276e5ae5735Sdrh   }
277e5ae5735Sdrh }
278e5ae5735Sdrh 
279e5ae5735Sdrh /*
280*facf0307Sdrh ** Place holders for the page-cache memory allocator.
281*facf0307Sdrh */
282*facf0307Sdrh void *sqlite3PageMalloc(int iSize){
283*facf0307Sdrh   return sqlite3Malloc(iSize);
284*facf0307Sdrh }
285*facf0307Sdrh void sqlite3PageFree(void *pOld){
286*facf0307Sdrh   sqlite3_free(pOld);
287*facf0307Sdrh }
288*facf0307Sdrh 
289*facf0307Sdrh /*
290fec00eabSdrh ** Return the size of a memory allocation previously obtained from
291fec00eabSdrh ** sqlite3Malloc() or sqlite3_malloc().
292fec00eabSdrh */
293fec00eabSdrh int sqlite3MallocSize(void *p){
294fec00eabSdrh   return sqlite3Config.m.xSize(p);
295fec00eabSdrh }
296fec00eabSdrh 
297fec00eabSdrh /*
298fec00eabSdrh ** Free memory previously obtained from sqlite3Malloc().
299fec00eabSdrh */
300fec00eabSdrh void sqlite3_free(void *p){
301fec00eabSdrh   if( p==0 ) return;
302fec00eabSdrh   if( sqlite3Config.bMemstat ){
303fec00eabSdrh     sqlite3_mutex_enter(mem0.mutex);
304fec00eabSdrh     mem0.nowUsed -= sqlite3MallocSize(p);
305fec00eabSdrh     sqlite3Config.m.xFree(p);
306fec00eabSdrh     sqlite3_mutex_leave(mem0.mutex);
307fec00eabSdrh   }else{
308fec00eabSdrh     sqlite3Config.m.xFree(p);
309fec00eabSdrh   }
310fec00eabSdrh }
311fec00eabSdrh 
312fec00eabSdrh /*
313fec00eabSdrh ** Change the size of an existing memory allocation
314fec00eabSdrh */
315fec00eabSdrh void *sqlite3Realloc(void *pOld, int nBytes){
316fec00eabSdrh   int nOld, nNew;
317fec00eabSdrh   void *pNew;
318fec00eabSdrh   if( pOld==0 ){
319fec00eabSdrh     return sqlite3Malloc(nBytes);
320fec00eabSdrh   }
321fec00eabSdrh   if( nBytes<=0 ){
322fec00eabSdrh     sqlite3_free(pOld);
323fec00eabSdrh     return 0;
324fec00eabSdrh   }
325fec00eabSdrh   nOld = sqlite3MallocSize(pOld);
326fec00eabSdrh   if( sqlite3Config.bMemstat ){
327fec00eabSdrh     sqlite3_mutex_enter(mem0.mutex);
328fec00eabSdrh     if( nBytes>mem0.mxReq ) mem0.mxReq = nBytes;
329fec00eabSdrh     nNew = sqlite3Config.m.xRoundup(nBytes);
330fec00eabSdrh     if( nOld==nNew ){
331fec00eabSdrh       pNew = pOld;
332fec00eabSdrh     }else{
333fec00eabSdrh       if( mem0.nowUsed+nNew-nOld>=mem0.alarmThreshold ){
334fec00eabSdrh         sqlite3MallocAlarm(nNew-nOld);
335fec00eabSdrh       }
336fec00eabSdrh       if( sqlite3FaultStep(SQLITE_FAULTINJECTOR_MALLOC) ){
337fec00eabSdrh         pNew = 0;
338fec00eabSdrh       }else{
339fec00eabSdrh         pNew = sqlite3Config.m.xRealloc(pOld, nNew);
340fec00eabSdrh         if( pNew==0 ){
341fec00eabSdrh           sqlite3MallocAlarm(nBytes);
342fec00eabSdrh           pNew = sqlite3Config.m.xRealloc(pOld, nNew);
343fec00eabSdrh         }
344fec00eabSdrh       }
345fec00eabSdrh       if( pNew ){
346fec00eabSdrh         mem0.nowUsed += nNew-nOld;
347fec00eabSdrh         if( mem0.nowUsed>mem0.mxUsed ){
348fec00eabSdrh           mem0.mxUsed = mem0.nowUsed;
349fec00eabSdrh         }
350fec00eabSdrh       }
351fec00eabSdrh     }
352fec00eabSdrh     sqlite3_mutex_leave(mem0.mutex);
353fec00eabSdrh   }else{
354fec00eabSdrh     pNew = sqlite3Config.m.xRealloc(pOld, nBytes);
355fec00eabSdrh   }
356fec00eabSdrh   return pNew;
357fec00eabSdrh }
358fec00eabSdrh 
359fec00eabSdrh /*
360fec00eabSdrh ** The public interface to sqlite3Realloc.  Make sure that the memory
361fec00eabSdrh ** subsystem is initialized prior to invoking sqliteRealloc.
362fec00eabSdrh */
363fec00eabSdrh void *sqlite3_realloc(void *pOld, int n){
364fec00eabSdrh #ifndef SQLITE_OMIT_AUTOINIT
365fec00eabSdrh   if( sqlite3_initialize() ) return 0;
366fec00eabSdrh #endif
367fec00eabSdrh   return sqlite3Realloc(pOld, n);
368fec00eabSdrh }
369fec00eabSdrh 
370a3152895Sdrh 
371a3152895Sdrh /*
37217435752Sdrh ** Allocate and zero memory.
373a3152895Sdrh */
374fec00eabSdrh void *sqlite3MallocZero(int n){
375fec00eabSdrh   void *p = sqlite3Malloc(n);
376a3152895Sdrh   if( p ){
377a3152895Sdrh     memset(p, 0, n);
378a3152895Sdrh   }
379a3152895Sdrh   return p;
380a3152895Sdrh }
38117435752Sdrh 
38217435752Sdrh /*
38317435752Sdrh ** Allocate and zero memory.  If the allocation fails, make
38417435752Sdrh ** the mallocFailed flag in the connection pointer.
38517435752Sdrh */
386fec00eabSdrh void *sqlite3DbMallocZero(sqlite3 *db, int n){
387a1644fd8Sdanielk1977   void *p = sqlite3DbMallocRaw(db, n);
38817435752Sdrh   if( p ){
38917435752Sdrh     memset(p, 0, n);
39017435752Sdrh   }
39117435752Sdrh   return p;
39217435752Sdrh }
39317435752Sdrh 
39417435752Sdrh /*
39517435752Sdrh ** Allocate and zero memory.  If the allocation fails, make
39617435752Sdrh ** the mallocFailed flag in the connection pointer.
39717435752Sdrh */
398fec00eabSdrh void *sqlite3DbMallocRaw(sqlite3 *db, int n){
399a1644fd8Sdanielk1977   void *p = 0;
400a1644fd8Sdanielk1977   if( !db || db->mallocFailed==0 ){
401fec00eabSdrh     p = sqlite3Malloc(n);
402f3a65f7eSdrh     if( !p && db ){
40317435752Sdrh       db->mallocFailed = 1;
40417435752Sdrh     }
405a1644fd8Sdanielk1977   }
40617435752Sdrh   return p;
40717435752Sdrh }
40817435752Sdrh 
40926783a58Sdanielk1977 /*
41026783a58Sdanielk1977 ** Resize the block of memory pointed to by p to n bytes. If the
41126783a58Sdanielk1977 ** resize fails, set the mallocFailed flag inthe connection object.
41226783a58Sdanielk1977 */
413a1644fd8Sdanielk1977 void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
414a1644fd8Sdanielk1977   void *pNew = 0;
415a1644fd8Sdanielk1977   if( db->mallocFailed==0 ){
416a1644fd8Sdanielk1977     pNew = sqlite3_realloc(p, n);
417a1644fd8Sdanielk1977     if( !pNew ){
418a1644fd8Sdanielk1977       db->mallocFailed = 1;
419a1644fd8Sdanielk1977     }
420a1644fd8Sdanielk1977   }
421a1644fd8Sdanielk1977   return pNew;
422a1644fd8Sdanielk1977 }
423a1644fd8Sdanielk1977 
42417435752Sdrh /*
42517435752Sdrh ** Attempt to reallocate p.  If the reallocation fails, then free p
42617435752Sdrh ** and set the mallocFailed flag in the database connection.
42717435752Sdrh */
42817435752Sdrh void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
429a3152895Sdrh   void *pNew;
430a1644fd8Sdanielk1977   pNew = sqlite3DbRealloc(db, p, n);
431a3152895Sdrh   if( !pNew ){
4321e536953Sdanielk1977     sqlite3_free(p);
433a3152895Sdrh   }
434a3152895Sdrh   return pNew;
435a3152895Sdrh }
436a3152895Sdrh 
437a3152895Sdrh /*
438a3152895Sdrh ** Make a copy of a string in memory obtained from sqliteMalloc(). These
439a3152895Sdrh ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
440a3152895Sdrh ** is because when memory debugging is turned on, these two functions are
441a3152895Sdrh ** called via macros that record the current file and line number in the
442a3152895Sdrh ** ThreadData structure.
443a3152895Sdrh */
444a3152895Sdrh char *sqlite3StrDup(const char *z){
445a3152895Sdrh   char *zNew;
446a3152895Sdrh   int n;
447a3152895Sdrh   if( z==0 ) return 0;
448a3152895Sdrh   n = strlen(z)+1;
449e5ae5735Sdrh   zNew = sqlite3Malloc(n);
450a3152895Sdrh   if( zNew ) memcpy(zNew, z, n);
451a3152895Sdrh   return zNew;
452a3152895Sdrh }
453a3152895Sdrh char *sqlite3StrNDup(const char *z, int n){
454a3152895Sdrh   char *zNew;
455a3152895Sdrh   if( z==0 ) return 0;
456e5ae5735Sdrh   zNew = sqlite3Malloc(n+1);
457a3152895Sdrh   if( zNew ){
458a3152895Sdrh     memcpy(zNew, z, n);
459a3152895Sdrh     zNew[n] = 0;
460a3152895Sdrh   }
461a3152895Sdrh   return zNew;
462a3152895Sdrh }
463a3152895Sdrh 
4641e536953Sdanielk1977 char *sqlite3DbStrDup(sqlite3 *db, const char *z){
4651e536953Sdanielk1977   char *zNew = sqlite3StrDup(z);
4661e536953Sdanielk1977   if( z && !zNew ){
4671e536953Sdanielk1977     db->mallocFailed = 1;
4681e536953Sdanielk1977   }
4691e536953Sdanielk1977   return zNew;
4701e536953Sdanielk1977 }
4711e536953Sdanielk1977 char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
4721e536953Sdanielk1977   char *zNew = sqlite3StrNDup(z, n);
4731e536953Sdanielk1977   if( z && !zNew ){
4741e536953Sdanielk1977     db->mallocFailed = 1;
4751e536953Sdanielk1977   }
4761e536953Sdanielk1977   return zNew;
4771e536953Sdanielk1977 }
4781e536953Sdanielk1977 
479a3152895Sdrh /*
480a3152895Sdrh ** Create a string from the 2nd and subsequent arguments (up to the
481a3152895Sdrh ** first NULL argument), store the string in memory obtained from
482a3152895Sdrh ** sqliteMalloc() and make the pointer indicated by the 1st argument
483a3152895Sdrh ** point to that string.  The 1st argument must either be NULL or
484a3152895Sdrh ** point to memory obtained from sqliteMalloc().
485a3152895Sdrh */
486a3152895Sdrh void sqlite3SetString(char **pz, ...){
487a3152895Sdrh   va_list ap;
488a3152895Sdrh   int nByte;
489a3152895Sdrh   const char *z;
490a3152895Sdrh   char *zResult;
491a3152895Sdrh 
492a3152895Sdrh   assert( pz!=0 );
493a3152895Sdrh   nByte = 1;
494a3152895Sdrh   va_start(ap, pz);
495a3152895Sdrh   while( (z = va_arg(ap, const char*))!=0 ){
496a3152895Sdrh     nByte += strlen(z);
497a3152895Sdrh   }
498a3152895Sdrh   va_end(ap);
4991e536953Sdanielk1977   sqlite3_free(*pz);
500e5ae5735Sdrh   *pz = zResult = sqlite3Malloc(nByte);
501a3152895Sdrh   if( zResult==0 ){
502a3152895Sdrh     return;
503a3152895Sdrh   }
504a3152895Sdrh   *zResult = 0;
505a3152895Sdrh   va_start(ap, pz);
506a3152895Sdrh   while( (z = va_arg(ap, const char*))!=0 ){
507a3152895Sdrh     int n = strlen(z);
508a3152895Sdrh     memcpy(zResult, z, n);
509a3152895Sdrh     zResult += n;
510a3152895Sdrh   }
511a3152895Sdrh   zResult[0] = 0;
512a3152895Sdrh   va_end(ap);
513a3152895Sdrh }
514a3152895Sdrh 
515a3152895Sdrh 
516a3152895Sdrh /*
517a3152895Sdrh ** This function must be called before exiting any API function (i.e.
51817435752Sdrh ** returning control to the user) that has called sqlite3_malloc or
51917435752Sdrh ** sqlite3_realloc.
520a3152895Sdrh **
521a3152895Sdrh ** The returned value is normally a copy of the second argument to this
522a3152895Sdrh ** function. However, if a malloc() failure has occured since the previous
523a3152895Sdrh ** invocation SQLITE_NOMEM is returned instead.
524a3152895Sdrh **
525a3152895Sdrh ** If the first argument, db, is not NULL and a malloc() error has occured,
526a3152895Sdrh ** then the connection error-code (the value returned by sqlite3_errcode())
527a3152895Sdrh ** is set to SQLITE_NOMEM.
528a3152895Sdrh */
529a3152895Sdrh int sqlite3ApiExit(sqlite3* db, int rc){
530a1644fd8Sdanielk1977   /* If the db handle is not NULL, then we must hold the connection handle
531a1644fd8Sdanielk1977   ** mutex here. Otherwise the read (and possible write) of db->mallocFailed
532a1644fd8Sdanielk1977   ** is unsafe, as is the call to sqlite3Error().
533a1644fd8Sdanielk1977   */
534a1644fd8Sdanielk1977   assert( !db || sqlite3_mutex_held(db->mutex) );
5351e536953Sdanielk1977   if( db && db->mallocFailed ){
536a3152895Sdrh     sqlite3Error(db, SQLITE_NOMEM, 0);
53717435752Sdrh     db->mallocFailed = 0;
538a3152895Sdrh     rc = SQLITE_NOMEM;
539a3152895Sdrh   }
540a3152895Sdrh   return rc & (db ? db->errMask : 0xff);
541a3152895Sdrh }
542