"Andy Chambers" <achambers.home@googlemail.com> writes:
(value :string) (len :int) ;; not really an int but cffi takes care of this for us (destructor :int))
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...
1. If you specify the type as :string, does cffi pass it through as a null terminated string?
Yes.
2. Does cffi take care of freeing a string once the C library is finished with it or should I define a callback to use for the destructor.
The semantics described in http://common-lisp.net/project/cffi/manual/html_node/Tutorial_002dMemory.htm... are still accurate. So the answer is "just what does `once the C library is finished with it' mean anyway?"
3. With my current code, I'm not getting any memory errors but I am getting weird values in the database.
ˆ|Ñø·Ñø·IBUTE|ˆ|˜Â'ø|ˆ|˜Â'ø|Ñø·Ñø·IBUTE||
Any ideas what's going on here?
See footnote ¹ on the page I linked above. -- I write stuff at http://failex.blogspot.com/ now. But the post formatter and themes are terrible for sharing code, the primary content, so it might go away sooner or later.