1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
use libc::{c_int, c_void, size_t}; #[no_mangle] pub extern "C" fn memchr(cx: *const c_void, c: c_int, n: size_t) -> *mut c_void { let buf = unsafe { std::slice::from_raw_parts(cx as *const u8, n) }; let c = c as u8; match ::memx::memchr(buf, c) { Some(pos) => unsafe { buf.as_ptr().add(pos) as *mut c_void }, None => 0 as *mut c_void, } } #[no_mangle] pub extern "C" fn memrchr(cx: *const c_void, c: c_int, n: size_t) -> *mut c_void { let buf = unsafe { std::slice::from_raw_parts(cx as *const u8, n) }; let c = c as u8; match ::memx::memrchr(buf, c) { Some(pos) => unsafe { buf.as_ptr().add(pos) as *mut c_void }, None => 0 as *mut c_void, } } use core::cmp::Ordering; #[no_mangle] pub extern "C" fn memcmp(cx: *const c_void, ct: *const c_void, n: size_t) -> c_int { let a = unsafe { std::slice::from_raw_parts(cx as *const u8, n) }; let b = unsafe { std::slice::from_raw_parts(ct as *const u8, n) }; match ::memx::memcmp(a, b) { Ordering::Equal => 0 as c_int, Ordering::Less => -1 as c_int, Ordering::Greater => 1 as c_int, } } #[no_mangle] pub extern "C" fn bcmp(cx: *const c_void, ct: *const c_void, n: size_t) -> c_int { let a = unsafe { std::slice::from_raw_parts(cx as *const u8, n) }; let b = unsafe { std::slice::from_raw_parts(ct as *const u8, n) }; if ::memx::memeq(a, b) { 0 as c_int } else { -1 as c_int } } #[no_mangle] pub extern "C" fn memmem( haystack: *const c_void, haystacklen: size_t, needle: *const c_void, needlelen: size_t, ) -> *mut c_void { let haystack = unsafe { std::slice::from_raw_parts(haystack as *const u8, haystacklen) }; let needle = unsafe { std::slice::from_raw_parts(needle as *const u8, needlelen) }; match ::memx::memmem(haystack, needle) { Some(pos) => unsafe { haystack.as_ptr().add(pos) as *mut c_void }, None => 0 as *mut c_void, } } #[cfg(any(crate_type = "cdylib",crate_type = "staticlib"))] #[no_mangle] pub extern "C" fn memcpy(dest: *mut c_void, src: *const c_void, n: size_t) -> *mut c_void { let a = unsafe { std::slice::from_raw_parts_mut(dest as *mut u8, n) }; let b = unsafe { std::slice::from_raw_parts(src as *const u8, n) }; let _r = ::memx::memcpy(a, b); dest } #[cfg(any(crate_type = "cdylib",crate_type = "staticlib"))] #[no_mangle] pub extern "C" fn memset(dest: *mut c_void, c: c_int, n: size_t) -> *mut c_void { let buf = unsafe { std::slice::from_raw_parts_mut(dest as *mut u8, n) }; let c = c as u8; let _r = ::memx::memset(buf, c); dest }