about summary refs log tree commit diff
path: root/library/std/src/sys/vxworks/memchr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/std/src/sys/vxworks/memchr.rs')
-rw-r--r--library/std/src/sys/vxworks/memchr.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/library/std/src/sys/vxworks/memchr.rs b/library/std/src/sys/vxworks/memchr.rs
new file mode 100644
index 00000000000..928100c92ff
--- /dev/null
+++ b/library/std/src/sys/vxworks/memchr.rs
@@ -0,0 +1,21 @@
+// Original implementation taken from rust-memchr.
+// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
+
+pub fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
+    let p = unsafe {
+        libc::memchr(
+            haystack.as_ptr() as *const libc::c_void,
+            needle as libc::c_int,
+            haystack.len(),
+        )
+    };
+    if p.is_null() { None } else { Some(p as usize - (haystack.as_ptr() as usize)) }
+}
+
+pub fn memrchr(needle: u8, haystack: &[u8]) -> Option<usize> {
+    fn memrchr_specific(needle: u8, haystack: &[u8]) -> Option<usize> {
+        core::slice::memchr::memrchr(needle, haystack)
+    }
+
+    memrchr_specific(needle, haystack)
+}