summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--unix/modos.c29
-rw-r--r--unix/mpconfigport.h1
-rw-r--r--unix/qstrdefsport.h3
3 files changed, 33 insertions, 0 deletions
diff --git a/unix/modos.c b/unix/modos.c
index 21b9c6f6a1..02d7e37e02 100644
--- a/unix/modos.c
+++ b/unix/modos.c
@@ -30,6 +30,7 @@
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
+#include <sys/statvfs.h>
#include "py/nlr.h"
#include "py/runtime.h"
@@ -62,6 +63,31 @@ STATIC mp_obj_t mod_os_stat(mp_obj_t path_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_os_stat_obj, mod_os_stat);
+#if MICROPY_PY_OS_STATVFS
+STATIC mp_obj_t mod_os_statvfs(mp_obj_t path_in) {
+ struct statvfs sb;
+ mp_uint_t len;
+ const char *path = mp_obj_str_get_data(path_in, &len);
+
+ int res = statvfs(path, &sb);
+ RAISE_ERRNO(res, errno);
+
+ mp_obj_tuple_t *t = mp_obj_new_tuple(10, NULL);
+ t->items[0] = MP_OBJ_NEW_SMALL_INT(sb.f_bsize);
+ t->items[1] = MP_OBJ_NEW_SMALL_INT(sb.f_frsize);
+ t->items[2] = MP_OBJ_NEW_SMALL_INT(sb.f_blocks);
+ t->items[3] = MP_OBJ_NEW_SMALL_INT(sb.f_bfree);
+ t->items[4] = MP_OBJ_NEW_SMALL_INT(sb.f_bavail);
+ t->items[5] = MP_OBJ_NEW_SMALL_INT(sb.f_files);
+ t->items[6] = MP_OBJ_NEW_SMALL_INT(sb.f_ffree);
+ t->items[7] = MP_OBJ_NEW_SMALL_INT(sb.f_favail);
+ t->items[8] = MP_OBJ_NEW_SMALL_INT(sb.f_flag);
+ t->items[9] = MP_OBJ_NEW_SMALL_INT(sb.f_namemax);
+ return t;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_os_statvfs_obj, mod_os_statvfs);
+#endif
+
STATIC mp_obj_t mod_os_unlink(mp_obj_t path_in) {
mp_uint_t len;
const char *path = mp_obj_str_get_data(path_in, &len);
@@ -88,6 +114,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_os_system_obj, mod_os_system);
STATIC const mp_map_elem_t mp_module_os_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR__os) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_stat), (mp_obj_t)&mod_os_stat_obj },
+ #if MICROPY_PY_OS_STATVFS
+ { MP_OBJ_NEW_QSTR(MP_QSTR_statvfs), (mp_obj_t)&mod_os_statvfs_obj },
+ #endif
{ MP_OBJ_NEW_QSTR(MP_QSTR_system), (mp_obj_t)&mod_os_system_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_unlink),(mp_obj_t)&mod_os_unlink_obj},
};
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index 7deef4fdc7..13cf1e87b8 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -93,6 +93,7 @@
#define MICROPY_STACKLESS (0)
#define MICROPY_STACKLESS_STRICT (0)
+#define MICROPY_PY_OS_STATVFS (1)
#define MICROPY_PY_UCTYPES (1)
#define MICROPY_PY_UZLIB (1)
#define MICROPY_PY_UJSON (1)
diff --git a/unix/qstrdefsport.h b/unix/qstrdefsport.h
index a04f4b9edc..e91d8fb795 100644
--- a/unix/qstrdefsport.h
+++ b/unix/qstrdefsport.h
@@ -36,6 +36,9 @@ Q(flush)
Q(_os)
Q(stat)
+#if MICROPY_PY_OS_STATVFS
+Q(statvfs)
+#endif
Q(system)
Q(unlink)