Skip to content

Commit ca59c4c

Browse files
committed
ffi: fix panic in lend and lend_mut
1 parent ea87446 commit ca59c4c

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

library/std/src/os/xous/ffi.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ fn lend_mut_impl(
6565
blocking: bool,
6666
) -> Result<(usize, usize), Error> {
6767
let range = unsafe { MemoryRange::new(data.as_mut_ptr() as usize, data.len())? };
68-
let msg = xous::Message::new_lend_mut(opcode, range, Some(arg1.try_into().unwrap()), Some(arg2.try_into().unwrap()));
68+
let offset = if arg1 != 0 { Some(arg1.try_into().unwrap()) } else { None };
69+
let valid = if arg2 != 0 { Some(arg2.try_into().unwrap()) } else { None };
70+
let msg = xous::Message::new_lend_mut(opcode, range, offset, valid);
6971

7072
let result = if blocking {
7173
xous::send_message(connection, msg)?
@@ -74,7 +76,9 @@ fn lend_mut_impl(
7476
};
7577

7678
match result {
77-
xous::Result::MemoryReturned(a, b) => Ok((a.unwrap().get(), b.unwrap().get())),
79+
xous::Result::MemoryReturned(arg1, arg2) => Ok(
80+
(arg1.map(|v| v.get()).unwrap_or_default(), arg2.map(|v| v.get()).unwrap_or_default())
81+
),
7882
xous::Result::Error(e) => Err(e.into()),
7983
_ => Err(Error::InternalError),
8084
}
@@ -109,7 +113,10 @@ fn lend_impl(
109113
blocking: bool,
110114
) -> Result<(usize, usize), Error> {
111115
let range = unsafe { MemoryRange::new(data.as_ptr() as usize, data.len())? };
112-
let msg = xous::Message::new_lend(opcode, range, Some(arg1.try_into().unwrap()), Some(arg2.try_into().unwrap()));
116+
let offset = if arg1 != 0 { Some(arg1.try_into().unwrap()) } else { None };
117+
let valid = if arg2 != 0 { Some(arg2.try_into().unwrap()) } else { None };
118+
119+
let msg = xous::Message::new_lend(opcode, range, offset, valid);
113120

114121
let result = if blocking {
115122
xous::send_message(connection, msg)?
@@ -118,7 +125,9 @@ fn lend_impl(
118125
};
119126

120127
match result {
121-
xous::Result::MemoryReturned(a, b) => Ok((a.unwrap().get(), b.unwrap().get())),
128+
xous::Result::MemoryReturned(arg1, arg2) => Ok(
129+
(arg1.map(|v| v.get()).unwrap_or_default(), arg2.map(|v| v.get()).unwrap_or_default())
130+
),
122131
xous::Result::Error(e) => Err(e.into()),
123132
_ => Err(Error::InternalError),
124133
}

0 commit comments

Comments
 (0)