mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-24 01:43:22 +00:00
Make VmReader's several methods accept &mut self
This commit is contained in:
committed by
Qingsong Chen
parent
9872adaa71
commit
0e1c660225
@ -415,18 +415,16 @@ impl InitStackReader<'_> {
|
||||
return_errno_with_message!(Errno::EACCES, "Page not accessible");
|
||||
};
|
||||
|
||||
let mut arg_ptr_reader = frame.reader().skip(read_offset - page_base_addr);
|
||||
let mut arg_ptr_reader = frame.reader();
|
||||
arg_ptr_reader.skip(read_offset - page_base_addr);
|
||||
for _ in 0..argc {
|
||||
let arg = {
|
||||
let arg_ptr = arg_ptr_reader.read_val::<Vaddr>()?;
|
||||
let arg_offset = arg_ptr
|
||||
.checked_sub(page_base_addr)
|
||||
.ok_or_else(|| Error::with_message(Errno::EINVAL, "arg_ptr is corrupted"))?;
|
||||
let mut arg_reader = frame
|
||||
.reader()
|
||||
.skip(arg_offset)
|
||||
.to_fallible()
|
||||
.limit(MAX_ARG_LEN);
|
||||
let mut arg_reader = frame.reader().to_fallible();
|
||||
arg_reader.skip(arg_offset).limit(MAX_ARG_LEN);
|
||||
arg_reader.read_cstring()?
|
||||
};
|
||||
argv.push(arg);
|
||||
@ -457,7 +455,8 @@ impl InitStackReader<'_> {
|
||||
return_errno_with_message!(Errno::EACCES, "Page not accessible");
|
||||
};
|
||||
|
||||
let mut envp_ptr_reader = frame.reader().skip(read_offset - page_base_addr);
|
||||
let mut envp_ptr_reader = frame.reader();
|
||||
envp_ptr_reader.skip(read_offset - page_base_addr);
|
||||
for _ in 0..MAX_ENVP_NUMBER {
|
||||
let env = {
|
||||
let envp_ptr = envp_ptr_reader.read_val::<Vaddr>()?;
|
||||
@ -469,11 +468,8 @@ impl InitStackReader<'_> {
|
||||
let envp_offset = envp_ptr
|
||||
.checked_sub(page_base_addr)
|
||||
.ok_or_else(|| Error::with_message(Errno::EINVAL, "envp is corrupted"))?;
|
||||
let mut envp_reader = frame
|
||||
.reader()
|
||||
.skip(envp_offset)
|
||||
.to_fallible()
|
||||
.limit(MAX_ENV_LEN);
|
||||
let mut envp_reader = frame.reader().to_fallible();
|
||||
envp_reader.skip(envp_offset).limit(MAX_ENV_LEN);
|
||||
envp_reader.read_cstring()?
|
||||
};
|
||||
envp.push(env);
|
||||
|
@ -262,7 +262,8 @@ impl<T: Pod, R: Deref<Target = RingBuffer<T>>> Producer<T, R> {
|
||||
debug_assert!(tail < rb.capacity);
|
||||
|
||||
let segment_offset = tail * Self::T_SIZE;
|
||||
let mut writer = rb.segment.writer().skip(segment_offset);
|
||||
let mut writer = rb.segment.writer();
|
||||
writer.skip(segment_offset);
|
||||
writer.write_val(&item).unwrap();
|
||||
|
||||
rb.advance_tail(tail, 1);
|
||||
@ -317,14 +318,17 @@ impl<R: Deref<Target = RingBuffer<u8>>> Producer<u8, R> {
|
||||
let tail = rb.tail();
|
||||
let write_len = if tail + write_len > rb.capacity {
|
||||
// Write into two separate parts
|
||||
let mut writer = rb.segment.writer().skip(tail).limit(rb.capacity - tail);
|
||||
let mut writer = rb.segment.writer();
|
||||
writer.skip(tail).limit(rb.capacity - tail);
|
||||
let mut len = reader.read(&mut writer)?;
|
||||
|
||||
let mut writer = rb.segment.writer().limit(write_len - (rb.capacity - tail));
|
||||
let mut writer = rb.segment.writer();
|
||||
writer.limit(write_len - (rb.capacity - tail));
|
||||
len += reader.read(&mut writer)?;
|
||||
len
|
||||
} else {
|
||||
let mut writer = rb.segment.writer().skip(tail).limit(write_len);
|
||||
let mut writer = rb.segment.writer();
|
||||
writer.skip(tail).limit(write_len);
|
||||
reader.read(&mut writer)?
|
||||
};
|
||||
|
||||
@ -359,7 +363,8 @@ impl<T: Pod, R: Deref<Target = RingBuffer<T>>> Consumer<T, R> {
|
||||
debug_assert!(head < rb.capacity);
|
||||
|
||||
let segment_offset = head * Self::T_SIZE;
|
||||
let mut reader = rb.segment.reader().skip(segment_offset);
|
||||
let mut reader = rb.segment.reader();
|
||||
reader.skip(segment_offset);
|
||||
let item = reader.read_val::<T>().unwrap();
|
||||
|
||||
rb.advance_head(head, 1);
|
||||
@ -413,14 +418,17 @@ impl<R: Deref<Target = RingBuffer<u8>>> Consumer<u8, R> {
|
||||
let head = rb.head();
|
||||
let read_len = if head + read_len > rb.capacity {
|
||||
// Read from two separate parts
|
||||
let mut reader = rb.segment.reader().skip(head).limit(rb.capacity - head);
|
||||
let mut reader = rb.segment.reader();
|
||||
reader.skip(head).limit(rb.capacity - head);
|
||||
let mut len = writer.write(&mut reader)?;
|
||||
|
||||
let mut reader = rb.segment.reader().limit(read_len - (rb.capacity - head));
|
||||
let mut reader = rb.segment.reader();
|
||||
reader.limit(read_len - (rb.capacity - head));
|
||||
len += writer.write(&mut reader)?;
|
||||
len
|
||||
} else {
|
||||
let mut reader = rb.segment.reader().skip(head).limit(read_len);
|
||||
let mut reader = rb.segment.reader();
|
||||
reader.skip(head).limit(read_len);
|
||||
writer.write(&mut reader)?
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user