summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2018-06-21 09:24:40 -0400
committerDan Halbert <halbert@halwitz.org>2018-06-21 09:24:40 -0400
commitdbf1a2f7d55c8fc80df699c3a5792a29c46ea3e2 (patch)
tree5eaf5e0b03f237f8b060f04488fd960ae87911c5
parentde4cd1ee739ec93acc7a61252462e8a2f117a259 (diff)
allow '/' to be mounted on '/' from Python code
-rw-r--r--extmod/vfs_fat_diskio.c4
-rw-r--r--shared-module/storage/__init__.c15
2 files changed, 11 insertions, 8 deletions
diff --git a/extmod/vfs_fat_diskio.c b/extmod/vfs_fat_diskio.c
index 43c390a11..a147d601a 100644
--- a/extmod/vfs_fat_diskio.c
+++ b/extmod/vfs_fat_diskio.c
@@ -135,7 +135,7 @@ DRESULT disk_read (
if (nlr_push(&nlr) == 0) {
mp_obj_t ret = mp_call_method_n_kw(2, 0, vfs->readblocks);
nlr_pop();
- if (mp_obj_get_int(ret) != 0) {
+ if (ret != mp_const_none && MP_OBJ_SMALL_INT_VALUE(ret) != 0) {
return RES_ERROR;
}
} else {
@@ -180,7 +180,7 @@ DRESULT disk_write (
if (nlr_push(&nlr) == 0) {
mp_obj_t ret = mp_call_method_n_kw(2, 0, vfs->writeblocks);
nlr_pop();
- if (mp_obj_get_int(ret) != 0) {
+ if (ret != mp_const_none && MP_OBJ_SMALL_INT_VALUE(ret) != 0) {
return RES_ERROR;
}
} else {
diff --git a/shared-module/storage/__init__.c b/shared-module/storage/__init__.c
index cc10ebd5a..edce286b1 100644
--- a/shared-module/storage/__init__.c
+++ b/shared-module/storage/__init__.c
@@ -65,12 +65,15 @@ void common_hal_storage_mount(mp_obj_t vfs_obj, const char* mount_path, bool rea
args[1] = mp_const_false; // Don't make the file system automatically when mounting.
// Check that there's no file or directory with the same name as the mount point.
- nlr_buf_t nlr;
- if (nlr_push(&nlr) == 0) {
- common_hal_os_stat(mount_path);
- nlr_pop();
- // Something with the same name exists.
- mp_raise_OSError(MP_EEXIST);
+ // But it's ok to mount '/' in any case.
+ if (strcmp(vfs->str, "/") != 0) {
+ nlr_buf_t nlr;
+ if (nlr_push(&nlr) == 0) {
+ common_hal_os_stat(mount_path);
+ nlr_pop();
+ // Something with the same name exists.
+ mp_raise_OSError(MP_EEXIST);
+ }
}
// check that the destination mount point is unused