Fix the wrong definition of StructuredIoctlArgType

This commit is contained in:
LI Qing 2021-01-07 21:11:53 +08:00 committed by Tate, Hongliang Tian
parent c27825c436
commit 6416692a16

@ -106,13 +106,7 @@ impl StructuredIoctlNum {
// bits: [30, 32) // bits: [30, 32)
let arg_type = { let arg_type = {
let type_bits = ((raw_cmd_num) >> 30) as u8; let type_bits = ((raw_cmd_num) >> 30) as u8;
match type_bits { StructuredIoctlArgType::from_u8(type_bits)
0 => StructuredIoctlArgType::Void,
1 => StructuredIoctlArgType::Input,
2 => StructuredIoctlArgType::Output,
3 => StructuredIoctlArgType::InputOutput,
_ => unreachable!(),
}
}; };
if arg_type == StructuredIoctlArgType::Void { if arg_type == StructuredIoctlArgType::Void {
@ -162,14 +156,22 @@ impl StructuredIoctlNum {
} }
#[derive(Debug, Copy, Clone, PartialEq)] #[derive(Debug, Copy, Clone, PartialEq)]
#[repr(u8)]
pub enum StructuredIoctlArgType { pub enum StructuredIoctlArgType {
Void = 0, Void = 0,
Output = 1, Input = 1,
Input = 2, Output = 2,
InputOutput = 3, InputOutput = 3,
} }
impl StructuredIoctlArgType { impl StructuredIoctlArgType {
pub fn from_u8(type_bits: u8) -> StructuredIoctlArgType {
if type_bits > StructuredIoctlArgType::InputOutput as u8 {
panic!("invalid bits for StructuredIoctlArgType");
}
unsafe { core::mem::transmute(type_bits) }
}
pub fn can_be_input(&self) -> bool { pub fn can_be_input(&self) -> bool {
*self == StructuredIoctlArgType::Input || *self == StructuredIoctlArgType::InputOutput *self == StructuredIoctlArgType::Input || *self == StructuredIoctlArgType::InputOutput
} }