summaryrefslogtreecommitdiff
path: root/src/mqueue.rs
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2016-02-19 17:22:50 +0300
committerNikolay Amiantov <ab@fmap.me>2016-02-20 02:48:44 +0300
commit8ca6d821e466b38721c5c7e8c9ef6d2758bc9504 (patch)
tree7aba8137f44e21efa91808d1aa73c2677fd90400 /src/mqueue.rs
parent7fa7206e9ffe4a74762e4a8c1cdc1b8a480d07bb (diff)
downloadnix-8ca6d821e466b38721c5c7e8c9ef6d2758bc9504.zip
mqueue: change types to allow more cases
Diffstat (limited to 'src/mqueue.rs')
-rw-r--r--src/mqueue.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/mqueue.rs b/src/mqueue.rs
index bc3eca2c..5539f777 100644
--- a/src/mqueue.rs
+++ b/src/mqueue.rs
@@ -4,9 +4,10 @@
use {Errno, Result};
-use libc::{c_int, c_long, c_char, size_t, mode_t, strlen};
+use libc::{c_int, c_long, c_char, size_t, mode_t};
use std::ffi::CString;
use sys::stat::Mode;
+use std::ptr;
pub use self::consts::*;
@@ -75,9 +76,9 @@ impl MqAttr {
}
-#[inline]
-pub fn mq_open(name: &CString, oflag: MQ_OFlag, mode: Mode, attr: &MqAttr) -> Result<MQd> {
- let res = unsafe { ffi::mq_open(name.as_ptr(), oflag.bits(), mode.bits() as mode_t, attr as *const MqAttr) };
+pub fn mq_open(name: &CString, oflag: MQ_OFlag, mode: Mode, attr: Option<&MqAttr>) -> Result<MQd> {
+ let attr_p = attr.map(|attr| attr as *const MqAttr).unwrap_or(ptr::null());
+ let res = unsafe { ffi::mq_open(name.as_ptr(), oflag.bits(), mode.bits() as mode_t, attr_p) };
Errno::result(res)
}
@@ -100,11 +101,10 @@ pub fn mq_receive(mqdes: MQd, message: &mut [u8], msq_prio: u32) -> Result<usize
Errno::result(res).map(|r| r as usize)
}
-pub fn mq_send(mqdes: MQd, message: &CString, msq_prio: u32) -> Result<usize> {
- let len = unsafe { strlen(message.as_ptr()) as size_t };
- let res = unsafe { ffi::mq_send(mqdes, message.as_ptr(), len, msq_prio) };
+pub fn mq_send(mqdes: MQd, message: &[u8], msq_prio: u32) -> Result<()> {
+ let res = unsafe { ffi::mq_send(mqdes, message.as_ptr() as *const c_char, message.len(), msq_prio) };
- Errno::result(res).map(|r| r as usize)
+ Errno::result(res).map(drop)
}
pub fn mq_getattr(mqd: MQd) -> Result<MqAttr> {