summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryant Mairs <bryantmairs@google.com>2017-12-06 19:53:55 -0800
committerBryant Mairs <bryantmairs@google.com>2017-12-07 18:30:41 -0800
commit011ba6d8f26d43e3d7ef7e86a0de74a7973b8b84 (patch)
tree43445cc9e00dc6b9cc7ba4ba005933b7cea99602
parent6cf652ed36d03080fe13ce43034d527fd321be1c (diff)
downloadrust-libc-011ba6d8f26d43e3d7ef7e86a0de74a7973b8b84.tar.gz
Add ucred-like structs for FreeBSDs and NetBSD
-rw-r--r--src/dox.rs1
-rw-r--r--src/unix/bsd/freebsdlike/mod.rs11
-rw-r--r--src/unix/bsd/netbsdlike/netbsd/mod.rs21
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 {