summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/unix/file.c4
-rw-r--r--ports/unix/main.c16
-rw-r--r--ports/unix/moduos_vfs.c4
-rw-r--r--ports/unix/mpconfigport.h7
-rw-r--r--ports/unix/mpconfigport_coverage.h11
5 files changed, 36 insertions, 6 deletions
diff --git a/ports/unix/file.c b/ports/unix/file.c
index 9bb44c6ab..165bbd00b 100644
--- a/ports/unix/file.c
+++ b/ports/unix/file.c
@@ -37,7 +37,7 @@
#include "py/mphal.h"
#include "fdfile.h"
-#if MICROPY_PY_IO
+#if MICROPY_PY_IO && !MICROPY_VFS
#ifdef _WIN32
#define fsync _commit
@@ -277,4 +277,4 @@ const mp_obj_fdfile_t mp_sys_stdin_obj = { .base = {&mp_type_textio}, .fd = STD
const mp_obj_fdfile_t mp_sys_stdout_obj = { .base = {&mp_type_textio}, .fd = STDOUT_FILENO };
const mp_obj_fdfile_t mp_sys_stderr_obj = { .base = {&mp_type_textio}, .fd = STDERR_FILENO };
-#endif // MICROPY_PY_IO
+#endif // MICROPY_PY_IO && !MICROPY_VFS
diff --git a/ports/unix/main.c b/ports/unix/main.c
index 03f2f357e..b68fe9279 100644
--- a/ports/unix/main.c
+++ b/ports/unix/main.c
@@ -46,6 +46,8 @@
#include "py/mphal.h"
#include "py/mpthread.h"
#include "extmod/misc.h"
+#include "extmod/vfs.h"
+#include "extmod/vfs_posix.h"
#include "genhdr/mpversion.h"
#include "input.h"
@@ -447,6 +449,18 @@ MP_NOINLINE int main_(int argc, char **argv) {
mp_init();
+ #if MICROPY_VFS_POSIX
+ {
+ // Mount the host FS at the root of our internal VFS
+ mp_obj_t args[2] = {
+ mp_type_vfs_posix.make_new(&mp_type_vfs_posix, 0, 0, NULL),
+ MP_OBJ_NEW_QSTR(MP_QSTR__slash_),
+ };
+ mp_vfs_mount(2, args, (mp_map_t*)&mp_const_empty_map);
+ MP_STATE_VM(vfs_cur) = MP_STATE_VM(vfs_mount_table);
+ }
+ #endif
+
char *home = getenv("HOME");
char *path = getenv("MICROPYPATH");
if (path == NULL) {
@@ -645,6 +659,7 @@ MP_NOINLINE int main_(int argc, char **argv) {
return ret & 0xff;
}
+#if !MICROPY_VFS
uint mp_import_stat(const char *path) {
struct stat st;
if (stat(path, &st) == 0) {
@@ -656,6 +671,7 @@ uint mp_import_stat(const char *path) {
}
return MP_IMPORT_STAT_NO_EXIST;
}
+#endif
void nlr_jump_fail(void *val) {
printf("FATAL: uncaught NLR %p\n", val);
diff --git a/ports/unix/moduos_vfs.c b/ports/unix/moduos_vfs.c
index 96defa554..c61471e58 100644
--- a/ports/unix/moduos_vfs.c
+++ b/ports/unix/moduos_vfs.c
@@ -28,6 +28,7 @@
#include <string.h>
#include "extmod/vfs.h"
+#include "extmod/vfs_posix.h"
#include "extmod/vfs_fat.h"
#if MICROPY_VFS
@@ -52,6 +53,9 @@ STATIC const mp_rom_map_elem_t uos_vfs_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_statvfs), MP_ROM_PTR(&mp_vfs_statvfs_obj) },
{ MP_ROM_QSTR(MP_QSTR_unlink), MP_ROM_PTR(&mp_vfs_remove_obj) }, // unlink aliases to remove
+ #if MICROPY_VFS_POSIX
+ { MP_ROM_QSTR(MP_QSTR_VfsPosix), MP_ROM_PTR(&mp_type_vfs_posix) },
+ #endif
#if MICROPY_VFS_FAT
{ MP_ROM_QSTR(MP_QSTR_VfsFat), MP_ROM_PTR(&mp_fat_vfs_type) },
#endif
diff --git a/ports/unix/mpconfigport.h b/ports/unix/mpconfigport.h
index f0e17ccad..016dabf9f 100644
--- a/ports/unix/mpconfigport.h
+++ b/ports/unix/mpconfigport.h
@@ -180,9 +180,9 @@ extern const struct _mp_obj_module_t mp_module_ffi;
extern const struct _mp_obj_module_t mp_module_jni;
#if MICROPY_PY_UOS_VFS
-#define MICROPY_PY_UOS_VFS_DEF { MP_ROM_QSTR(MP_QSTR_uos_vfs), MP_ROM_PTR(&mp_module_uos_vfs) },
+#define MICROPY_PY_UOS_DEF { MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&mp_module_uos_vfs) },
#else
-#define MICROPY_PY_UOS_VFS_DEF
+#define MICROPY_PY_UOS_DEF { MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&mp_module_os) },
#endif
#if MICROPY_PY_FFI
#define MICROPY_PY_FFI_DEF { MP_ROM_QSTR(MP_QSTR_ffi), MP_ROM_PTR(&mp_module_ffi) },
@@ -221,8 +221,7 @@ extern const struct _mp_obj_module_t mp_module_jni;
MICROPY_PY_UTIME_DEF \
MICROPY_PY_SOCKET_DEF \
{ MP_ROM_QSTR(MP_QSTR_umachine), MP_ROM_PTR(&mp_module_machine) }, \
- { MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&mp_module_os) }, \
- MICROPY_PY_UOS_VFS_DEF \
+ MICROPY_PY_UOS_DEF \
MICROPY_PY_USELECT_DEF \
MICROPY_PY_TERMIOS_DEF \
diff --git a/ports/unix/mpconfigport_coverage.h b/ports/unix/mpconfigport_coverage.h
index b3fcd1e6b..f0e6fbe94 100644
--- a/ports/unix/mpconfigport_coverage.h
+++ b/ports/unix/mpconfigport_coverage.h
@@ -34,6 +34,7 @@
#define MICROPY_FLOAT_HIGH_QUALITY_HASH (1)
#define MICROPY_ENABLE_SCHEDULER (1)
+#define MICROPY_READER_VFS (1)
#define MICROPY_PY_DELATTR_SETATTR (1)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
#define MICROPY_PY_BUILTINS_RANGE_BINOP (1)
@@ -43,7 +44,17 @@
#define MICROPY_PY_URANDOM_EXTRA_FUNCS (1)
#define MICROPY_PY_IO_BUFFEREDWRITER (1)
#define MICROPY_PY_IO_RESOURCE_STREAM (1)
+#define MICROPY_VFS_POSIX (1)
#undef MICROPY_VFS_FAT
#define MICROPY_VFS_FAT (1)
#define MICROPY_PY_FRAMEBUF (1)
#define MICROPY_PY_COLLECTIONS_NAMEDTUPLE__ASDICT (1)
+
+// TODO these should be generic, not bound to fatfs
+#define mp_type_fileio mp_type_vfs_posix_fileio
+#define mp_type_textio mp_type_vfs_posix_textio
+
+// use vfs's functions for import stat and builtin open
+#define mp_import_stat mp_vfs_import_stat
+#define mp_builtin_open mp_vfs_open
+#define mp_builtin_open_obj mp_vfs_open_obj