A fork of pulp-os for the xteink4 adding custom apps
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

simplifications, deduplications, and calrity fixes

hansmrtn f2f0f813 2f7b352f

+40 -61
+34 -22
kernel/src/kernel/bookmarks.rs
··· 10 10 use crate::drivers::storage; 11 11 pub use smol_epub::cache::fnv1a_icase; 12 12 13 + // little-endian helpers for binary record encoding 14 + #[inline] 15 + fn read_u16_le(buf: &[u8], off: usize) -> u16 { 16 + u16::from_le_bytes([buf[off], buf[off + 1]]) 17 + } 18 + 19 + #[inline] 20 + fn read_u32_le(buf: &[u8], off: usize) -> u32 { 21 + u32::from_le_bytes([buf[off], buf[off + 1], buf[off + 2], buf[off + 3]]) 22 + } 23 + 24 + #[inline] 25 + fn write_u16_le(buf: &mut [u8], off: usize, val: u16) { 26 + buf[off..off + 2].copy_from_slice(&val.to_le_bytes()); 27 + } 28 + 29 + #[inline] 30 + fn write_u32_le(buf: &mut [u8], off: usize, val: u32) { 31 + buf[off..off + 4].copy_from_slice(&val.to_le_bytes()); 32 + } 33 + 13 34 pub const BOOKMARK_FILE: &str = "BKMK.BIN"; 14 35 pub const SLOTS: usize = 16; 15 36 pub const RECORD_LEN: usize = 48; ··· 46 67 if rec.len() < RECORD_LEN { 47 68 return Self::EMPTY; 48 69 } 49 - let name_hash = u32::from_le_bytes([rec[0], rec[1], rec[2], rec[3]]); 50 - let byte_offset = u32::from_le_bytes([rec[4], rec[5], rec[6], rec[7]]); 51 - let chapter = u16::from_le_bytes([rec[8], rec[9]]); 52 - let flags = u16::from_le_bytes([rec[10], rec[11]]); 53 - let generation = u16::from_le_bytes([rec[12], rec[13]]); 54 70 let name_len = rec[14].min(FILENAME_CAP as u8); 55 - 56 71 let mut filename = [0u8; FILENAME_CAP]; 57 - let n = name_len as usize; 58 - filename[..n].copy_from_slice(&rec[16..16 + n]); 72 + filename[..name_len as usize].copy_from_slice(&rec[16..16 + name_len as usize]); 59 73 60 74 Self { 61 - name_hash, 62 - byte_offset, 63 - chapter, 64 - valid: flags & 1 != 0, 65 - generation, 75 + name_hash: read_u32_le(rec, 0), 76 + byte_offset: read_u32_le(rec, 4), 77 + chapter: read_u16_le(rec, 8), 78 + valid: read_u16_le(rec, 10) & 1 != 0, 79 + generation: read_u16_le(rec, 12), 66 80 name_len, 67 81 filename, 68 82 } 69 83 } 70 84 71 85 fn encode(&self) -> [u8; RECORD_LEN] { 72 - let flags: u16 = if self.valid { 1 } else { 0 }; 73 86 let mut rec = [0u8; RECORD_LEN]; 74 - rec[0..4].copy_from_slice(&self.name_hash.to_le_bytes()); 75 - rec[4..8].copy_from_slice(&self.byte_offset.to_le_bytes()); 76 - rec[8..10].copy_from_slice(&self.chapter.to_le_bytes()); 77 - rec[10..12].copy_from_slice(&flags.to_le_bytes()); 78 - rec[12..14].copy_from_slice(&self.generation.to_le_bytes()); 87 + write_u32_le(&mut rec, 0, self.name_hash); 88 + write_u32_le(&mut rec, 4, self.byte_offset); 89 + write_u16_le(&mut rec, 8, self.chapter); 90 + write_u16_le(&mut rec, 10, if self.valid { 1 } else { 0 }); 91 + write_u16_le(&mut rec, 12, self.generation); 79 92 rec[14] = self.name_len; 80 - rec[15] = 0; 81 - let n = self.name_len as usize; 82 - rec[16..16 + n].copy_from_slice(&self.filename[..n]); 93 + rec[16..16 + self.name_len as usize] 94 + .copy_from_slice(&self.filename[..self.name_len as usize]); 83 95 rec 84 96 } 85 97
+6 -39
kernel/src/kernel/rtc_session.rs
··· 77 77 78 78 impl RtcSession { 79 79 // create zeroed session (invalid until populated) 80 + // 81 + // Safety: RtcSession is #[repr(C)] with only primitive types and 82 + // fixed-size arrays of primitives - all valid when zero-initialized 80 83 pub const fn zeroed() -> Self { 81 - Self { 82 - magic: 0, 83 - wake_count: 0, 84 - flags: 0, 85 - _header_pad: 0, 86 - 87 - nav_depth: 0, 88 - nav_stack: [0; MAX_NAV_STACK], 89 - _nav_pad: [0; 3], 90 - 91 - reader_filename: [0; MAX_FILENAME_LEN], 92 - reader_filename_len: 0, 93 - reader_is_epub: 0, 94 - reader_chapter: 0, 95 - reader_page: 0, 96 - reader_byte_offset: 0, 97 - reader_font_size: 0, 98 - _reader_pad: [0; 5], 99 - 100 - files_scroll: 0, 101 - files_selected: 0, 102 - files_total: 0, 103 - _files_pad: [0; 3], 104 - 105 - home_state: 0, 106 - home_selected: 0, 107 - home_bm_selected: 0, 108 - home_bm_scroll: 0, 109 - _home_pad: [0; 4], 110 - 111 - settings_sleep_timeout: 0, 112 - settings_ghost_clear: 0, 113 - settings_book_font: 0, 114 - settings_ui_font: 0, 115 - settings_valid: 0, 116 - _settings_pad: [0; 10], 117 - 118 - _reserved: [0; 24], 119 - } 84 + // SAFETY: All fields are primitives or arrays of primitives, 85 + // and zero is a valid value for each (magic=0 means invalid session) 86 + unsafe { core::mem::zeroed() } 120 87 } 121 88 122 89 #[inline]