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
use core::{ptr::null_mut, slice};
use libc::{c_int, c_void};
#[no_mangle]
pub unsafe extern "C" fn bcmp(a: *const c_void, b: *const c_void, len: usize) -> c_int {
libc!(libc::memcmp(a, b, len));
compiler_builtins::mem::bcmp(a.cast(), b.cast(), len)
}
#[no_mangle]
pub unsafe extern "C" fn memchr(s: *const c_void, c: c_int, len: usize) -> *mut c_void {
libc!(libc::memchr(s, c, len));
let slice: &[u8] = slice::from_raw_parts(s.cast(), len);
match memchr::memchr(c as u8, slice) {
None => null_mut(),
Some(i) => s.cast::<u8>().add(i) as *mut c_void,
}
}
#[no_mangle]
pub unsafe extern "C" fn memrchr(s: *const c_void, c: c_int, len: usize) -> *mut c_void {
libc!(libc::memrchr(s, c, len));
let slice: &[u8] = slice::from_raw_parts(s.cast(), len);
match memchr::memrchr(c as u8, slice) {
None => null_mut(),
Some(i) => s.cast::<u8>().add(i) as *mut c_void,
}
}
#[no_mangle]
pub unsafe extern "C" fn memcmp(a: *const c_void, b: *const c_void, len: usize) -> c_int {
libc!(libc::memcmp(a, b, len));
compiler_builtins::mem::memcmp(a.cast(), b.cast(), len)
}
#[no_mangle]
pub unsafe extern "C" fn memcpy(dst: *mut c_void, src: *const c_void, len: usize) -> *mut c_void {
libc!(libc::memcpy(dst, src, len));
compiler_builtins::mem::memcpy(dst.cast(), src.cast(), len).cast()
}
#[no_mangle]
pub unsafe extern "C" fn memmove(dst: *mut c_void, src: *const c_void, len: usize) -> *mut c_void {
libc!(libc::memmove(dst, src, len));
compiler_builtins::mem::memmove(dst.cast(), src.cast(), len).cast()
}
#[no_mangle]
pub unsafe extern "C" fn memset(dst: *mut c_void, fill: c_int, len: usize) -> *mut c_void {
libc!(libc::memset(dst, fill, len));
compiler_builtins::mem::memset(dst.cast(), fill, len).cast()
}