Skip to content

Commit c86572d

Browse files
committed
Use with_slice_mut
1 parent ecfe9d9 commit c86572d

4 files changed

Lines changed: 24 additions & 21 deletions

File tree

‎rules/pwd/tgt_refcount.rs‎

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ fn f2(a0: u32, a1: Ptr<Passwd>, a2: Ptr<u8>, a3: usize, a4: Ptr<Ptr<Passwd>>) ->
3131
let mut __off: usize = 0;
3232
for __s in &__strs {
3333
__ptrs.push(__buf.offset(__off));
34-
let mut __dst = __buf.offset(__off);
35-
for __b in __s.iter() {
36-
__dst.write(*__b);
37-
__dst += 1;
38-
}
39-
__dst.write(0);
40-
__off += __s.len() + 1;
34+
let __end = __s.len();
35+
__buf.offset(__off).with_slice_mut(__end + 1, |__sl| {
36+
__sl[..__end].copy_from_slice(__s);
37+
__sl[__end] = 0;
38+
});
39+
__off += __end + 1;
4140
}
4241
__pwbuf.with_mut(|__pw| *__pw = Passwd::from_user_in(&__u, &__ptrs));
4342
__out.write(__pwbuf.clone());

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

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,12 @@ pub fn test_getpwuid_r_2() {
8989
let mut __off: usize = 0;
9090
for __s in &__strs {
9191
__ptrs.push(__buf.offset(__off));
92-
let mut __dst = __buf.offset(__off);
93-
for __b in __s.iter() {
94-
__dst.write(*__b);
95-
__dst += 1;
96-
}
97-
__dst.write(0);
98-
__off += __s.len() + 1;
92+
let __end = __s.len();
93+
__buf.offset(__off).with_slice_mut(__end + 1, |__sl| {
94+
__sl[..__end].copy_from_slice(__s);
95+
__sl[__end] = 0;
96+
});
97+
__off += __end + 1;
9998
}
10099
__pwbuf.with_mut(|__pw| *__pw = Passwd::from_user_in(&__u, &__ptrs));
101100
__out.write(__pwbuf.clone());
@@ -170,6 +169,7 @@ pub fn test_getpwuid_r_erange_3() {
170169
));
171170
let result: Value<Ptr<libcc2rs::Passwd>> =
172171
Rc::new(RefCell::new(Ptr::<libcc2rs::Passwd>::null()));
172+
libcc2rs::cpp2rust_errno().write(0);
173173
assert!(
174174
((({
175175
let __pwbuf = (pw.as_pointer()).clone();
@@ -197,13 +197,12 @@ pub fn test_getpwuid_r_erange_3() {
197197
let mut __off: usize = 0;
198198
for __s in &__strs {
199199
__ptrs.push(__buf.offset(__off));
200-
let mut __dst = __buf.offset(__off);
201-
for __b in __s.iter() {
202-
__dst.write(*__b);
203-
__dst += 1;
204-
}
205-
__dst.write(0);
206-
__off += __s.len() + 1;
200+
let __end = __s.len();
201+
__buf.offset(__off).with_slice_mut(__end + 1, |__sl| {
202+
__sl[..__end].copy_from_slice(__s);
203+
__sl[__end] = 0;
204+
});
205+
__off += __end + 1;
207206
}
208207
__pwbuf.with_mut(|__pw| *__pw = Passwd::from_user_in(&__u, &__ptrs));
209208
__out.write(__pwbuf.clone());
@@ -224,6 +223,7 @@ pub fn test_getpwuid_r_erange_3() {
224223
!= 0)
225224
);
226225
assert!(((((*result.borrow()).is_null()) as i32) != 0));
226+
assert!(((((libcc2rs::cpp2rust_errno().read()) == 34) as i32) != 0));
227227
}
228228
pub fn main() {
229229
std::process::exit(main_0());

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ pub unsafe fn test_getpwuid_r_erange_3() {
5656
let mut pw: ::libc::passwd = unsafe { std::mem::zeroed() };
5757
let mut tiny: [libc::c_char; 1] = [(0 as libc::c_char); 1];
5858
let mut result: *mut ::libc::passwd = std::ptr::null_mut();
59+
(*libcc2rs::cpp2rust_errno_unsafe()) = 0;
5960
assert!(
6061
((((libc::getpwuid_r(
6162
libc::geteuid(),
@@ -67,6 +68,7 @@ pub unsafe fn test_getpwuid_r_erange_3() {
6768
!= 0)
6869
);
6970
assert!(((((result).is_null()) as i32) != 0));
71+
assert!(((((*libcc2rs::cpp2rust_errno_unsafe()) == (34)) as i32) != 0));
7072
}
7173
pub fn main() {
7274
unsafe {

‎tests/unit/pwd.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ static void test_getpwuid_r_erange(void) {
4040
struct passwd pw;
4141
char tiny[1];
4242
struct passwd *result = NULL;
43+
errno = 0;
4344
assert(getpwuid_r(geteuid(), &pw, tiny, sizeof(tiny), &result) == ERANGE);
4445
assert(result == NULL);
46+
assert(errno == ERANGE);
4547
}
4648

4749
int main(void) {

0 commit comments

Comments
 (0)