On Thu, Sep 19, 2019 at 05:48:49AM +0000, Linus Färnstrand wrote:
* Handle the -2 error case * Allow sending arbitrary byte array, not just UTF-8 strings * Fix FFI declaration, takes size_t, not c_uint * Return usize to be more idiomatic (type used for slice indexing) Signed-off-by: Linus Färnstrand <faern@xxxxxxxxx> --- src/stream.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/stream.rs b/src/stream.rs index af6c8ec..2ca5d0b 100644 --- a/src/stream.rs +++ b/src/stream.rs @@ -34,7 +34,7 @@ pub mod sys { extern "C" { fn virStreamSend(c: sys::virStreamPtr, data: *const libc::c_char, - nbytes: libc::c_uint) + nbytes: libc::size_t) -> libc::c_int; fn virStreamRecv(c: sys::virStreamPtr, data: *mut libc::c_char, @@ -105,16 +105,15 @@ impl Stream { } } - pub fn send(&self, data: &str) -> Result<u32, Error> { - unsafe { - let ret = virStreamSend(self.as_ptr(), - string_to_c_chars!(data), - data.len() as libc::c_uint); - if ret == -1 { - return Err(Error::new()); - } - return Ok(ret as u32); - } + pub fn send(&self, data: &[u8]) -> Result<usize, Error> { + let ret = unsafe { + virStreamSend( + self.as_ptr(), + data.as_ptr() as *mut libc::c_char, + data.len() + ) + }; + usize::try_from(ret).map_err(|_| Error::new())
I guess same as the comment form the first patch should be applied here, but we might need to even change the return value so that it is properly distinguished as here it has yet another meaning. Are you basing this on some of your work on top of libvirt-rust? Is this the easy to use (semi-)properly? If yes, we might just as well keep it this way as it is still way better than what we have now.
} pub fn recv(&self, buf: &mut [u8]) -> Result<usize, Error> { -- 2.21.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list