diff options
author | Bryant Mairs <bryantmairs@google.com> | 2017-12-06 19:53:55 -0800 |
---|---|---|
committer | Bryant Mairs <bryantmairs@google.com> | 2017-12-07 18:30:41 -0800 |
commit | 011ba6d8f26d43e3d7ef7e86a0de74a7973b8b84 (patch) | |
tree | 43445cc9e00dc6b9cc7ba4ba005933b7cea99602 | |
parent | 6cf652ed36d03080fe13ce43034d527fd321be1c (diff) | |
download | rust-libc-011ba6d8f26d43e3d7ef7e86a0de74a7973b8b84.tar.gz |
Add ucred-like structs for FreeBSDs and NetBSD
-rw-r--r-- | src/dox.rs | 1 | ||||
-rw-r--r-- | src/unix/bsd/freebsdlike/mod.rs | 11 | ||||
-rw-r--r-- | src/unix/bsd/netbsdlike/netbsd/mod.rs | 21 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/dox.rs b/src/dox.rs index 6a1b6883df..5c095b9c76 100644 --- a/src/dox.rs +++ b/src/dox.rs @@ -146,5 +146,6 @@ mod imp { pub mod mem { pub fn size_of_val<T>(_: &T) -> usize { 4 } + pub fn size_of<T>(_: &T) -> usize { 4 } } } diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs index 5703e073b7..215acee6f2 100644 --- a/src/unix/bsd/freebsdlike/mod.rs +++ b/src/unix/bsd/freebsdlike/mod.rs @@ -159,6 +159,15 @@ s! { pub int_p_sign_posn: ::c_char, pub int_n_sign_posn: ::c_char, } + + pub struct cmsgcred { + pub cmcred_pid: ::pid_t, + pub cmcred_uid: ::uid_t, + pub cmcred_euid: ::uid_t, + pub cmcred_gid: ::gid_t, + pub cmcred_ngroups: ::c_short, + pub cmcred_groups: [::gid_t; CMGROUP_MAX], + } } pub const AIO_LISTIO_MAX: ::c_int = 16; @@ -934,6 +943,8 @@ pub const OCRNL: ::tcflag_t = 0x10; pub const ONOCR: ::tcflag_t = 0x20; pub const ONLRET: ::tcflag_t = 0x40; +pub const CMGROUP_MAX: usize = 16; + f! { pub fn WIFCONTINUED(status: ::c_int) -> bool { status == 0x13 diff --git a/src/unix/bsd/netbsdlike/netbsd/mod.rs b/src/unix/bsd/netbsdlike/netbsd/mod.rs index fb8043c68e..45b728209b 100644 --- a/src/unix/bsd/netbsdlike/netbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/netbsd/mod.rs @@ -1,3 +1,5 @@ +use dox::mem; + pub type clock_t = ::c_uint; pub type suseconds_t = ::c_int; pub type dev_t = u64; @@ -281,6 +283,16 @@ s! { pub ifm_index: ::c_ushort, pub ifm_data: if_data, } + + pub struct sockcred { + pub sc_pid: ::pid_t, + pub sc_uid: ::uid_t, + pub sc_euid: ::uid_t, + pub sc_gid: ::gid_t, + pub sc_egid: ::gid_t, + pub sc_ngroups: ::c_int, + pub sc_groups: [::gid_t; 1], + } } pub const AT_FDCWD: ::c_int = -100; @@ -916,6 +928,15 @@ f! { pub fn WIFCONTINUED(status: ::c_int) -> bool { status == 0xffff } + + pub fn SOCKCREDSIZE(ngrps: usize) -> usize { + let ngrps = if ngrps > 0 { + ngrps - 1 + } else { + 0 + }; + mem::size_of::<sockcred>() + mem::size_of::<::gid_t>() * ngrps + } } extern { |