arbitrary/foreign/alloc/ffi/c_str.rs
1use {
2 crate::{Arbitrary, Result, Unstructured},
3 std::ffi::CString,
4};
5
6impl<'a> Arbitrary<'a> for CString {
7 fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
8 <Vec<u8> as Arbitrary>::arbitrary(u).map(|mut x| {
9 x.retain(|&c| c != 0);
10 // SAFETY: all zero bytes have been removed
11 unsafe { Self::from_vec_unchecked(x) }
12 })
13 }
14
15 #[inline]
16 fn size_hint(depth: usize) -> (usize, Option<usize>) {
17 <Vec<u8> as Arbitrary>::size_hint(depth)
18 }
19}