diff --git a/Makefile b/Makefile index fca60d4..dd7923c 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ EXPORT_FUNCS = \ --export=sqlite3_bind_blob_,$\ --export=sqlite3_bind_double,$\ --export=sqlite3_bind_int64,$\ - --export=sqlite3_bind_text_,$\ + --export=sqlite3_bind_text,$\ --export=sqlite3_bind_null,$\ --export=sqlite3_column_count,$\ --export=sqlite3_column_double,$\ diff --git a/src/legacy.c b/src/legacy.c index 790571d..d3dcc94 100644 --- a/src/legacy.c +++ b/src/legacy.c @@ -35,15 +35,12 @@ void sqlite3_exec_( sqlite3_callback xCallback, /* Invoke this callback routine */ void *pArg /* First argument to xCallback() */ ) __EXPORT_NAME(sqlite3_exec) { - char *new_zSql = (char *) malloc(zSql_len + 1); - memcpy(new_zSql, zSql, zSql_len); - new_zSql[zSql_len] = 0; - free((void *)zSql); + zSql[zSql_len] = '\x00'; char *pzErrMsg = 0; const int ret_code = sqlite3_exec(db, new_zSql, xCallback, pArg, &pzErrMsg); - free(new_zSql); + free(zSql); int *result = malloc(3*8); result[0] = ret_code; result[1] = 0; @@ -52,6 +49,7 @@ void sqlite3_exec_( result[4] = strlen(pzErrMsg); result[5] = 0; + add_object_to_release((void *) result); set_result_ptr((char *)result); } diff --git a/src/main.c b/src/main.c index da83ae5..072776b 100644 --- a/src/main.c +++ b/src/main.c @@ -2452,6 +2452,7 @@ int sqlite3TempInMemory(const sqlite3 *db){ void sqlite3_errmsg_(sqlite3 *db) __EXPORT_NAME(sqlite3_errmsg) { const char *result = sqlite3_errmsg(db); + add_object_to_release((void *) result); set_result_ptr((char *)result); set_result_size(strlen(result)); } @@ -3458,6 +3459,7 @@ void sqlite3_open_v2_( result[0] = ret_code; result[2] = (int)ppDb; + add_object_to_release((void *) result); set_result_ptr((char *)result); } diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 9ea0fe8..0240038 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -1113,10 +1113,7 @@ void sqlite3_column_blob_(sqlite3_stmt *pStmt, int i) __EXPORT_NAME(sqlite3_colu const char *blob = sqlite3_column_blob(pStmt, i); int blob_len = sqlite3_column_bytes(pStmt, i); - unsigned char *copied_result = malloc(blob_len); - memcpy(copied_result, blob, blob_len); - - set_result_ptr((char *)copied_result); + set_result_ptr((char *)blob); set_result_size(blob_len); } @@ -1160,10 +1157,7 @@ void sqlite3_column_text_(sqlite3_stmt *pStmt, int i) __EXPORT_NAME(sqlite3_colu const unsigned char *text = sqlite3_column_text(pStmt, i); const unsigned int text_len = sqlite3_column_bytes(pStmt, i); - unsigned char *copied_text = malloc(text_len); - memcpy(copied_text, text, text_len); - - set_result_ptr((char *)copied_text); + set_result_ptr((char *)text); set_result_size(text_len); } @@ -1262,6 +1256,7 @@ static const void *columnName( void sqlite3_column_name_(sqlite3_stmt *pStmt, int N) __EXPORT_NAME(sqlite3_column_name) { const char *result = sqlite3_column_name(pStmt, N); + add_object_to_release((void *) result); set_result_ptr((char *)result); set_result_size(strlen(result)); } @@ -1456,6 +1451,7 @@ int sqlite3_bind_blob_( for (int char_id = 0; char_id < copied_nData; ++char_id) { copied_zData[char_id] = zData[char_id * 8]; } + free(zData); const int result = sqlite3_bind_blob(pStmt, i, copied_zData, copied_nData, 0); @@ -1539,21 +1535,6 @@ int sqlite3_bind_pointer( return rc; } -int sqlite3_bind_text_( - sqlite3_stmt *pStmt, - int i, - const char *zData, - int nData, - void (*xDel)(void*) -) __EXPORT_NAME(sqlite3_bind_text) { - char *copied_zData = malloc(nData); - memcpy(copied_zData, zData, nData); - - const int result = sqlite3_bind_text(pStmt, i, copied_zData, nData, xDel); - - return result; -} - int sqlite3_bind_text( sqlite3_stmt *pStmt, int i, diff --git a/src/wrapper.c b/src/wrapper.c index 8d2ebfa..bf5899e 100644 --- a/src/wrapper.c +++ b/src/wrapper.c @@ -19,7 +19,7 @@ void release_objects() { OBJECTS_TO_RELEASE_COUNT = 0; } -void add_object_to_release(void *) { +void add_object_to_release(void *object) { }