4
4
5
5
use { Errno , Result } ;
6
6
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} ;
8
8
use std:: ffi:: CString ;
9
9
use sys:: stat:: Mode ;
10
+ use std:: ptr;
10
11
11
12
pub use self :: consts:: * ;
12
13
@@ -75,9 +76,9 @@ impl MqAttr {
75
76
}
76
77
77
78
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 ) } ;
81
82
82
83
Errno :: result ( res)
83
84
}
@@ -100,11 +101,10 @@ pub fn mq_receive(mqdes: MQd, message: &mut [u8], msq_prio: u32) -> Result<usize
100
101
Errno :: result ( res) . map ( |r| r as usize )
101
102
}
102
103
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) } ;
106
106
107
- Errno :: result ( res) . map ( |r| r as usize )
107
+ Errno :: result ( res) . map ( drop )
108
108
}
109
109
110
110
pub fn mq_getattr ( mqd : MQd ) -> Result < MqAttr > {
0 commit comments