-e8f1b1a8'Do not send TextInputEvent for control characters': set K_ESC, K_BKSP, K_ENTER to '\0' in all keymaps (US, GB, Dvorak, Azerty, Bepo, IT). Control characters are now produced via fbcond's scancode handler (0x1C -> \n, 0x0E -> \x7F) instead of via the character field. This pairs with the fbcond 0x1C Enter fix. -c3789b4e'only perform a single write and assert the amount written': add assertion in write_event that the kernel returned the full expected byte count. Prevents silent short writes in the input event path. Per Phase 1.1 of local/docs/SYSTEM-STABILITY-AND-UPSTREAM-SYNC-PLAN.md.
This commit is contained in:
@@ -4,7 +4,7 @@ use std::str::FromStr;
|
|||||||
|
|
||||||
mod keymaps {
|
mod keymaps {
|
||||||
pub static US: [(u8, [char; 2]); 53] = [
|
pub static US: [(u8, [char; 2]); 53] = [
|
||||||
(orbclient::K_ESC, ['\x1B', '\x1B']),
|
(orbclient::K_ESC, ['\0', '\0']),
|
||||||
(orbclient::K_1, ['1', '!']),
|
(orbclient::K_1, ['1', '!']),
|
||||||
(orbclient::K_2, ['2', '@']),
|
(orbclient::K_2, ['2', '@']),
|
||||||
(orbclient::K_3, ['3', '#']),
|
(orbclient::K_3, ['3', '#']),
|
||||||
@@ -17,7 +17,7 @@ mod keymaps {
|
|||||||
(orbclient::K_0, ['0', ')']),
|
(orbclient::K_0, ['0', ')']),
|
||||||
(orbclient::K_MINUS, ['-', '_']),
|
(orbclient::K_MINUS, ['-', '_']),
|
||||||
(orbclient::K_EQUALS, ['=', '+']),
|
(orbclient::K_EQUALS, ['=', '+']),
|
||||||
(orbclient::K_BKSP, ['\x7F', '\x7F']),
|
(orbclient::K_BKSP, ['\0', '\0']),
|
||||||
(orbclient::K_TAB, ['\t', '\t']),
|
(orbclient::K_TAB, ['\t', '\t']),
|
||||||
(orbclient::K_Q, ['q', 'Q']),
|
(orbclient::K_Q, ['q', 'Q']),
|
||||||
(orbclient::K_W, ['w', 'W']),
|
(orbclient::K_W, ['w', 'W']),
|
||||||
@@ -31,7 +31,7 @@ mod keymaps {
|
|||||||
(orbclient::K_P, ['p', 'P']),
|
(orbclient::K_P, ['p', 'P']),
|
||||||
(orbclient::K_BRACE_OPEN, ['[', '{']),
|
(orbclient::K_BRACE_OPEN, ['[', '{']),
|
||||||
(orbclient::K_BRACE_CLOSE, [']', '}']),
|
(orbclient::K_BRACE_CLOSE, [']', '}']),
|
||||||
(orbclient::K_ENTER, ['\n', '\n']),
|
(orbclient::K_ENTER, ['\0', '\0']),
|
||||||
(orbclient::K_CTRL, ['\0', '\0']),
|
(orbclient::K_CTRL, ['\0', '\0']),
|
||||||
(orbclient::K_A, ['a', 'A']),
|
(orbclient::K_A, ['a', 'A']),
|
||||||
(orbclient::K_S, ['s', 'S']),
|
(orbclient::K_S, ['s', 'S']),
|
||||||
@@ -60,7 +60,7 @@ mod keymaps {
|
|||||||
];
|
];
|
||||||
|
|
||||||
pub static GB: [(u8, [char; 2]); 54] = [
|
pub static GB: [(u8, [char; 2]); 54] = [
|
||||||
(orbclient::K_ESC, ['\x1B', '\x1B']),
|
(orbclient::K_ESC, ['\0', '\0']),
|
||||||
(orbclient::K_1, ['1', '!']),
|
(orbclient::K_1, ['1', '!']),
|
||||||
(orbclient::K_2, ['2', '"']),
|
(orbclient::K_2, ['2', '"']),
|
||||||
(orbclient::K_3, ['3', '£']),
|
(orbclient::K_3, ['3', '£']),
|
||||||
@@ -73,7 +73,7 @@ mod keymaps {
|
|||||||
(orbclient::K_0, ['0', ')']),
|
(orbclient::K_0, ['0', ')']),
|
||||||
(orbclient::K_MINUS, ['-', '_']),
|
(orbclient::K_MINUS, ['-', '_']),
|
||||||
(orbclient::K_EQUALS, ['=', '+']),
|
(orbclient::K_EQUALS, ['=', '+']),
|
||||||
(orbclient::K_BKSP, ['\x7F', '\x7F']),
|
(orbclient::K_BKSP, ['\0', '\0']),
|
||||||
(orbclient::K_TAB, ['\t', '\t']),
|
(orbclient::K_TAB, ['\t', '\t']),
|
||||||
(orbclient::K_Q, ['q', 'Q']),
|
(orbclient::K_Q, ['q', 'Q']),
|
||||||
(orbclient::K_W, ['w', 'W']),
|
(orbclient::K_W, ['w', 'W']),
|
||||||
@@ -87,7 +87,7 @@ mod keymaps {
|
|||||||
(orbclient::K_P, ['p', 'P']),
|
(orbclient::K_P, ['p', 'P']),
|
||||||
(orbclient::K_BRACE_OPEN, ['[', '{']),
|
(orbclient::K_BRACE_OPEN, ['[', '{']),
|
||||||
(orbclient::K_BRACE_CLOSE, [']', '}']),
|
(orbclient::K_BRACE_CLOSE, [']', '}']),
|
||||||
(orbclient::K_ENTER, ['\n', '\n']),
|
(orbclient::K_ENTER, ['\0', '\0']),
|
||||||
(orbclient::K_CTRL, ['\0', '\0']),
|
(orbclient::K_CTRL, ['\0', '\0']),
|
||||||
(orbclient::K_A, ['a', 'A']),
|
(orbclient::K_A, ['a', 'A']),
|
||||||
(orbclient::K_S, ['s', 'S']),
|
(orbclient::K_S, ['s', 'S']),
|
||||||
@@ -118,7 +118,7 @@ mod keymaps {
|
|||||||
];
|
];
|
||||||
|
|
||||||
pub static DVORAK: [(u8, [char; 2]); 53] = [
|
pub static DVORAK: [(u8, [char; 2]); 53] = [
|
||||||
(orbclient::K_ESC, ['\x1B', '\x1B']),
|
(orbclient::K_ESC, ['\0', '\0']),
|
||||||
(orbclient::K_1, ['1', '!']),
|
(orbclient::K_1, ['1', '!']),
|
||||||
(orbclient::K_2, ['2', '@']),
|
(orbclient::K_2, ['2', '@']),
|
||||||
(orbclient::K_3, ['3', '#']),
|
(orbclient::K_3, ['3', '#']),
|
||||||
@@ -131,7 +131,7 @@ mod keymaps {
|
|||||||
(orbclient::K_0, ['0', ')']),
|
(orbclient::K_0, ['0', ')']),
|
||||||
(orbclient::K_MINUS, ['[', '{']),
|
(orbclient::K_MINUS, ['[', '{']),
|
||||||
(orbclient::K_EQUALS, [']', '}']),
|
(orbclient::K_EQUALS, [']', '}']),
|
||||||
(orbclient::K_BKSP, ['\x7F', '\x7F']),
|
(orbclient::K_BKSP, ['\0', '\0']),
|
||||||
(orbclient::K_TAB, ['\t', '\t']),
|
(orbclient::K_TAB, ['\t', '\t']),
|
||||||
(orbclient::K_Q, ['\'', '"']),
|
(orbclient::K_Q, ['\'', '"']),
|
||||||
(orbclient::K_W, [',', '<']),
|
(orbclient::K_W, [',', '<']),
|
||||||
@@ -145,7 +145,7 @@ mod keymaps {
|
|||||||
(orbclient::K_P, ['l', 'L']),
|
(orbclient::K_P, ['l', 'L']),
|
||||||
(orbclient::K_BRACE_OPEN, ['/', '?']),
|
(orbclient::K_BRACE_OPEN, ['/', '?']),
|
||||||
(orbclient::K_BRACE_CLOSE, ['=', '+']),
|
(orbclient::K_BRACE_CLOSE, ['=', '+']),
|
||||||
(orbclient::K_ENTER, ['\n', '\n']),
|
(orbclient::K_ENTER, ['\0', '\0']),
|
||||||
(orbclient::K_CTRL, ['\0', '\0']),
|
(orbclient::K_CTRL, ['\0', '\0']),
|
||||||
(orbclient::K_A, ['a', 'A']),
|
(orbclient::K_A, ['a', 'A']),
|
||||||
(orbclient::K_S, ['o', 'O']),
|
(orbclient::K_S, ['o', 'O']),
|
||||||
@@ -174,7 +174,7 @@ mod keymaps {
|
|||||||
];
|
];
|
||||||
|
|
||||||
pub static AZERTY: [(u8, [char; 2]); 53] = [
|
pub static AZERTY: [(u8, [char; 2]); 53] = [
|
||||||
(orbclient::K_ESC, ['\x1B', '\x1B']),
|
(orbclient::K_ESC, ['\0', '\0']),
|
||||||
(orbclient::K_1, ['&', '1']),
|
(orbclient::K_1, ['&', '1']),
|
||||||
(orbclient::K_2, ['é', '2']),
|
(orbclient::K_2, ['é', '2']),
|
||||||
(orbclient::K_3, ['"', '3']),
|
(orbclient::K_3, ['"', '3']),
|
||||||
@@ -187,7 +187,7 @@ mod keymaps {
|
|||||||
(orbclient::K_0, ['à', '0']),
|
(orbclient::K_0, ['à', '0']),
|
||||||
(orbclient::K_MINUS, [')', '°']),
|
(orbclient::K_MINUS, [')', '°']),
|
||||||
(orbclient::K_EQUALS, ['=', '+']),
|
(orbclient::K_EQUALS, ['=', '+']),
|
||||||
(orbclient::K_BKSP, ['\x7F', '\x7F']),
|
(orbclient::K_BKSP, ['\0', '\0']),
|
||||||
(orbclient::K_TAB, ['\t', '\t']),
|
(orbclient::K_TAB, ['\t', '\t']),
|
||||||
(orbclient::K_Q, ['a', 'A']),
|
(orbclient::K_Q, ['a', 'A']),
|
||||||
(orbclient::K_W, ['z', 'Z']),
|
(orbclient::K_W, ['z', 'Z']),
|
||||||
@@ -201,7 +201,7 @@ mod keymaps {
|
|||||||
(orbclient::K_P, ['p', 'P']),
|
(orbclient::K_P, ['p', 'P']),
|
||||||
(orbclient::K_BRACE_OPEN, ['^', '¨']),
|
(orbclient::K_BRACE_OPEN, ['^', '¨']),
|
||||||
(orbclient::K_BRACE_CLOSE, ['$', '£']),
|
(orbclient::K_BRACE_CLOSE, ['$', '£']),
|
||||||
(orbclient::K_ENTER, ['\n', '\n']),
|
(orbclient::K_ENTER, ['\0', '\0']),
|
||||||
(orbclient::K_CTRL, ['\0', '\0']),
|
(orbclient::K_CTRL, ['\0', '\0']),
|
||||||
(orbclient::K_A, ['q', 'Q']),
|
(orbclient::K_A, ['q', 'Q']),
|
||||||
(orbclient::K_S, ['s', 'S']),
|
(orbclient::K_S, ['s', 'S']),
|
||||||
@@ -230,7 +230,7 @@ mod keymaps {
|
|||||||
];
|
];
|
||||||
|
|
||||||
pub static BEPO: [(u8, [char; 2]); 53] = [
|
pub static BEPO: [(u8, [char; 2]); 53] = [
|
||||||
(orbclient::K_ESC, ['\x1B', '\x1B']),
|
(orbclient::K_ESC, ['\0', '\0']),
|
||||||
(orbclient::K_1, ['"', '1']),
|
(orbclient::K_1, ['"', '1']),
|
||||||
(orbclient::K_2, ['«', '2']),
|
(orbclient::K_2, ['«', '2']),
|
||||||
(orbclient::K_3, ['»', '3']),
|
(orbclient::K_3, ['»', '3']),
|
||||||
@@ -243,7 +243,7 @@ mod keymaps {
|
|||||||
(orbclient::K_0, ['*', '0']),
|
(orbclient::K_0, ['*', '0']),
|
||||||
(orbclient::K_MINUS, ['=', '°']),
|
(orbclient::K_MINUS, ['=', '°']),
|
||||||
(orbclient::K_EQUALS, ['%', '`']),
|
(orbclient::K_EQUALS, ['%', '`']),
|
||||||
(orbclient::K_BKSP, ['\x7F', '\x7F']),
|
(orbclient::K_BKSP, ['\0', '\0']),
|
||||||
(orbclient::K_TAB, ['\t', '\t']),
|
(orbclient::K_TAB, ['\t', '\t']),
|
||||||
(orbclient::K_Q, ['b', 'B']),
|
(orbclient::K_Q, ['b', 'B']),
|
||||||
(orbclient::K_W, ['é', 'É']),
|
(orbclient::K_W, ['é', 'É']),
|
||||||
@@ -257,7 +257,7 @@ mod keymaps {
|
|||||||
(orbclient::K_P, ['j', 'J']),
|
(orbclient::K_P, ['j', 'J']),
|
||||||
(orbclient::K_BRACE_OPEN, ['z', 'Z']),
|
(orbclient::K_BRACE_OPEN, ['z', 'Z']),
|
||||||
(orbclient::K_BRACE_CLOSE, ['w', 'W']),
|
(orbclient::K_BRACE_CLOSE, ['w', 'W']),
|
||||||
(orbclient::K_ENTER, ['\n', '\n']),
|
(orbclient::K_ENTER, ['\0', '\0']),
|
||||||
(orbclient::K_CTRL, ['\0', '\0']),
|
(orbclient::K_CTRL, ['\0', '\0']),
|
||||||
(orbclient::K_A, ['a', 'A']),
|
(orbclient::K_A, ['a', 'A']),
|
||||||
(orbclient::K_S, ['u', 'U']),
|
(orbclient::K_S, ['u', 'U']),
|
||||||
@@ -286,7 +286,7 @@ mod keymaps {
|
|||||||
];
|
];
|
||||||
|
|
||||||
pub static IT: [(u8, [char; 2]); 53] = [
|
pub static IT: [(u8, [char; 2]); 53] = [
|
||||||
(orbclient::K_ESC, ['\x1B', '\x1B']),
|
(orbclient::K_ESC, ['\0', '\0']),
|
||||||
(orbclient::K_1, ['1', '!']),
|
(orbclient::K_1, ['1', '!']),
|
||||||
(orbclient::K_2, ['2', '"']),
|
(orbclient::K_2, ['2', '"']),
|
||||||
(orbclient::K_3, ['3', '£']),
|
(orbclient::K_3, ['3', '£']),
|
||||||
@@ -299,7 +299,7 @@ mod keymaps {
|
|||||||
(orbclient::K_0, ['0', '=']),
|
(orbclient::K_0, ['0', '=']),
|
||||||
(orbclient::K_MINUS, ['?', '\'']),
|
(orbclient::K_MINUS, ['?', '\'']),
|
||||||
(orbclient::K_EQUALS, ['ì', '^']),
|
(orbclient::K_EQUALS, ['ì', '^']),
|
||||||
(orbclient::K_BKSP, ['\x7F', '\x7F']),
|
(orbclient::K_BKSP, ['\0', '\0']),
|
||||||
(orbclient::K_TAB, ['\t', '\t']),
|
(orbclient::K_TAB, ['\t', '\t']),
|
||||||
(orbclient::K_Q, ['q', 'Q']),
|
(orbclient::K_Q, ['q', 'Q']),
|
||||||
(orbclient::K_W, ['w', 'W']),
|
(orbclient::K_W, ['w', 'W']),
|
||||||
@@ -313,7 +313,7 @@ mod keymaps {
|
|||||||
(orbclient::K_P, ['p', 'P']),
|
(orbclient::K_P, ['p', 'P']),
|
||||||
(orbclient::K_BRACE_OPEN, ['è', 'é']),
|
(orbclient::K_BRACE_OPEN, ['è', 'é']),
|
||||||
(orbclient::K_BRACE_CLOSE, ['+', '*']),
|
(orbclient::K_BRACE_CLOSE, ['+', '*']),
|
||||||
(orbclient::K_ENTER, ['\n', '\n']),
|
(orbclient::K_ENTER, ['\0', '\0']),
|
||||||
(orbclient::K_CTRL, ['\x20', '\x20']),
|
(orbclient::K_CTRL, ['\x20', '\x20']),
|
||||||
(orbclient::K_A, ['a', 'A']),
|
(orbclient::K_A, ['a', 'A']),
|
||||||
(orbclient::K_S, ['s', 'S']),
|
(orbclient::K_S, ['s', 'S']),
|
||||||
|
|||||||
@@ -205,7 +205,9 @@ impl ProducerHandle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_event(&mut self, event: orbclient::Event) -> io::Result<()> {
|
pub fn write_event(&mut self, event: orbclient::Event) -> io::Result<()> {
|
||||||
self.0.write(&event)?;
|
let written = self.0.write(&event)?;
|
||||||
|
assert_eq!(written, std::mem::size_of::<orbclient::Event>() as usize,
|
||||||
|
"write_event: short write ({} != {})", written, std::mem::size_of::<orbclient::Event>());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user