Skip to content
This repository was archived by the owner on Mar 7, 2021. It is now read-only.

Commit ac5f8ac

Browse files
committed
Simplify the SysctlStorage API
Automatically compute how many bytes were read.
1 parent 11ae6d2 commit ac5f8ac

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/sysctl.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::user_ptr::{UserSlicePtr, UserSlicePtrWriter};
1212

1313
pub trait SysctlStorage: Sync {
1414
fn store_value(&self, data: &[u8]) -> (usize, error::KernelResult<()>);
15-
fn read_value(&self, data: &mut UserSlicePtrWriter) -> (usize, error::KernelResult<()>);
15+
fn read_value(&self, data: &mut UserSlicePtrWriter) -> error::KernelResult<()>;
1616
}
1717

1818
fn trim_whitespace(mut data: &[u8]) -> &[u8] {
@@ -37,7 +37,7 @@ where
3737
(*self).store_value(data)
3838
}
3939

40-
fn read_value(&self, data: &mut UserSlicePtrWriter) -> (usize, error::KernelResult<()>) {
40+
fn read_value(&self, data: &mut UserSlicePtrWriter) -> error::KernelResult<()> {
4141
(*self).read_value(data)
4242
}
4343
}
@@ -58,13 +58,13 @@ impl SysctlStorage for atomic::AtomicBool {
5858
(data.len(), result)
5959
}
6060

61-
fn read_value(&self, data: &mut UserSlicePtrWriter) -> (usize, error::KernelResult<()>) {
61+
fn read_value(&self, data: &mut UserSlicePtrWriter) -> error::KernelResult<()> {
6262
let value = if self.load(atomic::Ordering::Relaxed) {
6363
b"1\n"
6464
} else {
6565
b"0\n"
6666
};
67-
(value.len(), data.write(value))
67+
data.write(value)
6868
}
6969
}
7070

@@ -106,7 +106,9 @@ unsafe extern "C" fn proc_handler<T: SysctlStorage>(
106106
storage.store_value(&data)
107107
} else {
108108
let mut writer = data.writer();
109-
storage.read_value(&mut writer)
109+
let starting_len = writer.len();
110+
let res = storage.read_value(&mut writer);
111+
(starting_len - writer.len(), res)
110112
};
111113
*len = bytes_processed;
112114
*ppos += *len as bindings::loff_t;

0 commit comments

Comments
 (0)