pwasm_libc/
lib.rs

1#![warn(missing_docs)]
2#![cfg_attr(feature = "strict", deny(warnings))]
3#![no_std]
4
5//! libc crate
6
7#[macro_use]
8extern crate cfg_if;
9
10cfg_if! {
11	if #[cfg(feature="ext_memops")] {
12		extern "C" {
13			fn ext_memcmp(cx: *const u8, ct: *const u8, n: usize) -> i32;
14			fn ext_memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8;
15			fn ext_memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8;
16			fn ext_memset(dest: *mut u8, c: i32, n: usize) -> *mut u8;
17		}
18
19		// Declaring these function here prevents Emscripten from including it's own verisons
20		// into final binary.
21
22		/// memcmp extern
23		#[no_mangle]
24		pub unsafe extern "C" fn memcmp(cx: *const u8, ct: *const u8, n: usize) -> i32 {
25			ext_memcmp(cx, ct, n)
26		}
27
28		/// memcpy extern
29		#[no_mangle]
30		pub unsafe extern "C" fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 {
31			ext_memcpy(dest, src, n)
32		}
33
34		/// memmove extern
35		#[no_mangle]
36		pub unsafe extern "C" fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 {
37			ext_memmove(dest, src, n)
38		}
39
40		/// memset extern
41		#[no_mangle]
42		pub unsafe extern "C" fn memset(dest: *mut u8, c: i32, n: usize) -> *mut u8 {
43			ext_memset(dest, c, n)
44		}
45	}
46}