about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2018-04-04 18:09:39 +0200
committerSimon Sapin <simon.sapin@exyr.org>2018-04-12 22:53:14 +0200
commit747cc749430d66bd2fca8e81fd8a1c994e36dcf1 (patch)
treeba50ae6ca9a8e021439f2c643a0fc785d42c58c3
parentc957e99b305ecee113442a7ce0edd6b565200ca9 (diff)
downloadrust-747cc749430d66bd2fca8e81fd8a1c994e36dcf1.tar.gz
rust-747cc749430d66bd2fca8e81fd8a1c994e36dcf1.zip
Conversions between Result<*mut u8, AllocErr>> and *mut Void
-rw-r--r--src/liballoc_system/lib.rs21
-rw-r--r--src/libcore/alloc.rs21
2 files changed, 24 insertions, 18 deletions
diff --git a/src/liballoc_system/lib.rs b/src/liballoc_system/lib.rs
index 7b788a5f989..6ffbd029281 100644
--- a/src/liballoc_system/lib.rs
+++ b/src/liballoc_system/lib.rs
@@ -139,22 +139,12 @@ macro_rules! alloc_methods_based_on_global_alloc {
     () => {
         #[inline]
         unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> {
-            let ptr = GlobalAlloc::alloc(*self, layout);
-            if !ptr.is_null() {
-                Ok(ptr as *mut u8)
-            } else {
-                Err(AllocErr)
-            }
+            GlobalAlloc::alloc(*self, layout).into()
         }
 
         #[inline]
         unsafe fn alloc_zeroed(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> {
-            let ptr = GlobalAlloc::alloc_zeroed(*self, layout);
-            if !ptr.is_null() {
-                Ok(ptr as *mut u8)
-            } else {
-                Err(AllocErr)
-            }
+            GlobalAlloc::alloc_zeroed(*self, layout).into()
         }
 
         #[inline]
@@ -167,12 +157,7 @@ macro_rules! alloc_methods_based_on_global_alloc {
                           ptr: *mut u8,
                           old_layout: Layout,
                           new_size: usize) -> Result<*mut u8, AllocErr> {
-            let ptr = GlobalAlloc::realloc(*self, ptr as *mut Void, old_layout, new_size);
-            if !ptr.is_null() {
-                Ok(ptr as *mut u8)
-            } else {
-                Err(AllocErr)
-            }
+            GlobalAlloc::realloc(*self, ptr as *mut Void, old_layout, new_size).into()
         }
     }
 }
diff --git a/src/libcore/alloc.rs b/src/libcore/alloc.rs
index 757f06e731f..cfa7df06a40 100644
--- a/src/libcore/alloc.rs
+++ b/src/libcore/alloc.rs
@@ -41,6 +41,27 @@ impl Void {
     }
 }
 
+/// Convert from a return value of GlobalAlloc::alloc to that of Alloc::alloc
+impl From<*mut Void> for Result<*mut u8, AllocErr> {
+    fn from(ptr: *mut Void) -> Self {
+        if !ptr.is_null() {
+            Ok(ptr as *mut u8)
+        } else {
+            Err(AllocErr)
+        }
+    }
+}
+
+/// Convert from a return value of Alloc::alloc to that of GlobalAlloc::alloc
+impl From<Result<*mut u8, AllocErr>> for *mut Void {
+    fn from(result: Result<*mut u8, AllocErr>) -> Self {
+        match result {
+            Ok(ptr) => ptr as *mut Void,
+            Err(_) => Void::null_mut(),
+        }
+    }
+}
+
 /// Represents the combination of a starting address and
 /// a total capacity of the returned block.
 #[derive(Debug)]