On Wed, 2008-09-10 at 22:35 +0100, Andy Chambers wrote:
> Everything is pretty straightforward apart from the last two
> parameters.  Length is supposed to be the length of the value being
> passed in (or -1 if the value is null terminated).
> The destructor is supposed to be a function that frees the memory
> required by `value' after sqlite is finished with it.  For destructor,
> you can use the special value 0 if the memory
> is in "unmanaged" space.  So I have a few questions...

from the sqlite documentation:
The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
string after SQLite has finished with it. If the fifth argument is the
special value SQLITE_STATIC, then SQLite assumes that the information is
in static, unmanaged space and does not need to be freed. If the fifth
argument has the value SQLITE_TRANSIENT, then SQLite makes its own
private copy of the data immediately, before the sqlite3_bind_*()
routine returns.

You're passing 0 as fifth parameter, which is SQLITE_STATIC, but that's
only for static data, while CFFI C-strings are dynamically allocated.
Use SQLITE_TRANSIENT instead.

-- 
Stelian Ionescu a.k.a. fe[nl]ix
Quidquid latine dictum sit, altum videtur.

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Reply via email to