about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2017-09-13 12:20:39 +0200
committerOliver Schneider <git-no-reply-9879165716479413131@oli-obk.de>2017-09-17 21:30:58 +0200
commit2787a285bd211ecbf75fd95d990226242005d848 (patch)
tree1b66a4087234242d1d96fc8db30a795efd57f16d /src/libstd
parent1cdd68922d143c6d1f18f66572251b7078e9e850 (diff)
downloadrust-2787a285bd211ecbf75fd95d990226242005d848.tar.gz
rust-2787a285bd211ecbf75fd95d990226242005d848.zip
Add `<*const T>::align_offset` and use it in `memchr`
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/lib.rs1
-rw-r--r--src/libstd/sys_common/memchr.rs9
2 files changed, 4 insertions, 6 deletions
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 1a0f8b8d217..a3eecd46e90 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -242,6 +242,7 @@
 #![feature(allocator_internals)]
 #![feature(allow_internal_unsafe)]
 #![feature(allow_internal_unstable)]
+#![feature(align_offset)]
 #![feature(asm)]
 #![feature(box_syntax)]
 #![feature(cfg_target_has_atomic)]
diff --git a/src/libstd/sys_common/memchr.rs b/src/libstd/sys_common/memchr.rs
index 3824a5fb528..50f998eb486 100644
--- a/src/libstd/sys_common/memchr.rs
+++ b/src/libstd/sys_common/memchr.rs
@@ -65,15 +65,12 @@ pub mod fallback {
         let usize_bytes = mem::size_of::<usize>();
 
         // search up to an aligned boundary
-        let align = (ptr as usize) & (usize_bytes- 1);
-        let mut offset;
-        if align > 0 {
-            offset = cmp::min(usize_bytes - align, len);
+        let mut offset = ptr.align_offset(usize_bytes);
+        if offset > 0 {
+            offset = cmp::min(offset, len);
             if let Some(index) = text[..offset].iter().position(|elt| *elt == x) {
                 return Some(index);
             }
-        } else {
-            offset = 0;
         }
 
         // search the body of the text