@@ -50,6 +50,20 @@ STATIC mp_vfs_mount_t *lookup_path(const char* path, mp_obj_t *path_out) {
50
50
return vfs ;
51
51
}
52
52
53
+ // Strip off trailing slashes to please underlying libraries
54
+ STATIC mp_vfs_mount_t * lookup_dir_path (const char * path , mp_obj_t * path_out ) {
55
+ const char * p_out ;
56
+ mp_vfs_mount_t * vfs = mp_vfs_lookup_path (path , & p_out );
57
+ if (vfs != MP_VFS_NONE && vfs != MP_VFS_ROOT ) {
58
+ size_t len = strlen (p_out );
59
+ while (len > 1 && p_out [len - 1 ] == '/' ) {
60
+ len -- ;
61
+ }
62
+ * path_out = mp_obj_new_str_of_type (& mp_type_str , (const byte * )p_out , len );
63
+ }
64
+ return vfs ;
65
+ }
66
+
53
67
STATIC mp_obj_t mp_vfs_proxy_call (mp_vfs_mount_t * vfs , qstr meth_name , size_t n_args , const mp_obj_t * args ) {
54
68
if (vfs == MP_VFS_NONE ) {
55
69
// mount point not found
@@ -69,7 +83,7 @@ STATIC mp_obj_t mp_vfs_proxy_call(mp_vfs_mount_t *vfs, qstr meth_name, size_t n_
69
83
70
84
void common_hal_os_chdir (const char * path ) {
71
85
mp_obj_t path_out ;
72
- mp_vfs_mount_t * vfs = lookup_path (path , & path_out );
86
+ mp_vfs_mount_t * vfs = lookup_dir_path (path , & path_out );
73
87
MP_STATE_VM (vfs_cur ) = vfs ;
74
88
if (vfs == MP_VFS_ROOT ) {
75
89
// If we change to the root dir and a VFS is mounted at the root then
@@ -93,7 +107,7 @@ mp_obj_t common_hal_os_getcwd(void) {
93
107
94
108
mp_obj_t common_hal_os_listdir (const char * path ) {
95
109
mp_obj_t path_out ;
96
- mp_vfs_mount_t * vfs = lookup_path (path , & path_out );
110
+ mp_vfs_mount_t * vfs = lookup_dir_path (path , & path_out );
97
111
98
112
mp_vfs_ilistdir_it_t iter ;
99
113
mp_obj_t iter_obj = MP_OBJ_FROM_PTR (& iter );
@@ -120,7 +134,7 @@ mp_obj_t common_hal_os_listdir(const char* path) {
120
134
121
135
void common_hal_os_mkdir (const char * path ) {
122
136
mp_obj_t path_out ;
123
- mp_vfs_mount_t * vfs = lookup_path (path , & path_out );
137
+ mp_vfs_mount_t * vfs = lookup_dir_path (path , & path_out );
124
138
if (vfs == MP_VFS_ROOT || (vfs != MP_VFS_NONE && !strcmp (mp_obj_str_get_str (path_out ), "/" ))) {
125
139
mp_raise_OSError (MP_EEXIST );
126
140
}
@@ -146,7 +160,7 @@ void common_hal_os_rename(const char* old_path, const char* new_path) {
146
160
147
161
void common_hal_os_rmdir (const char * path ) {
148
162
mp_obj_t path_out ;
149
- mp_vfs_mount_t * vfs = lookup_path (path , & path_out );
163
+ mp_vfs_mount_t * vfs = lookup_dir_path (path , & path_out );
150
164
mp_vfs_proxy_call (vfs , MP_QSTR_rmdir , 1 , & path_out );
151
165
}
152
166
0 commit comments