diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2015-10-19 21:42:14 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2015-10-19 21:43:20 +0300 |
commit | 39a380b6219159d97714507698ad0309a08b0a73 (patch) | |
tree | e21e80065c8509379298fdf769b0c642103ea9fe /unix/modos.c | |
parent | e0f5df579b6cf0410b9693f9a75d9b50a0de350e (diff) |
unix/modos: Android Bionic lacks statvfs(), has BSD statfs().
Diffstat (limited to 'unix/modos.c')
-rw-r--r-- | unix/modos.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/unix/modos.c b/unix/modos.c index e50c3aa16..8463259d5 100644 --- a/unix/modos.c +++ b/unix/modos.c @@ -31,14 +31,15 @@ #include <errno.h> #include <stdlib.h> #include "py/mpconfig.h" -#if MICROPY_PY_OS_STATVFS -#include <sys/statvfs.h> -#endif #include "py/nlr.h" #include "py/runtime.h" #include "py/objtuple.h" +#ifdef __ANDROID__ +#define USE_STATFS 1 +#endif + #define RAISE_ERRNO(err_flag, error_val) \ { if (err_flag == -1) \ { nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(error_val))); } } @@ -67,12 +68,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 + +#if MICROPY_PY_OS_STATVFS +#if USE_STATFS +#include <sys/vfs.h> +#define STRUCT_STATVFS struct statfs +#define STATVFS statfs +#define F_FAVAIL sb.f_ffree +#define F_NAMEMAX sb.f_namelen +#define F_FLAG sb.f_flags +#else +#include <sys/statvfs.h> +#define STRUCT_STATVFS struct statvfs +#define STATVFS statvfs +#define F_FAVAIL sb.f_favail +#define F_NAMEMAX sb.f_namemax +#define F_FLAG sb.f_flag +#endif +#endif + STATIC mp_obj_t mod_os_statvfs(mp_obj_t path_in) { - struct statvfs sb; + STRUCT_STATVFS sb; mp_uint_t len; const char *path = mp_obj_str_get_data(path_in, &len); - int res = statvfs(path, &sb); + int res = STATVFS(path, &sb); RAISE_ERRNO(res, errno); mp_obj_tuple_t *t = mp_obj_new_tuple(10, NULL); @@ -83,9 +103,9 @@ STATIC mp_obj_t mod_os_statvfs(mp_obj_t path_in) { 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); + t->items[7] = MP_OBJ_NEW_SMALL_INT(F_FAVAIL); + t->items[8] = MP_OBJ_NEW_SMALL_INT(F_FLAG); + t->items[9] = MP_OBJ_NEW_SMALL_INT(F_NAMEMAX); return t; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_os_statvfs_obj, mod_os_statvfs); |