Skip to content

Commit cc70c6c

Browse files
committed
Memset(0) tv fields instead of explicit 0
explicit 0 creates a diff between macos and linux because on macos the type of tv_usec is different.
1 parent 9a72cba commit cc70c6c

4 files changed

Lines changed: 35 additions & 7 deletions

File tree

‎libcc2rs/src/libc_shims/time.rs‎

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,23 @@ impl Clone for Timeval {
8989
}
9090
}
9191

92-
impl ByteRepr for Timeval {}
92+
impl ByteRepr for Timeval {
93+
fn byte_size() -> usize {
94+
16
95+
}
96+
97+
fn to_bytes(&self, buf: &mut [u8]) {
98+
(*self.tv_sec.borrow()).to_bytes(&mut buf[0..8]);
99+
(*self.tv_usec.borrow()).to_bytes(&mut buf[8..16]);
100+
}
101+
102+
fn from_bytes(buf: &[u8]) -> Self {
103+
Self {
104+
tv_sec: Rc::new(RefCell::new(i64::from_bytes(&buf[0..8]))),
105+
tv_usec: Rc::new(RefCell::new(i64::from_bytes(&buf[8..16]))),
106+
}
107+
}
108+
}
93109

94110
#[derive(Default)]
95111
pub struct Timespec {

‎tests/unit/out/refcount/select.rs‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,15 @@ fn main_0() -> i32 {
3232
(rset.as_pointer()).with_mut(|__s| __s.zero());
3333
(rset.as_pointer()).with_mut(|__s| __s.set((*fds.borrow())[(0) as usize]));
3434
let tv: Value<libcc2rs::Timeval> = Rc::new(RefCell::new(Default::default()));
35+
{
36+
((tv.as_pointer()) as Ptr<libcc2rs::Timeval>)
37+
.to_any()
38+
.memset((0) as u8, 16usize as usize);
39+
((tv.as_pointer()) as Ptr<libcc2rs::Timeval>)
40+
.to_any()
41+
.clone()
42+
};
3543
(*(*tv.borrow()).tv_sec.borrow_mut()) = 0_i64;
36-
(*(*tv.borrow()).tv_usec.borrow_mut()) = 0_i64;
3744
assert!(
3845
((({
3946
let __rp = (rset.as_pointer()).clone();
@@ -183,7 +190,6 @@ fn main_0() -> i32 {
183190
(rset.as_pointer()).with_mut(|__s| __s.zero());
184191
(rset.as_pointer()).with_mut(|__s| __s.set((*fds.borrow())[(0) as usize]));
185192
(*(*tv.borrow()).tv_sec.borrow_mut()) = 1_i64;
186-
(*(*tv.borrow()).tv_usec.borrow_mut()) = 0_i64;
187193
assert!(
188194
((({
189195
let __rp = (rset.as_pointer()).clone();

‎tests/unit/out/unsafe/select.rs‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,15 @@ unsafe fn main_0() -> i32 {
1818
libc::FD_ZERO((&mut rset as *mut ::libc::fd_set));
1919
libc::FD_SET(fds[(0) as usize], (&mut rset as *mut ::libc::fd_set));
2020
let mut tv: ::libc::timeval = unsafe { std::mem::zeroed() };
21+
{
22+
let byte_0 = ((&mut tv as *mut ::libc::timeval) as *mut ::libc::timeval
23+
as *mut ::libc::c_void) as *mut u8;
24+
for offset in 0..::std::mem::size_of::<::libc::timeval>() {
25+
*byte_0.offset(offset as isize) = 0 as u8;
26+
}
27+
((&mut tv as *mut ::libc::timeval) as *mut ::libc::timeval as *mut ::libc::c_void)
28+
};
2129
tv.tv_sec = 0_i64;
22-
tv.tv_usec = 0_i64;
2330
assert!(
2431
((((libc::select(
2532
((fds[(0) as usize]) + (1)),
@@ -49,7 +56,6 @@ unsafe fn main_0() -> i32 {
4956
libc::FD_ZERO((&mut rset as *mut ::libc::fd_set));
5057
libc::FD_SET(fds[(0) as usize], (&mut rset as *mut ::libc::fd_set));
5158
tv.tv_sec = 1_i64;
52-
tv.tv_usec = 0_i64;
5359
assert!(
5460
((((libc::select(
5561
((fds[(0) as usize]) + (1)),

‎tests/unit/select.c‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <assert.h>
2+
#include <string.h>
23
#include <sys/select.h>
34
#include <unistd.h>
45

@@ -9,15 +10,14 @@ int main(void) {
910
FD_ZERO(&rset);
1011
FD_SET(fds[0], &rset);
1112
struct timeval tv;
13+
memset(&tv, 0, sizeof(tv));
1214
tv.tv_sec = 0;
13-
tv.tv_usec = 0;
1415
assert(select(fds[0] + 1, &rset, NULL, NULL, &tv) == 0);
1516
assert(!FD_ISSET(fds[0], &rset));
1617
assert(write(fds[1], "x", 1) == 1);
1718
FD_ZERO(&rset);
1819
FD_SET(fds[0], &rset);
1920
tv.tv_sec = 1;
20-
tv.tv_usec = 0;
2121
assert(select(fds[0] + 1, &rset, NULL, NULL, &tv) == 1);
2222
assert(FD_ISSET(fds[0], &rset));
2323
assert(close(fds[0]) == 0);

0 commit comments

Comments
 (0)