stmhal: Check if user block device is mounted before accessing it.

In particular this fixes a bug where pyb.sync (and os.sync) fail because
they try to sync the user mounted device even if it's not mounted.
This commit is contained in:
Damien George 2015-07-27 23:40:19 +01:00
parent 84d59c2873
commit 92e9a5e0a7

View File

@ -151,6 +151,10 @@ DRESULT disk_read (
#endif #endif
case PD_USER: case PD_USER:
if (fs_user_mount == NULL) {
// nothing mounted
return RES_ERROR;
}
fs_user_mount->readblocks[2] = MP_OBJ_NEW_SMALL_INT(sector); fs_user_mount->readblocks[2] = MP_OBJ_NEW_SMALL_INT(sector);
fs_user_mount->readblocks[3] = mp_obj_new_bytearray_by_ref(count * 512, buff); fs_user_mount->readblocks[3] = mp_obj_new_bytearray_by_ref(count * 512, buff);
mp_call_method_n_kw(2, 0, fs_user_mount->readblocks); mp_call_method_n_kw(2, 0, fs_user_mount->readblocks);
@ -190,6 +194,10 @@ DRESULT disk_write (
#endif #endif
case PD_USER: case PD_USER:
if (fs_user_mount == NULL) {
// nothing mounted
return RES_ERROR;
}
if (fs_user_mount->writeblocks[0] == MP_OBJ_NULL) { if (fs_user_mount->writeblocks[0] == MP_OBJ_NULL) {
// read-only block device // read-only block device
return RES_ERROR; return RES_ERROR;
@ -243,6 +251,10 @@ DRESULT disk_ioctl (
#endif #endif
case PD_USER: case PD_USER:
if (fs_user_mount == NULL) {
// nothing mounted
return RES_ERROR;
}
switch (cmd) { switch (cmd) {
case CTRL_SYNC: case CTRL_SYNC:
if (fs_user_mount->sync[0] != MP_OBJ_NULL) { if (fs_user_mount->sync[0] != MP_OBJ_NULL) {