1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-13 19:18:56 +00:00

core/sdcard: also catch OSError in the formatting phase

This commit is contained in:
matejcik 2020-03-20 11:18:46 +01:00 committed by matejcik
parent a978435819
commit f6f041e269

View File

@ -91,30 +91,32 @@ async def ensure_sdcard(
while True:
try:
with sdcard.filesystem(mounted=False):
fatfs.mount()
# Mount succeeded, filesystem is OK
try:
with sdcard.filesystem(mounted=False):
fatfs.mount()
except fatfs.NoFilesystem:
# card not formatted. proceed out of the except clause
pass
else:
# no error when mounting
return
except fatfs.FatFSError:
# Mount failed. Handle problem outside except clause.
pass
if not await format_card_dialog(ctx):
raise SdCardUnavailable("SD card not formatted.")
if not await format_card_dialog(ctx):
raise SdCardUnavailable("SD card not formatted.")
try:
# Proceed to formatting. Failure is caught by the outside OSError handler
with sdcard.filesystem(mounted=False):
fatfs.mkfs()
fatfs.mount()
fatfs.setlabel("TREZOR")
# mkfs and mount succeeded
return
except fatfs.FatFSError:
pass
# allow retry if we get as far as here
if not await sd_problem_dialog(ctx):
raise SdCardUnavailable("Problem formatting SD card.")
# format and mount succeeded
return
except OSError:
# formatting failed, or generic I/O error (SD card power-on failed)
if not await sd_problem_dialog(ctx):
raise SdCardUnavailable("Error accessing SD card.")
async def request_sd_salt(