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

Commit 1f1b74d

Browse files
committed
Simplify the SysctlStorage API
Automatically compute how many bytes were read.
1 parent 1e4c558 commit 1f1b74d

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
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;

tests/random/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ impl SysctlStorage for EntropySource {
1515
fn read_value(
1616
&self,
1717
data: &mut linux_kernel_module::user_ptr::UserSlicePtrWriter,
18-
) -> (usize, linux_kernel_module::KernelResult<()>) {
18+
) -> linux_kernel_module::KernelResult<()> {
1919
let mut storage = vec![0; data.len()];
2020
if let Err(e) = random::getrandom(&mut storage) {
2121
return (0, Err(e));
2222
}
23-
(storage.len(), data.write(&storage))
23+
data.write(&storage)
2424
}
2525
}
2626

0 commit comments

Comments
 (0)