assert( nCapacity>=0 );
pBuffer->nData = 0;
pBuffer->nCapacity = nCapacity;
- pBuffer->pData = nCapacity==0 ? NULL : malloc(nCapacity);
+ pBuffer->pData = nCapacity==0 ? NULL : sqlite3_malloc(nCapacity);
}
static void dataBufferReset(DataBuffer *pBuffer){
pBuffer->nData = 0;
}
static void dataBufferDestroy(DataBuffer *pBuffer){
- if( pBuffer->pData!=NULL ) free(pBuffer->pData);
+ if( pBuffer->pData!=NULL ) sqlite3_free(pBuffer->pData);
SCRAMBLE(pBuffer);
}
static void dataBufferExpand(DataBuffer *pBuffer, int nAddCapacity){
*/
if( pBuffer->nData+nAddCapacity>pBuffer->nCapacity ){
pBuffer->nCapacity = pBuffer->nData+nAddCapacity;
- pBuffer->pData = realloc(pBuffer->pData, pBuffer->nCapacity);
+ pBuffer->pData = sqlite3_realloc(pBuffer->pData, pBuffer->nCapacity);
}
}
static void dataBufferAppend(DataBuffer *pBuffer,
}
static DLCollector *dlcNew(sqlite_int64 iDocid, DocListType iType){
- DLCollector *pCollector = malloc(sizeof(DLCollector));
+ DLCollector *pCollector = sqlite3_malloc(sizeof(DLCollector));
dataBufferInit(&pCollector->b, 0);
dlwInit(&pCollector->dlw, iType, &pCollector->b);
plwInit(&pCollector->plw, &pCollector->dlw, iDocid);
dlwDestroy(&pCollector->dlw);
dataBufferDestroy(&pCollector->b);
SCRAMBLE(pCollector);
- free(pCollector);
+ sqlite3_free(pCollector);
}
}
static char *string_dup_n(const char *s, int n){
- char *str = malloc(n + 1);
+ char *str = sqlite3_malloc(n + 1);
memcpy(str, s, n);
str[n] = '\0';
return str;
}
len += 1; /* for null terminator */
- r = result = malloc(len);
+ r = result = sqlite3_malloc(len);
for(p = zFormat; *p; ++p){
if( *p=='%' ){
memcpy(r, zDb, nDb);
int rc;
TRACE(("FTS2 sql: %s\n", zCommand));
rc = sqlite3_exec(db, zCommand, NULL, 0, NULL);
- free(zCommand);
+ sqlite3_free(zCommand);
return rc;
}
int rc;
TRACE(("FTS2 prepare: %s\n", zCommand));
rc = sqlite3_prepare_v2(db, zCommand, -1, ppStmt, NULL);
- free(zCommand);
+ sqlite3_free(zCommand);
return rc;
}
}
rc = sql_prepare(v->db, v->zDb, v->zName, &v->pFulltextStatements[iStmt],
zStmt);
- if( zStmt != fulltext_zStatement[iStmt]) free((void *) zStmt);
+ if( zStmt != fulltext_zStatement[iStmt]) sqlite3_free((void *) zStmt);
if( rc!=SQLITE_OK ) return rc;
} else {
int rc = sqlite3_reset(v->pFulltextStatements[iStmt]);
int i;
for (i=0 ; i < nString ; ++i) {
- if( pString[i]!=NULL ) free((void *) pString[i]);
+ if( pString[i]!=NULL ) sqlite3_free((void *) pString[i]);
}
- free((void *) pString);
+ sqlite3_free((void *) pString);
}
/* select * from %_content where rowid = [iRow]
rc = sqlite3_step(s);
if( rc!=SQLITE_ROW ) return rc;
- values = (const char **) malloc(v->nColumn * sizeof(const char *));
+ values = (const char **) sqlite3_malloc(v->nColumn * sizeof(const char *));
for(i=0; i<v->nColumn; ++i){
if( sqlite3_column_type(s, i)==SQLITE_NULL ){
values[i] = NULL;
clearPendingTerms(v);
- free(v->azColumn);
+ sqlite3_free(v->azColumn);
for(i = 0; i < v->nColumn; ++i) {
sqlite3_free(v->azContentColumn[i]);
}
- free(v->azContentColumn);
- free(v);
+ sqlite3_free(v->azContentColumn);
+ sqlite3_free(v);
}
/*
*/
static char **tokenizeString(const char *z, int *pnToken){
int nToken = 0;
- Token *aToken = malloc( strlen(z) * sizeof(aToken[0]) );
+ Token *aToken = sqlite3_malloc( strlen(z) * sizeof(aToken[0]) );
int n = 1;
int e, i;
int totalSize = 0;
}
z += n;
}
- azToken = (char**)malloc( nToken*sizeof(char*) + totalSize );
+ azToken = (char**)sqlite3_malloc( nToken*sizeof(char*) + totalSize );
zCopy = (char*)&azToken[nToken];
nToken--;
for(i=0; i<nToken; i++){
zCopy += n+1;
}
azToken[nToken] = 0;
- free(aToken);
+ sqlite3_free(aToken);
*pnToken = nToken;
return azToken;
}
** Reclaim all of the memory used by a TableSpec
*/
static void clearTableSpec(TableSpec *p) {
- free(p->azColumn);
- free(p->azContentColumn);
- free(p->azTokenizer);
+ sqlite3_free(p->azColumn);
+ sqlite3_free(p->azContentColumn);
+ sqlite3_free(p->azTokenizer);
}
/* Parse a CREATE VIRTUAL TABLE statement, which looks like this:
for(i=n=0; i<argc; i++){
n += strlen(argv[i]) + 1;
}
- azArg = malloc( sizeof(char*)*argc + n );
+ azArg = sqlite3_malloc( sizeof(char*)*argc + n );
if( azArg==0 ){
return SQLITE_NOMEM;
}
** for the convenience of people who might examine the generated
** %_content table and wonder what the columns are used for.
*/
- pSpec->azContentColumn = malloc( pSpec->nColumn * sizeof(char *) );
+ pSpec->azContentColumn = sqlite3_malloc( pSpec->nColumn * sizeof(char *) );
if( pSpec->azContentColumn==0 ){
clearTableSpec(pSpec);
return SQLITE_NOMEM;
char const *zTok; /* Name of tokenizer to use for this fts table */
int nTok; /* Length of zTok, including nul terminator */
- v = (fulltext_vtab *) malloc(sizeof(fulltext_vtab));
+ v = (fulltext_vtab *) sqlite3_malloc(sizeof(fulltext_vtab));
if( v==0 ) return SQLITE_NOMEM;
CLEAR(v);
/* sqlite will initialize v->base */
static int fulltextOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
fulltext_cursor *c;
- c = (fulltext_cursor *) calloc(sizeof(fulltext_cursor), 1);
- /* sqlite will initialize c->base */
- *ppCursor = &c->base;
- TRACE(("FTS2 Open %p: %p\n", pVTab, c));
-
- return SQLITE_OK;
+ c = (fulltext_cursor *) sqlite3_malloc(sizeof(fulltext_cursor));
+ if( c ){
+ memset(c, 0, sizeof(fulltext_cursor));
+ /* sqlite will initialize c->base */
+ *ppCursor = &c->base;
+ TRACE(("FTS2 Open %p: %p\n", pVTab, c));
+ return SQLITE_OK;
+ }else{
+ return SQLITE_NOMEM;
+ }
}
static void queryClear(Query *q){
int i;
for(i = 0; i < q->nTerms; ++i){
- free(q->pTerms[i].pTerm);
+ sqlite3_free(q->pTerms[i].pTerm);
}
- free(q->pTerms);
+ sqlite3_free(q->pTerms);
CLEAR(q);
}
** Snippet
*/
static void snippetClear(Snippet *p){
- free(p->aMatch);
- free(p->zOffset);
- free(p->zSnippet);
+ sqlite3_free(p->aMatch);
+ sqlite3_free(p->zOffset);
+ sqlite3_free(p->zSnippet);
CLEAR(p);
}
/*
struct snippetMatch *pMatch;
if( p->nMatch+1>=p->nAlloc ){
p->nAlloc = p->nAlloc*2 + 10;
- p->aMatch = realloc(p->aMatch, p->nAlloc*sizeof(p->aMatch[0]) );
+ p->aMatch = sqlite3_realloc(p->aMatch, p->nAlloc*sizeof(p->aMatch[0]) );
if( p->aMatch==0 ){
p->nMatch = 0;
p->nAlloc = 0;
int iMatch;
- free(pCursor->snippet.zSnippet);
+ sqlite3_free(pCursor->snippet.zSnippet);
pCursor->snippet.zSnippet = 0;
aMatch = pCursor->snippet.aMatch;
nMatch = pCursor->snippet.nMatch;
snippetClear(&c->snippet);
if( c->result.nData!=0 ) dlrDestroy(&c->reader);
dataBufferDestroy(&c->result);
- free(c);
+ sqlite3_free(c);
return SQLITE_OK;
}
static void queryAdd(Query *q, const char *pTerm, int nTerm){
QueryTerm *t;
++q->nTerms;
- q->pTerms = realloc(q->pTerms, q->nTerms * sizeof(q->pTerms[0]));
+ q->pTerms = sqlite3_realloc(q->pTerms, q->nTerms * sizeof(q->pTerms[0]));
if( q->pTerms==0 ){
q->nTerms = 0;
return;
}
t = &q->pTerms[q->nTerms - 1];
CLEAR(t);
- t->pTerm = malloc(nTerm+1);
+ t->pTerm = sqlite3_malloc(nTerm+1);
memcpy(t->pTerm, pTerm, nTerm);
t->pTerm[nTerm] = 0;
t->nTerm = nTerm;
static InteriorBlock *interiorBlockNew(int iHeight, sqlite_int64 iChildBlock,
const char *pTerm, int nTerm){
- InteriorBlock *block = calloc(1, sizeof(InteriorBlock));
+ InteriorBlock *block = sqlite3_malloc(sizeof(InteriorBlock));
char c[VARINT_MAX+VARINT_MAX];
int n;
- dataBufferInit(&block->term, 0);
- dataBufferReplace(&block->term, pTerm, nTerm);
-
- n = putVarint(c, iHeight);
- n += putVarint(c+n, iChildBlock);
- dataBufferInit(&block->data, INTERIOR_MAX);
- dataBufferReplace(&block->data, c, n);
+ if( block ){
+ memset(block, 0, sizeof(*block));
+ dataBufferInit(&block->term, 0);
+ dataBufferReplace(&block->term, pTerm, nTerm);
+ n = putVarint(c, iHeight);
+ n += putVarint(c+n, iChildBlock);
+ dataBufferInit(&block->data, INTERIOR_MAX);
+ dataBufferReplace(&block->data, c, n);
+ }
return block;
}
block = block->next;
dataBufferDestroy(&b->term);
dataBufferDestroy(&b->data);
- free(b);
+ sqlite3_free(b);
}
if( pWriter->parentWriter!=NULL ){
interiorWriterDestroy(pWriter->parentWriter);
- free(pWriter->parentWriter);
+ sqlite3_free(pWriter->parentWriter);
}
dataBufferDestroy(&pWriter->term);
SCRAMBLE(pWriter);
if( rc!=SQLITE_OK ) return rc;
*piEndBlockid = iBlockid;
- pWriter->parentWriter = malloc(sizeof(*pWriter->parentWriter));
+ pWriter->parentWriter = sqlite3_malloc(sizeof(*pWriter->parentWriter));
interiorWriterInit(pWriter->iHeight+1,
block->term.pData, block->term.nData,
iBlockid, pWriter->parentWriter);
if( rc!=SQLITE_OK ) return rc;
n = fts2HashCount(pTerms);
- pData = malloc(n*sizeof(TermData));
+ pData = sqlite3_malloc(n*sizeof(TermData));
for(i = 0, e = fts2HashFirst(pTerms); e; i++, e = fts2HashNext(e)){
assert( i<n );
err:
dataBufferDestroy(&dl);
- free(pData);
+ sqlite3_free(pData);
leafWriterDestroy(&writer);
return rc;
}
-C fts2.c\sbuildTerms()\spasses\s-1\sfor\snInput.\r\nBackports\s(4511)\sfrom\sfts3.\s(CVS\s5453)
-D 2008-07-22T22:20:50
+C Changes\sfts2\sto\suse\sonly\ssqlite3_malloc()\sand\snot\ssystem\smalloc.\r\nBackports\s(4554)\sand\s(4555)\sfrom\sfts3.\s(CVS\s5454)
+D 2008-07-22T22:57:54
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 77ff156061bb870aa0a8b3d545c670d08070f7e6
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F ext/fts1/tokenizer.h 0c53421b832366d20d720d21ea3e1f6e66a36ef9
F ext/fts2/README.tokenizers 21e3684ea5a095b55d70f6878b4ce6af5932dfb7
F ext/fts2/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts2/fts2.c 015d44a43d2a3586cd31b29f7fc1c60f21628dc3
+F ext/fts2/fts2.c f50c7faca742f40b14a2b279d652594c532e6523
F ext/fts2/fts2.h da5f76c65163301d1068a971fd32f4119e3c95fa
-F ext/fts2/fts2_hash.c 25ad8043ce2e708840a8fb179b8ed04325f860eb
+F ext/fts2/fts2_hash.c 2689e42e1107ea67207f725cf69cf8972d00cf93
F ext/fts2/fts2_hash.h 9a5b1be94664139f93217a0770d7144425cffb3a
F ext/fts2/fts2_icu.c 53162e0dbe6d27a0cc24ad2c10cea8c48b7c839b
-F ext/fts2/fts2_porter.c 98c9dbd1eed20032c03ce05877164e262567443e
+F ext/fts2/fts2_porter.c 8a6369b0fae98c04db95e4fa95fac7c03d7182ec
F ext/fts2/fts2_tokenizer.c 5cec41326fabe65323945a46fa9495ee85c3d5fd
F ext/fts2/fts2_tokenizer.h a7e46462d935a314b2682287f12f27530a3ee08e
-F ext/fts2/fts2_tokenizer1.c 8a545c232bdffafd117c4eeaf59789691909f26a
+F ext/fts2/fts2_tokenizer1.c 8545ce12b41922004da46e91a7b023b92b76f94e
F ext/fts2/mkfts2amal.tcl 974d5d438cb3f7c4a652639262f82418c1e4cff0
F ext/fts3/README.tokenizers 226644a0eab97724e8de83061912e8bb248461b6
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
F test/fts1n.test a2317dcd27b1d087ee3878b30e0a59c593c98b7a
F test/fts1o.test 382b8b07a2d6de5610814d9477117c4430464b9c
F test/fts1porter.test d86e9c3e0c7f8ff95add6582b4b585fb4e02b96d
+F test/fts2.test 83704ba4d7956f6646c0c5192a0b16df61e4b2af
F test/fts2a.test 473a5c8b473a4e21a8e3fddaed1e59666e0c6ab7
F test/fts2b.test 964abc0236c849c07ca1ae496bb25c268ae94816
F test/fts2c.test ffb5a35230ac72c4354535c547965ce6824537c0
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P e31d2f875c13ee41742c9aaee6291662cdbbf863
-R 6376acd2dc63d085f9c9b21e576d7486
+P d562515e1cdd05212674516033c64b5f5668b799
+R 2682d383bee51312a260e3583fb091fa
U shess
-Z 32663cd2dfd230cb3d5b37a9b5daa7ee
+Z 7b59d5a322f77dacbe20c5139c2b6d35