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}