Skip to content

Commit d63c2e3

Browse files
committed
Misc fixes
- Fix input map serialization on desktop - Fix save file size handling on web
1 parent 7fc4cb7 commit d63c2e3

File tree

3 files changed

+14
-26
lines changed

3 files changed

+14
-26
lines changed

core/src/cpu/arm9/dma.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ impl<E: Engine> Arm9<E> {
3535
if !value.enabled() {
3636
// Stop DMA; the code can avoid computing everything else as the control register will
3737
// be written to again.
38-
38+
3939
channel.timing = Timing::Disabled;
4040
if prev_value.enabled() {
4141
// Handle self-disabling DMAs

frontend/desktop/src/input/map.rs

+7-22
Original file line numberDiff line numberDiff line change
@@ -220,31 +220,16 @@ impl<'de> Deserialize<'de> for Map {
220220
{
221221
let mut keypad = None;
222222
let mut hotkeys = None;
223-
loop {
224-
if let Ok(next) = map.next_entry::<&str, DeserializedKeypadMap>() {
225-
if let Some(("keypad", value)) = next {
226-
keypad = Some(value);
227-
} else {
228-
break;
229-
}
230-
}
231-
if let Ok(next) = map.next_entry::<&str, DeserializedHotkeyMap>() {
232-
if let Some(("hotkeys", value)) = next {
233-
hotkeys = Some(value);
234-
} else {
235-
break;
236-
}
223+
while let Some(key) = map.next_key()? {
224+
match key {
225+
"keypad" => keypad = Some(map.next_value::<DeserializedKeypadMap>()?.0),
226+
"hotkeys" => hotkeys = Some(map.next_value::<DeserializedHotkeyMap>()?.0),
227+
_ => {}
237228
}
238229
}
239230
Ok(Map {
240-
keypad: match keypad {
241-
Some(keypad) => keypad.0,
242-
None => default_keypad_map(),
243-
},
244-
hotkeys: match hotkeys {
245-
Some(hotkeys) => hotkeys.0,
246-
None => default_hotkey_map(),
247-
},
231+
keypad: keypad.unwrap_or_else(default_keypad_map),
232+
hotkeys: hotkeys.unwrap_or_else(default_hotkey_map),
248233
})
249234
}
250235
}

frontend/web/crate/src/lib.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,10 @@ pub fn create_emu_state(
303303
let expected_len = save_type.expected_len().unwrap();
304304
let save_contents = match save_contents {
305305
Some(save_contents) => {
306-
SaveContents::Existing(if save_contents.len() == expected_len {
306+
SaveContents::Existing(if save_contents.len() != expected_len {
307307
let mut new_contents = BoxedByteSlice::new_zeroed(expected_len);
308-
new_contents[..save_contents.len()].copy_from_slice(&save_contents);
309-
drop(save_contents);
308+
let copy_len = save_contents.len().min(expected_len);
309+
new_contents[..copy_len].copy_from_slice(&save_contents[..copy_len]);
310310
new_contents
311311
} else {
312312
save_contents
@@ -322,6 +322,7 @@ pub fn create_emu_state(
322322
#[cfg(feature = "log")]
323323
logger.new(slog::o!("ds_spi" => "eeprom_4k")),
324324
)
325+
// NOTE: The save contents' size is ensured beforehand, this should never occur.
325326
.expect("couldn't create 4 Kib EEPROM DS slot SPI device")
326327
.into(),
327328
SaveType::EepromFram64k | SaveType::EepromFram512k | SaveType::EepromFram1m => {
@@ -331,6 +332,7 @@ pub fn create_emu_state(
331332
#[cfg(feature = "log")]
332333
logger.new(slog::o!("ds_spi" => "eeprom_fram")),
333334
)
335+
// NOTE: The save contents' size is ensured beforehand, this should never occur.
334336
.expect("couldn't create EEPROM/FRAM DS slot SPI device")
335337
.into()
336338
}
@@ -342,6 +344,7 @@ pub fn create_emu_state(
342344
#[cfg(feature = "log")]
343345
logger.new(slog::o!("ds_spi" => if has_ir { "flash" } else { "flash_ir" })),
344346
)
347+
// NOTE: The save contents' size is ensured beforehand, this should never occur.
345348
.expect("couldn't create FLASH DS slot SPI device")
346349
.into()
347350
}

0 commit comments

Comments
 (0)