1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
pub use self::os::{mqd_t}; pub use self::os::{mq_attr}; use {NTStr, int_t, uint_t, char_t, size_t, ssize_t}; use signal::{sigevent}; use time::{timespec}; use sys::types::{mode_t}; #[cfg(target_os = "linux")] #[path = "linux/mod.rs"] mod os; pub fn mq_close(mqdes: mqd_t) -> int_t { extern { fn mq_close(mqdes: mqd_t) -> int_t; } unsafe { mq_close(mqdes) } } pub fn mq_getattr(mqdes: mqd_t, mqstat: &mut mq_attr) -> int_t { extern { fn mq_getattr(mqdes: mqd_t, mqstat: *mut mq_attr) -> int_t; } unsafe { mq_getattr(mqdes, mqstat as *mut _) } } pub fn mq_notify(mqdes: mqd_t, notification: &sigevent) -> int_t { extern { fn mq_notify(mqdes: mqd_t, notification: *const sigevent) -> int_t; } unsafe { mq_notify(mqdes, notification as *const _) } } pub fn mq_receive(mqdes: mqd_t, buf: &mut [u8], msg_prio: Option<&mut uint_t>) -> ssize_t { extern { fn mq_receive(mqdes: mqd_t, msg_ptr: *mut char_t, msg_len: size_t, msg_prio: *mut uint_t) -> ssize_t; } let ptr = msg_prio.map(|v| v as *mut _).unwrap_or(0 as *mut uint_t); unsafe { mq_receive(mqdes, buf.as_mut_ptr() as *mut _, buf.len() as size_t, ptr) } } pub fn mq_send(mqdes: mqd_t, buf: &[u8], prio: uint_t) -> int_t { extern { fn mq_send(mqdes: mqd_t, msg_ptr: *const char_t, msg_len: size_t, msg_prio: uint_t) -> int_t; } unsafe { mq_send(mqdes, buf.as_ptr() as *const _, buf.len() as size_t, prio) } } pub fn mq_setattr(mqdes: mqd_t, newattr: &mq_attr, oldattr: Option<&mut mq_attr>) -> int_t { extern { fn mq_setattr(mqdes: mqd_t, mqstat: *const mq_attr, omqstat: *mut mq_attr) -> int_t; } let ptr = oldattr.map(|v| v as *mut _).unwrap_or(0 as *mut _); unsafe { mq_setattr(mqdes, newattr as *const _, ptr) } } pub fn mq_timedreceive(mqdes: mqd_t, buf: &mut [u8], prio: Option<&mut uint_t>, timeout: ×pec) -> ssize_t { extern { fn mq_timedreceive(mqdes: mqd_t, msg_ptr: *mut char_t, msg_len: size_t, msg_prio: *mut uint_t, abs_timeout: *const timespec) -> ssize_t; } let ptr = prio.map(|v| v as *mut _).unwrap_or(0 as *mut uint_t); unsafe { mq_timedreceive(mqdes, buf.as_mut_ptr() as *mut _, buf.len() as size_t, ptr, timeout as *const _) } } pub fn mq_timedsend(mqdes: mqd_t, buf: &[u8], prio: uint_t, timeout: ×pec) -> int_t { extern { fn mq_timedsend(mqdes: mqd_t, msg_ptr: *const char_t, msg_len: size_t, msg_prio: uint_t, abs_timeout: *const timespec) -> int_t; } unsafe { mq_timedsend(mqdes, buf.as_ptr() as *const _, buf.len() as size_t, prio, timeout as *const _) } } pub fn mq_unlink<T: NTStr>(name: &T) -> int_t { extern { fn mq_unlink(name: *const char_t) -> int_t; } unsafe { mq_unlink(name.as_ptr()) } } pub fn mq_open<T: NTStr>(name: &T, oflag: int_t, mode: Option<mode_t>, attr: Option<&mut mq_attr>) -> mqd_t { extern { fn mq_open(name: *const char_t, oflag: int_t, ...) -> mqd_t; } match mode { Some(m) => { let ptr = attr.map(|v| v as *mut mq_attr).unwrap_or(0 as *mut _); unsafe { mq_open(name.as_ptr(), oflag, m, ptr) } }, _ => unsafe { mq_open(name.as_ptr(), oflag) }, } }