Get CIRCUITPY FATFS directly.
Otherwise, you may actually get a non-root filesystem. Fixes #6575
This commit is contained in:
parent
e0cb8ef17e
commit
125b276af0
|
@ -31,6 +31,7 @@
|
||||||
#include "lib/oofatfs/ff.h"
|
#include "lib/oofatfs/ff.h"
|
||||||
#include "extmod/vfs_fat.h"
|
#include "extmod/vfs_fat.h"
|
||||||
#include "py/mpstate.h"
|
#include "py/mpstate.h"
|
||||||
|
#include "supervisor/filesystem.h"
|
||||||
|
|
||||||
void board_init(void) {
|
void board_init(void) {
|
||||||
// Debug UART
|
// Debug UART
|
||||||
|
@ -41,7 +42,7 @@ void board_init(void) {
|
||||||
|
|
||||||
mp_import_stat_t stat_b = mp_import_stat("boot.py");
|
mp_import_stat_t stat_b = mp_import_stat("boot.py");
|
||||||
if (stat_b != MP_IMPORT_STAT_FILE) {
|
if (stat_b != MP_IMPORT_STAT_FILE) {
|
||||||
FATFS *fatfs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fatfs = filesystem_circuitpy();
|
||||||
FIL fs;
|
FIL fs;
|
||||||
UINT char_written = 0;
|
UINT char_written = 0;
|
||||||
const byte buffer[] = "#Serial port upload mode\nimport storage\nstorage.remount(\"/\", False)\nstorage.disable_usb_drive()\n";
|
const byte buffer[] = "#Serial port upload mode\nimport storage\nstorage.remount(\"/\", False)\nstorage.disable_usb_drive()\n";
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "extmod/vfs_fat.h"
|
#include "extmod/vfs_fat.h"
|
||||||
#include "py/mpstate.h"
|
#include "py/mpstate.h"
|
||||||
#include "py/objstr.h"
|
#include "py/objstr.h"
|
||||||
|
#include "supervisor/filesystem.h"
|
||||||
|
|
||||||
STATIC uint8_t consume_spaces(FIL *active_file) {
|
STATIC uint8_t consume_spaces(FIL *active_file) {
|
||||||
uint8_t character = ' ';
|
uint8_t character = ' ';
|
||||||
|
@ -188,7 +189,7 @@ STATIC mp_int_t read_value(FIL *active_file, char *value, size_t value_len) {
|
||||||
|
|
||||||
mp_int_t dotenv_get_key(const char *path, const char *key, char *value, mp_int_t value_len) {
|
mp_int_t dotenv_get_key(const char *path, const char *key, char *value, mp_int_t value_len) {
|
||||||
FIL active_file;
|
FIL active_file;
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
FRESULT result = f_open(fs, &active_file, path, FA_READ);
|
FRESULT result = f_open(fs, &active_file, path, FA_READ);
|
||||||
if (result != FR_OK) {
|
if (result != FR_OK) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -45,4 +45,6 @@ void filesystem_set_concurrent_write_protection(fs_user_mount_t *vfs, bool concu
|
||||||
bool filesystem_is_writable_by_python(fs_user_mount_t *vfs);
|
bool filesystem_is_writable_by_python(fs_user_mount_t *vfs);
|
||||||
bool filesystem_is_writable_by_usb(fs_user_mount_t *vfs);
|
bool filesystem_is_writable_by_usb(fs_user_mount_t *vfs);
|
||||||
|
|
||||||
|
FATFS *filesystem_circuitpy(void);
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_SUPERVISOR_FILESYSTEM_H
|
#endif // MICROPY_INCLUDED_SUPERVISOR_FILESYSTEM_H
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "common-hal/_bleio/__init__.h"
|
#include "common-hal/_bleio/__init__.h"
|
||||||
|
|
||||||
#include "supervisor/fatfs_port.h"
|
#include "supervisor/fatfs_port.h"
|
||||||
|
#include "supervisor/filesystem.h"
|
||||||
#include "supervisor/shared/reload.h"
|
#include "supervisor/shared/reload.h"
|
||||||
#include "supervisor/shared/bluetooth/file_transfer.h"
|
#include "supervisor/shared/bluetooth/file_transfer.h"
|
||||||
#include "supervisor/shared/bluetooth/file_transfer_protocol.h"
|
#include "supervisor/shared/bluetooth/file_transfer_protocol.h"
|
||||||
|
@ -172,7 +173,7 @@ STATIC uint8_t _process_read(const uint8_t *raw_buf, size_t command_len) {
|
||||||
char *path = (char *)((uint8_t *)command) + header_size;
|
char *path = (char *)((uint8_t *)command) + header_size;
|
||||||
path[command->path_length] = '\0';
|
path[command->path_length] = '\0';
|
||||||
|
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
FRESULT result = f_open(fs, &active_file, path, FA_READ);
|
FRESULT result = f_open(fs, &active_file, path, FA_READ);
|
||||||
if (result != FR_OK) {
|
if (result != FR_OK) {
|
||||||
response.status = STATUS_ERROR;
|
response.status = STATUS_ERROR;
|
||||||
|
@ -289,7 +290,7 @@ STATIC uint8_t _process_write(const uint8_t *raw_buf, size_t command_len) {
|
||||||
return ANY_COMMAND;
|
return ANY_COMMAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
DWORD fattime;
|
DWORD fattime;
|
||||||
_truncated_time = truncate_time(command->modification_time, &fattime);
|
_truncated_time = truncate_time(command->modification_time, &fattime);
|
||||||
override_fattime(fattime);
|
override_fattime(fattime);
|
||||||
|
@ -438,7 +439,7 @@ STATIC uint8_t _process_delete(const uint8_t *raw_buf, size_t command_len) {
|
||||||
if (command_len < header_size + command->path_length) {
|
if (command_len < header_size + command->path_length) {
|
||||||
return THIS_COMMAND;
|
return THIS_COMMAND;
|
||||||
}
|
}
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
char *path = (char *)((uint8_t *)command) + header_size;
|
char *path = (char *)((uint8_t *)command) + header_size;
|
||||||
path[command->path_length] = '\0';
|
path[command->path_length] = '\0';
|
||||||
FILINFO file;
|
FILINFO file;
|
||||||
|
@ -495,7 +496,7 @@ STATIC uint8_t _process_mkdir(const uint8_t *raw_buf, size_t command_len) {
|
||||||
if (command_len < header_size + command->path_length) {
|
if (command_len < header_size + command->path_length) {
|
||||||
return THIS_COMMAND;
|
return THIS_COMMAND;
|
||||||
}
|
}
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
char *path = (char *)command->path;
|
char *path = (char *)command->path;
|
||||||
_terminate_path(path, command->path_length);
|
_terminate_path(path, command->path_length);
|
||||||
|
|
||||||
|
@ -552,7 +553,7 @@ STATIC uint8_t _process_listdir(uint8_t *raw_buf, size_t command_len) {
|
||||||
return THIS_COMMAND;
|
return THIS_COMMAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
char *path = (char *)&command->path;
|
char *path = (char *)&command->path;
|
||||||
_terminate_path(path, command->path_length);
|
_terminate_path(path, command->path_length);
|
||||||
// mp_printf(&mp_plat_print, "list %s\n", path);
|
// mp_printf(&mp_plat_print, "list %s\n", path);
|
||||||
|
@ -640,7 +641,7 @@ STATIC uint8_t _process_move(const uint8_t *raw_buf, size_t command_len) {
|
||||||
if (command_len < header_size + total_path_length) {
|
if (command_len < header_size + total_path_length) {
|
||||||
return THIS_COMMAND;
|
return THIS_COMMAND;
|
||||||
}
|
}
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
char *old_path = (char *)command->paths;
|
char *old_path = (char *)command->paths;
|
||||||
old_path[command->old_path_length] = '\0';
|
old_path[command->old_path_length] = '\0';
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,9 @@ bool filesystem_init(bool create_allowed, bool force_create) {
|
||||||
vfs_fat->blockdev.flags = 0;
|
vfs_fat->blockdev.flags = 0;
|
||||||
supervisor_flash_init_vfs(vfs_fat);
|
supervisor_flash_init_vfs(vfs_fat);
|
||||||
|
|
||||||
|
mp_vfs_mount_t *vfs = &_mp_vfs;
|
||||||
|
vfs->len = 0;
|
||||||
|
|
||||||
// try to mount the flash
|
// try to mount the flash
|
||||||
FRESULT res = f_mount(&vfs_fat->fatfs);
|
FRESULT res = f_mount(&vfs_fat->fatfs);
|
||||||
if ((res == FR_NO_FILESYSTEM && create_allowed) || force_create) {
|
if ((res == FR_NO_FILESYSTEM && create_allowed) || force_create) {
|
||||||
|
@ -140,7 +143,6 @@ bool filesystem_init(bool create_allowed, bool force_create) {
|
||||||
} else if (res != FR_OK) {
|
} else if (res != FR_OK) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mp_vfs_mount_t *vfs = &_mp_vfs;
|
|
||||||
vfs->str = "/";
|
vfs->str = "/";
|
||||||
vfs->len = 1;
|
vfs->len = 1;
|
||||||
vfs->obj = MP_OBJ_FROM_PTR(vfs_fat);
|
vfs->obj = MP_OBJ_FROM_PTR(vfs_fat);
|
||||||
|
@ -199,5 +201,12 @@ void filesystem_set_concurrent_write_protection(fs_user_mount_t *vfs, bool concu
|
||||||
}
|
}
|
||||||
|
|
||||||
bool filesystem_present(void) {
|
bool filesystem_present(void) {
|
||||||
return true;
|
return _mp_vfs.len > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
FATFS *filesystem_circuitpy(void) {
|
||||||
|
if (!filesystem_present()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return &_internal_vfs.fatfs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "shared-module/storage/__init__.h"
|
#include "shared-module/storage/__init__.h"
|
||||||
#include "shared/timeutils/timeutils.h"
|
#include "shared/timeutils/timeutils.h"
|
||||||
#include "supervisor/fatfs_port.h"
|
#include "supervisor/fatfs_port.h"
|
||||||
|
#include "supervisor/filesystem.h"
|
||||||
#include "supervisor/shared/reload.h"
|
#include "supervisor/shared/reload.h"
|
||||||
#include "supervisor/shared/translate/translate.h"
|
#include "supervisor/shared/translate/translate.h"
|
||||||
#include "supervisor/shared/web_workflow/web_workflow.h"
|
#include "supervisor/shared/web_workflow/web_workflow.h"
|
||||||
|
@ -979,7 +980,7 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
||||||
} else {
|
} else {
|
||||||
char *path = request->path + 3;
|
char *path = request->path + 3;
|
||||||
size_t pathlen = strlen(path);
|
size_t pathlen = strlen(path);
|
||||||
FATFS *fs = &((fs_user_mount_t *)MP_STATE_VM(vfs_mount_table)->obj)->fatfs;
|
FATFS *fs = filesystem_circuitpy();
|
||||||
// Trailing / is a directory.
|
// Trailing / is a directory.
|
||||||
bool directory = false;
|
bool directory = false;
|
||||||
if (path[pathlen - 1] == '/') {
|
if (path[pathlen - 1] == '/') {
|
||||||
|
|
Loading…
Reference in New Issue