summaryrefslogtreecommitdiffstats
path: root/lib/libsqlite3/ext/misc/amatch.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libsqlite3/ext/misc/amatch.c')
-rw-r--r--lib/libsqlite3/ext/misc/amatch.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/lib/libsqlite3/ext/misc/amatch.c b/lib/libsqlite3/ext/misc/amatch.c
index 98c01431bae..d08ef57aad8 100644
--- a/lib/libsqlite3/ext/misc/amatch.c
+++ b/lib/libsqlite3/ext/misc/amatch.c
@@ -998,6 +998,23 @@ static void amatchWriteCost(amatch_word *pWord){
pWord->zCost[8] = 0;
}
+/* Circumvent compiler warnings about the use of strcpy() by supplying
+** our own implementation.
+*/
+#if defined(__OpenBSD__)
+static void amatchStrcpy(char *dest, const char *src){
+ while( (*(dest++) = *(src++))!=0 ){}
+}
+static void amatchStrcat(char *dest, const char *src){
+ while( *dest ) dest++;
+ amatchStrcpy(dest, src);
+}
+#else
+# define amatchStrcpy strcpy
+# define amatchStrcat strcat
+#endif
+
+
/*
** Add a new amatch_word object to the queue.
**
@@ -1073,7 +1090,7 @@ static void amatchAddWord(
assert( pOther==0 ); (void)pOther;
pWord->sWord.zKey = pWord->zWord;
pWord->sWord.pWord = pWord;
- strcpy(pWord->zWord, pCur->zBuf);
+ amatchStrcpy(pWord->zWord, pCur->zBuf);
pOther = amatchAvlInsert(&pCur->pWord, &pWord->sWord);
assert( pOther==0 ); (void)pOther;
#ifdef AMATCH_TRACE_1
@@ -1083,6 +1100,7 @@ static void amatchAddWord(
#endif
}
+
/*
** Advance a cursor to its next row of output
*/
@@ -1148,7 +1166,7 @@ static int amatchNext(sqlite3_vtab_cursor *cur){
zBuf = sqlite3_realloc(zBuf, nBuf);
if( zBuf==0 ) return SQLITE_NOMEM;
}
- strcpy(zBuf, pWord->zWord+2);
+ amatchStrcpy(zBuf, pWord->zWord+2);
zNext[0] = 0;
zNextIn[0] = pCur->zInput[pWord->nMatch];
if( zNextIn[0] ){
@@ -1163,7 +1181,7 @@ static int amatchNext(sqlite3_vtab_cursor *cur){
if( zNextIn[0] && zNextIn[0]!='*' ){
sqlite3_reset(p->pVCheck);
- strcat(zBuf, zNextIn);
+ amatchStrcat(zBuf, zNextIn);
sqlite3_bind_text(p->pVCheck, 1, zBuf, nWord+nNextIn, SQLITE_STATIC);
rc = sqlite3_step(p->pVCheck);
if( rc==SQLITE_ROW ){
@@ -1176,13 +1194,13 @@ static int amatchNext(sqlite3_vtab_cursor *cur){
}
while( 1 ){
- strcpy(zBuf+nWord, zNext);
+ amatchStrcpy(zBuf+nWord, zNext);
sqlite3_reset(p->pVCheck);
sqlite3_bind_text(p->pVCheck, 1, zBuf, -1, SQLITE_TRANSIENT);
rc = sqlite3_step(p->pVCheck);
if( rc!=SQLITE_ROW ) break;
zW = (const char*)sqlite3_column_text(p->pVCheck, 0);
- strcpy(zBuf+nWord, zNext);
+ amatchStrcpy(zBuf+nWord, zNext);
if( strncmp(zW, zBuf, nWord)!=0 ) break;
if( (zNextIn[0]=='*' && zNextIn[1]==0)
|| (zNextIn[0]==0 && zW[nWord]==0)