Auto merge of #871 - asomers:mq, r=alexcrichton
POSIX mqueue bindings for the BSDs Note that OpenBSD and OSX do not support POSIX message queues.
This commit is contained in:
commit
a8c0a3bf3e
@ -269,6 +269,7 @@ fn main() {
|
||||
}
|
||||
|
||||
if freebsd {
|
||||
cfg.header("mqueue.h");
|
||||
cfg.header("pthread_np.h");
|
||||
cfg.header("sched.h");
|
||||
cfg.header("ufs/ufs/quota.h");
|
||||
@ -279,6 +280,7 @@ fn main() {
|
||||
}
|
||||
|
||||
if netbsd {
|
||||
cfg.header("mqueue.h");
|
||||
cfg.header("ufs/ufs/quota.h");
|
||||
cfg.header("ufs/ufs/quota1.h");
|
||||
cfg.header("sys/ioctl_compat.h");
|
||||
@ -294,6 +296,7 @@ fn main() {
|
||||
}
|
||||
|
||||
if dragonfly {
|
||||
cfg.header("mqueue.h");
|
||||
cfg.header("ufs/ufs/quota.h");
|
||||
cfg.header("pthread_np.h");
|
||||
cfg.header("sys/ioctl_compat.h");
|
||||
@ -425,7 +428,9 @@ fn main() {
|
||||
"uuid_t" if dragonfly => true,
|
||||
n if n.starts_with("pthread") => true,
|
||||
// sem_t is a struct or pointer
|
||||
"sem_t" if openbsd || freebsd || dragonfly || rumprun => true,
|
||||
"sem_t" if openbsd || freebsd || dragonfly || netbsd => true,
|
||||
// mqd_t is a pointer on FreeBSD and DragonFly
|
||||
"mqd_t" if freebsd || dragonfly => true,
|
||||
|
||||
// windows-isms
|
||||
n if n.starts_with("P") => true,
|
||||
@ -591,6 +596,16 @@ fn main() {
|
||||
"shm_open" |
|
||||
"shm_unlink" |
|
||||
"syscall" |
|
||||
"mq_open" |
|
||||
"mq_close" |
|
||||
"mq_getattr" |
|
||||
"mq_notify" |
|
||||
"mq_receive" |
|
||||
"mq_send" |
|
||||
"mq_setattr" |
|
||||
"mq_timedreceive" |
|
||||
"mq_timedsend" |
|
||||
"mq_unlink" |
|
||||
"ptrace" |
|
||||
"sigaltstack" if rumprun => true,
|
||||
|
||||
|
@ -72,6 +72,13 @@ s! {
|
||||
pub node: [u8; 6],
|
||||
}
|
||||
|
||||
pub struct mq_attr {
|
||||
pub mq_flags: ::c_long,
|
||||
pub mq_maxmsg: ::c_long,
|
||||
pub mq_msgsize: ::c_long,
|
||||
pub mq_curmsgs: ::c_long,
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_notify: ::c_int,
|
||||
// The union is 8-byte in size, so it is aligned at a 8-byte offset.
|
||||
|
@ -62,6 +62,14 @@ s! {
|
||||
pub ip6: *mut ::in6_addr,
|
||||
}
|
||||
|
||||
pub struct mq_attr {
|
||||
pub mq_flags: ::c_long,
|
||||
pub mq_maxmsg: ::c_long,
|
||||
pub mq_msgsize: ::c_long,
|
||||
pub mq_curmsgs: ::c_long,
|
||||
__reserved: [::c_long; 4]
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_notify: ::c_int,
|
||||
pub sigev_signo: ::c_int,
|
||||
|
@ -3,6 +3,7 @@ pub type dev_t = u32;
|
||||
pub type mode_t = u16;
|
||||
pub type pthread_attr_t = *mut ::c_void;
|
||||
pub type rlim_t = i64;
|
||||
pub type mqd_t = *mut ::c_void;
|
||||
pub type pthread_mutex_t = *mut ::c_void;
|
||||
pub type pthread_mutexattr_t = *mut ::c_void;
|
||||
pub type pthread_cond_t = *mut ::c_void;
|
||||
@ -988,6 +989,32 @@ extern {
|
||||
groups: *mut ::gid_t,
|
||||
ngroups: *mut ::c_int) -> ::c_int;
|
||||
pub fn initgroups(name: *const ::c_char, basegid: ::gid_t) -> ::c_int;
|
||||
pub fn mq_open(name: *const ::c_char, oflag: ::c_int, ...) -> ::mqd_t;
|
||||
pub fn mq_close(mqd: ::mqd_t) -> ::c_int;
|
||||
pub fn mq_getattr(mqd: ::mqd_t, attr: *mut ::mq_attr) -> ::c_int;
|
||||
pub fn mq_notify(mqd: ::mqd_t, notification: *const ::sigevent) -> ::c_int;
|
||||
pub fn mq_receive(mqd: ::mqd_t,
|
||||
msg_ptr: *mut ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: *mut ::c_uint) -> ::ssize_t;
|
||||
pub fn mq_send(mqd: ::mqd_t,
|
||||
msg_ptr: *const ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: ::c_uint) -> ::c_int;
|
||||
pub fn mq_setattr(mqd: ::mqd_t,
|
||||
newattr: *const ::mq_attr,
|
||||
oldattr: *mut ::mq_attr) -> ::c_int;
|
||||
pub fn mq_timedreceive(mqd: ::mqd_t,
|
||||
msg_ptr: *mut ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: *mut ::c_uint,
|
||||
abs_timeout: *const ::timespec) -> ::ssize_t;
|
||||
pub fn mq_timedsend(mqd: ::mqd_t,
|
||||
msg_ptr: *const ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: ::c_uint,
|
||||
abs_timeout: *const ::timespec) -> ::c_int;
|
||||
pub fn mq_unlink(name: *const ::c_char) -> ::c_int;
|
||||
}
|
||||
|
||||
#[link(name = "util")]
|
||||
|
@ -8,6 +8,7 @@ pub type blksize_t = ::int32_t;
|
||||
pub type fsblkcnt_t = ::uint64_t;
|
||||
pub type fsfilcnt_t = ::uint64_t;
|
||||
pub type idtype_t = ::c_int;
|
||||
pub type mqd_t = ::c_int;
|
||||
|
||||
s! {
|
||||
pub struct aiocb {
|
||||
@ -47,6 +48,13 @@ s! {
|
||||
__unused8: *mut ::c_void,
|
||||
}
|
||||
|
||||
pub struct mq_attr {
|
||||
pub mq_flags: ::c_long,
|
||||
pub mq_maxmsg: ::c_long,
|
||||
pub mq_msgsize: ::c_long,
|
||||
pub mq_curmsgs: ::c_long,
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_notify: ::c_int,
|
||||
pub sigev_signo: ::c_int,
|
||||
@ -1010,6 +1018,32 @@ extern {
|
||||
flags: ::c_int,
|
||||
data: *mut ::c_void,
|
||||
size: ::size_t) -> ::c_int;
|
||||
pub fn mq_open(name: *const ::c_char, oflag: ::c_int, ...) -> ::mqd_t;
|
||||
pub fn mq_close(mqd: ::mqd_t) -> ::c_int;
|
||||
pub fn mq_getattr(mqd: ::mqd_t, attr: *mut ::mq_attr) -> ::c_int;
|
||||
pub fn mq_notify(mqd: ::mqd_t, notification: *const ::sigevent) -> ::c_int;
|
||||
pub fn mq_receive(mqd: ::mqd_t,
|
||||
msg_ptr: *mut ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: *mut ::c_uint) -> ::ssize_t;
|
||||
pub fn mq_send(mqd: ::mqd_t,
|
||||
msg_ptr: *const ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: ::c_uint) -> ::c_int;
|
||||
pub fn mq_setattr(mqd: ::mqd_t,
|
||||
newattr: *const ::mq_attr,
|
||||
oldattr: *mut ::mq_attr) -> ::c_int;
|
||||
pub fn mq_timedreceive(mqd: ::mqd_t,
|
||||
msg_ptr: *mut ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: *mut ::c_uint,
|
||||
abs_timeout: *const ::timespec) -> ::ssize_t;
|
||||
pub fn mq_timedsend(mqd: ::mqd_t,
|
||||
msg_ptr: *const ::c_char,
|
||||
msg_len: ::size_t,
|
||||
msq_prio: ::c_uint,
|
||||
abs_timeout: *const ::timespec) -> ::c_int;
|
||||
pub fn mq_unlink(name: *const ::c_char) -> ::c_int;
|
||||
pub fn ptrace(request: ::c_int,
|
||||
pid: ::pid_t,
|
||||
addr: *mut ::c_void,
|
||||
|
Loading…
Reference in New Issue
Block a user