@@ -154,8 +154,8 @@ macro_rules! sockopt_impl {
154
154
sockopt_impl!( Both , $name, $level, $flag, usize , GetUsize , SetUsize ) ;
155
155
} ;
156
156
157
- ( Both , $name: ident, $level: path, $flag: path, CString ) => {
158
- sockopt_impl!( Both , $name, $level, $flag, CString , GetCString , SetCString ) ;
157
+ ( Both , $name: ident, $level: path, $flag: path, CString <$ty : ty> ) => {
158
+ sockopt_impl!( Both , $name, $level, $flag, CString , GetCString <$ty> , SetCString ) ;
159
159
} ;
160
160
161
161
/*
@@ -264,7 +264,8 @@ sockopt_impl!(Both, Mark, libc::SOL_SOCKET, libc::SO_MARK, u32);
264
264
#[ cfg( any( target_os = "android" , target_os = "linux" ) ) ]
265
265
sockopt_impl ! ( Both , PassCred , libc:: SOL_SOCKET , libc:: SO_PASSCRED , bool ) ;
266
266
#[ cfg( any( target_os = "freebsd" , target_os = "linux" ) ) ]
267
- sockopt_impl ! ( Both , TcpCongestion , libc:: IPPROTO_TCP , libc:: TCP_CONGESTION , CString ) ;
267
+ sockopt_impl ! ( Both , TcpCongestion , libc:: IPPROTO_TCP , libc:: TCP_CONGESTION , CString <[ u8 ; 16 ] >) ;
268
+ // TODO: Use libc::TCP_CA_NAME_MAX (https://github.com/rust-lang/libc/pull/1151)
268
269
269
270
/*
270
271
*
@@ -486,26 +487,22 @@ unsafe impl<'a> Set<'a, usize> for SetUsize {
486
487
}
487
488
}
488
489
489
- /// Size of empty CString buffer
490
- /// There is no default size in kernel documentation
491
- const SIZE_CSTRING_MAX : usize = 64 ;
492
-
493
490
/// Getter for a `CString` value.
494
- struct GetCString {
491
+ struct GetCString < T > {
495
492
len : socklen_t ,
496
- val : [ u8 ; SIZE_CSTRING_MAX ] ,
493
+ val : T ,
497
494
}
498
495
499
- unsafe impl Get < CString > for GetCString {
496
+ unsafe impl < T > Get < CString > for GetCString < T > {
500
497
unsafe fn blank ( ) -> Self {
501
498
GetCString {
502
- len : SIZE_CSTRING_MAX as socklen_t ,
503
- val : [ 0u8 ; SIZE_CSTRING_MAX ] ,
499
+ len : mem :: size_of :: < T > ( ) as socklen_t ,
500
+ val : mem :: zeroed ( ) ,
504
501
}
505
502
}
506
503
507
504
fn ffi_ptr ( & mut self ) -> * mut c_void {
508
- self . val . as_mut_ptr ( ) as * mut c_void
505
+ & mut self . val as * mut T as * mut c_void
509
506
}
510
507
511
508
fn ffi_len ( & mut self ) -> * mut socklen_t {
0 commit comments