diff --git a/src/lib.rs b/src/lib.rs index 7f03f81..40e952b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,12 +9,12 @@ use std::{io, mem, ptr, slice}; #[inline] -pub fn write(wr: W, value: V) -> io::Result<()> { +pub fn write(wr: W, value: V) -> io::Result { value.write(wr) } pub trait Integer { - fn write(self, W) -> io::Result<()>; + fn write(self, W) -> io::Result; } const DEC_DIGITS_LUT: &'static[u8] = @@ -30,7 +30,7 @@ macro_rules! impl_Integer { ($($t:ident),* as $conv_fn:ident) => ($( impl Integer for $t { #[allow(unused_comparisons)] - fn write(self, mut wr: W) -> io::Result<()> { + fn write(self, mut wr: W) -> io::Result { let is_nonnegative = self >= 0; let mut n = if is_nonnegative { self as $conv_fn @@ -81,9 +81,12 @@ macro_rules! impl_Integer { } } - wr.write_all(unsafe { - slice::from_raw_parts(buf_ptr.offset(curr), buf.len() - curr as usize) - }) + let mut len = buf.len() - curr as usize; + try!(wr.write_all(unsafe { slice::from_raw_parts(buf_ptr.offset(curr), len) })); + if !is_nonnegative { + len += 1; + } + Ok(len) } })*); } diff --git a/tests/test.rs b/tests/test.rs index 83ad59a..7615c19 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -7,9 +7,9 @@ macro_rules! test { $( #[test] fn $name() { - let mut buf = Vec::with_capacity(20); - itoa::write(&mut buf, $value).unwrap(); - assert_eq!(buf, $expected.as_bytes()); + let mut buf = [b'\0'; 20]; + let len = itoa::write(&mut buf[..], $value).unwrap(); + assert_eq!(&buf[0..len], $expected.as_bytes()); } )* }