Skip to content

Commit f2343cd

Browse files
committed
Auto merge of #271 - abbradar:mqueue-fixes, r=kamalmarhubi
mqueue: change types to allow more cases Part of #270, fixed according to @kamalmarhubi's comments.
2 parents 7fa7206 + 62ec478 commit f2343cd

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/mqueue.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
55
use {Errno, Result};
66

7-
use libc::{c_int, c_long, c_char, size_t, mode_t, strlen};
7+
use libc::{c_int, c_long, c_char, size_t, mode_t};
88
use std::ffi::CString;
99
use sys::stat::Mode;
10+
use std::ptr;
1011

1112
pub use self::consts::*;
1213

@@ -75,9 +76,9 @@ impl MqAttr {
7576
}
7677

7778

78-
#[inline]
79-
pub fn mq_open(name: &CString, oflag: MQ_OFlag, mode: Mode, attr: &MqAttr) -> Result<MQd> {
80-
let res = unsafe { ffi::mq_open(name.as_ptr(), oflag.bits(), mode.bits() as mode_t, attr as *const MqAttr) };
79+
pub fn mq_open(name: &CString, oflag: MQ_OFlag, mode: Mode, attr: Option<&MqAttr>) -> Result<MQd> {
80+
let attr_p = attr.map(|attr| attr as *const _).unwrap_or(ptr::null());
81+
let res = unsafe { ffi::mq_open(name.as_ptr(), oflag.bits(), mode.bits() as mode_t, attr_p) };
8182

8283
Errno::result(res)
8384
}
@@ -100,11 +101,10 @@ pub fn mq_receive(mqdes: MQd, message: &mut [u8], msq_prio: u32) -> Result<usize
100101
Errno::result(res).map(|r| r as usize)
101102
}
102103

103-
pub fn mq_send(mqdes: MQd, message: &CString, msq_prio: u32) -> Result<usize> {
104-
let len = unsafe { strlen(message.as_ptr()) as size_t };
105-
let res = unsafe { ffi::mq_send(mqdes, message.as_ptr(), len, msq_prio) };
104+
pub fn mq_send(mqdes: MQd, message: &[u8], msq_prio: u32) -> Result<()> {
105+
let res = unsafe { ffi::mq_send(mqdes, message.as_ptr() as *const c_char, message.len(), msq_prio) };
106106

107-
Errno::result(res).map(|r| r as usize)
107+
Errno::result(res).map(drop)
108108
}
109109

110110
pub fn mq_getattr(mqd: MQd) -> Result<MqAttr> {

0 commit comments

Comments
 (0)