Skip to content

Commit 535bc15

Browse files
committed
Generic GetCString
1 parent 837458a commit 535bc15

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

src/sys/socket/sockopt.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ macro_rules! sockopt_impl {
154154
sockopt_impl!(Both, $name, $level, $flag, usize, GetUsize, SetUsize);
155155
};
156156

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);
159159
};
160160

161161
/*
@@ -264,7 +264,8 @@ sockopt_impl!(Both, Mark, libc::SOL_SOCKET, libc::SO_MARK, u32);
264264
#[cfg(any(target_os = "android", target_os = "linux"))]
265265
sockopt_impl!(Both, PassCred, libc::SOL_SOCKET, libc::SO_PASSCRED, bool);
266266
#[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)
268269

269270
/*
270271
*
@@ -486,26 +487,22 @@ unsafe impl<'a> Set<'a, usize> for SetUsize {
486487
}
487488
}
488489

489-
/// Size of empty CString buffer
490-
/// There is no default size in kernel documentation
491-
const SIZE_CSTRING_MAX : usize = 64;
492-
493490
/// Getter for a `CString` value.
494-
struct GetCString {
491+
struct GetCString<T> {
495492
len: socklen_t,
496-
val: [u8; SIZE_CSTRING_MAX],
493+
val: T,
497494
}
498495

499-
unsafe impl Get<CString> for GetCString {
496+
unsafe impl<T> Get<CString> for GetCString<T> {
500497
unsafe fn blank() -> Self {
501498
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(),
504501
}
505502
}
506503

507504
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
509506
}
510507

511508
fn ffi_len(&mut self) -> *mut socklen_t {

0 commit comments

Comments
 (0)