summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Schievink <jonasschievink@gmail.com>2017-07-25 19:04:38 +0200
committerJonas Schievink <jonasschievink@gmail.com>2017-08-11 18:04:06 +0200
commit9c9af2c6638c9a2c91fb18ff3cb79c4bac626965 (patch)
treea278d50a612e02c6b3279397f1f8dfa0a0d74155
parent648a9db372c90e20090fae51563f68af205498fe (diff)
downloadnix-9c9af2c6638c9a2c91fb18ff3cb79c4bac626965.zip
Fix safety of sockopt helper traits
-rw-r--r--src/sys/socket/sockopt.rs60
1 files changed, 30 insertions, 30 deletions
diff --git a/src/sys/socket/sockopt.rs b/src/sys/socket/sockopt.rs
index 1c6d0b85..7e781230 100644
--- a/src/sys/socket/sockopt.rs
+++ b/src/sys/socket/sockopt.rs
@@ -178,17 +178,17 @@ sockopt_impl!(GetOnly, OriginalDst, libc::SOL_IP, libc::SO_ORIGINAL_DST, libc::s
*
*/
-trait Get<T> {
+unsafe trait Get<T> {
unsafe fn blank() -> Self;
- unsafe fn ffi_ptr(&mut self) -> *mut c_void;
- unsafe fn ffi_len(&mut self) -> *mut socklen_t;
+ fn ffi_ptr(&mut self) -> *mut c_void;
+ fn ffi_len(&mut self) -> *mut socklen_t;
unsafe fn unwrap(self) -> T;
}
-trait Set<'a, T> {
+unsafe trait Set<'a, T> {
fn new(val: &'a T) -> Self;
- unsafe fn ffi_ptr(&self) -> *const c_void;
- unsafe fn ffi_len(&self) -> socklen_t;
+ fn ffi_ptr(&self) -> *const c_void;
+ fn ffi_len(&self) -> socklen_t;
}
struct GetStruct<T> {
@@ -196,7 +196,7 @@ struct GetStruct<T> {
val: T,
}
-impl<T> Get<T> for GetStruct<T> {
+unsafe impl<T> Get<T> for GetStruct<T> {
unsafe fn blank() -> Self {
GetStruct {
len: mem::size_of::<T>() as socklen_t,
@@ -204,11 +204,11 @@ impl<T> Get<T> for GetStruct<T> {
}
}
- unsafe fn ffi_ptr(&mut self) -> *mut c_void {
+ fn ffi_ptr(&mut self) -> *mut c_void {
&mut self.val as *mut T as *mut c_void
}
- unsafe fn ffi_len(&mut self) -> *mut socklen_t {
+ fn ffi_len(&mut self) -> *mut socklen_t {
&mut self.len
}
@@ -222,16 +222,16 @@ struct SetStruct<'a, T: 'static> {
ptr: &'a T,
}
-impl<'a, T> Set<'a, T> for SetStruct<'a, T> {
+unsafe impl<'a, T> Set<'a, T> for SetStruct<'a, T> {
fn new(ptr: &'a T) -> SetStruct<'a, T> {
SetStruct { ptr: ptr }
}
- unsafe fn ffi_ptr(&self) -> *const c_void {
+ fn ffi_ptr(&self) -> *const c_void {
self.ptr as *const T as *const c_void
}
- unsafe fn ffi_len(&self) -> socklen_t {
+ fn ffi_len(&self) -> socklen_t {
mem::size_of::<T>() as socklen_t
}
}
@@ -241,7 +241,7 @@ struct GetBool {
val: c_int,
}
-impl Get<bool> for GetBool {
+unsafe impl Get<bool> for GetBool {
unsafe fn blank() -> Self {
GetBool {
len: mem::size_of::<c_int>() as socklen_t,
@@ -249,11 +249,11 @@ impl Get<bool> for GetBool {
}
}
- unsafe fn ffi_ptr(&mut self) -> *mut c_void {
+ fn ffi_ptr(&mut self) -> *mut c_void {
&mut self.val as *mut c_int as *mut c_void
}
- unsafe fn ffi_len(&mut self) -> *mut socklen_t {
+ fn ffi_len(&mut self) -> *mut socklen_t {
&mut self.len
}
@@ -267,16 +267,16 @@ struct SetBool {
val: c_int,
}
-impl<'a> Set<'a, bool> for SetBool {
+unsafe impl<'a> Set<'a, bool> for SetBool {
fn new(val: &'a bool) -> SetBool {
SetBool { val: if *val { 1 } else { 0 } }
}
- unsafe fn ffi_ptr(&self) -> *const c_void {
+ fn ffi_ptr(&self) -> *const c_void {
&self.val as *const c_int as *const c_void
}
- unsafe fn ffi_len(&self) -> socklen_t {
+ fn ffi_len(&self) -> socklen_t {
mem::size_of::<c_int>() as socklen_t
}
}
@@ -286,7 +286,7 @@ struct GetU8 {
val: uint8_t,
}
-impl Get<u8> for GetU8 {
+unsafe impl Get<u8> for GetU8 {
unsafe fn blank() -> Self {
GetU8 {
len: mem::size_of::<uint8_t>() as socklen_t,
@@ -294,11 +294,11 @@ impl Get<u8> for GetU8 {
}
}
- unsafe fn ffi_ptr(&mut self) -> *mut c_void {
+ fn ffi_ptr(&mut self) -> *mut c_void {
&mut self.val as *mut uint8_t as *mut c_void
}
- unsafe fn ffi_len(&mut self) -> *mut socklen_t {
+ fn ffi_len(&mut self) -> *mut socklen_t {
&mut self.len
}
@@ -312,16 +312,16 @@ struct SetU8 {
val: uint8_t,
}
-impl<'a> Set<'a, u8> for SetU8 {
+unsafe impl<'a> Set<'a, u8> for SetU8 {
fn new(val: &'a u8) -> SetU8 {
SetU8 { val: *val as uint8_t }
}
- unsafe fn ffi_ptr(&self) -> *const c_void {
+ fn ffi_ptr(&self) -> *const c_void {
&self.val as *const uint8_t as *const c_void
}
- unsafe fn ffi_len(&self) -> socklen_t {
+ fn ffi_len(&self) -> socklen_t {
mem::size_of::<c_int>() as socklen_t
}
}
@@ -331,7 +331,7 @@ struct GetUsize {
val: c_int,
}
-impl Get<usize> for GetUsize {
+unsafe impl Get<usize> for GetUsize {
unsafe fn blank() -> Self {
GetUsize {
len: mem::size_of::<c_int>() as socklen_t,
@@ -339,11 +339,11 @@ impl Get<usize> for GetUsize {
}
}
- unsafe fn ffi_ptr(&mut self) -> *mut c_void {
+ fn ffi_ptr(&mut self) -> *mut c_void {
&mut self.val as *mut c_int as *mut c_void
}
- unsafe fn ffi_len(&mut self) -> *mut socklen_t {
+ fn ffi_len(&mut self) -> *mut socklen_t {
&mut self.len
}
@@ -357,16 +357,16 @@ struct SetUsize {
val: c_int,
}
-impl<'a> Set<'a, usize> for SetUsize {
+unsafe impl<'a> Set<'a, usize> for SetUsize {
fn new(val: &'a usize) -> SetUsize {
SetUsize { val: *val as c_int }
}
- unsafe fn ffi_ptr(&self) -> *const c_void {
+ fn ffi_ptr(&self) -> *const c_void {
&self.val as *const c_int as *const c_void
}
- unsafe fn ffi_len(&self) -> socklen_t {
+ fn ffi_len(&self) -> socklen_t {
mem::size_of::<c_int>() as socklen_t
}
}