extmod/vfs_blockdev: Support bool return from Python read/write blocks.
Commit f4ab9d924790581989f2398fe30bbac5d680577f inadvertently broke some Python block devices, for example esp32 and stm32 SDCard classes. Those classes return a bool from their `readblocks` and `writeblocks` methods instead of an integer errno code. With that change, both `False` and `True` return values are now be interpreted as non-zero and hence the block device call fails. The fix in this commit is to allow a bool and explicitly convert `True` to 0 and `False` to `-MP_EIO`. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
0c580f71ae
commit
20a6d82872
@ -58,6 +58,13 @@ static int mp_vfs_blockdev_call_rw(mp_obj_t *args, size_t block_num, size_t bloc
|
||||
if (ret == mp_const_none) {
|
||||
return 0;
|
||||
} else {
|
||||
// Some block devices return a bool indicating success, so
|
||||
// convert those to an errno integer code.
|
||||
if (ret == mp_const_true) {
|
||||
return 0;
|
||||
} else if (ret == mp_const_false) {
|
||||
return -MP_EIO;
|
||||
}
|
||||
// Block device functions are expected to return 0 on success
|
||||
// and negative integer on errors. Check for positive integer
|
||||
// results as some callers (i.e. littlefs) will produce corrupt
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user