unixstring 0.2.7

An FFI-friendly null-terminated byte string
Documentation
pub fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
    let p = unsafe {
        libc::memchr(
            haystack.as_ptr() as *const libc::c_void,
            needle as libc::c_int,
            haystack.len(),
        )
    };
    if p.is_null() {
        None
    } else {
        Some(p as usize - (haystack.as_ptr() as usize))
    }
}

pub fn find_nul_byte(bytes: &[u8]) -> Option<usize> {
    memchr(0, bytes)
}

#[cfg(test)]
mod tests {

    use super::memchr;

    #[test]
    fn memchr_() {
        let text = "textwithoutnulbytes";
        assert!(memchr(0, text.as_bytes()).is_none());

        let text = "textwithout\0nulbytes";
        dbg!(memchr(0, text.as_bytes()));
        assert!(matches!(memchr(0, text.as_bytes()), Some(11)));
    }
}