summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorScott Shawcroft <scott.shawcroft@gmail.com>2017-06-28 14:46:49 -0700
committerScott Shawcroft <scott.shawcroft@gmail.com>2017-06-28 14:46:49 -0700
commitd6a24afd71067102ca5e2ac9c2c81ddfae5ba140 (patch)
tree130de908bfeec1c0a2719a7c4dc8f73ff2be30ae /py
parent5ddbf26b62af230004219ec021c9e8ecd8abec26 (diff)
Change vfs mount ordering such that the root is always last in the
linked list. Its also the only one statically allocated and made available over USB.
Diffstat (limited to 'py')
-rw-r--r--py/runtime.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/py/runtime.c b/py/runtime.c
index 504c17c15..1eb6da433 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -117,18 +117,22 @@ void mp_init(void) {
#if MICROPY_VFS
#if MICROPY_FATFS_NUM_PERSISTENT > 0
+ // We preserve the last MICROPY_FATFS_NUM_PERSISTENT mounts because newer
+ // mounts are put at the front of the list.
mp_vfs_mount_t *vfs = MP_STATE_VM(vfs_mount_table);
- if (vfs != NULL) {
- MP_STATE_VM(vfs_cur) = vfs;
+ // Count how many mounts we have.
+ uint8_t count = 0;
+ while (vfs != NULL) {
+ vfs = vfs->next;
+ count++;
}
- // Skip forward until the vfs->next pointer is the first vfs that shouldn't
- // persist.
- uint8_t i = 1;
- while (vfs != NULL && i < MICROPY_FATFS_NUM_PERSISTENT) {
+ // Find the vfs MICROPY_FATFS_NUM_PERSISTENT mounts from the end.
+ vfs = MP_STATE_VM(vfs_mount_table);
+ for (uint8_t j = 0; j < count - MICROPY_FATFS_NUM_PERSISTENT; j++) {
vfs = vfs->next;
- i++;
}
- vfs->next = NULL;
+ MP_STATE_VM(vfs_mount_table) = vfs;
+ MP_STATE_VM(vfs_cur) = vfs;
#else
// initialise the VFS sub-system
MP_STATE_VM(vfs_cur) = NULL;