44
55use { 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} ;
88use std:: ffi:: CString ;
99use sys:: stat:: Mode ;
10+ use std:: ptr;
1011
1112pub 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
110110pub fn mq_getattr ( mqd : MQd ) -> Result < MqAttr > {
0 commit comments