So, if i understand correctly, using CString::new with 'false' as a
second argument implies :
- as you have no control on the lifetime underlying buffer, generally,
you have to as_str() and clone() the CString (the exception is when
you use immediately (right after creation) and only once the CString,
for example to display it)
- it better to write
value = unsafe { let tmp = CString::new(...., false); if
tmp.is_not_null {tmp_str = tmp .as_str()}; tmp_str.clone() }
to avoid any misused of a possibly transient CString
than
let tmp = unsafe { CString::new(...., false) };
value = if tmp.is_not_null {let tmp_str = tmp .as_str()}; tmp_str.clone() }

Thanks

2014-05-13 1:24 GMT+02:00 comex <com...@gmail.com>:
> On Mon, May 12, 2014 at 6:41 PM, Christophe Pedretti
> <christophe.pedre...@gmail.com> wrote:
>> Another SQLite function, sqlite3_column_text, return a *c_uchar; so,
>> tu use the CString new, which takes a *c_char as argument, i can cast
>> CString::new(sqlite3_column_text(pStmt, column_index) as *i8, false)
>>
>> But is it correct ?
>
> Looks correct, but note that this doesn't copy any data by itself; if
> the original pointer becomes invalid, which happens in various
> situations documented by the SQLite API, so will the CString.
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to