thin_cstr/
lib.rs

1#![feature(extern_types)]
2
3mod c_str;
4
5pub use c_str::{CStr, CString};
6
7mod memchr {
8    pub fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
9        unsafe {
10            let s = haystack.as_ptr() as *const _;
11            let result = ::sys::memchr(s, needle.into(), haystack.len());
12            if result.is_null() {
13                None
14            } else {
15                Some(result as usize - s as usize)
16            }
17        }
18    }
19}
20
21mod sys {
22    use std::os::raw::{c_char, c_int, c_void};
23    extern "C" {
24        pub fn strlen(ptr: *const c_char) -> usize;
25        pub fn memchr(s: *const c_void, c: c_int, n: usize) -> *mut c_void;
26    }
27}