summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2018-06-04 17:22:57 -0700
committerGitHub <noreply@github.com>2018-06-04 17:22:57 -0700
commit0c7c0821fc58af64c7f05e563f7334ceff2d8f55 (patch)
treedcea463c2039ade1cdab3679202199f027afb84f
parent9a6a5ea2d989577edc74bf301390398ab2e133f9 (diff)
parentd0e6bb269fa425995a31083f02753203afccd253 (diff)
Merge pull request #891 from godlygeek/low_flash_errno_fixes
Human readable OSError messages for low flash devices
-rw-r--r--ports/atmel-samd/mpconfigport.h12
-rw-r--r--ports/nrf/mpconfigport.h2
-rw-r--r--py/moduerrno.c15
-rw-r--r--py/mperrno.h6
-rw-r--r--py/objexcept.c2
5 files changed, 26 insertions, 11 deletions
diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h
index ee75a26c5..276ffafe3 100644
--- a/ports/atmel-samd/mpconfigport.h
+++ b/ports/atmel-samd/mpconfigport.h
@@ -292,6 +292,18 @@ extern const struct _mp_obj_module_t usb_hid_module;
{ MP_OBJ_NEW_QSTR(MP_QSTR_uheap),(mp_obj_t)&uheap_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_ustack),(mp_obj_t)&ustack_module }
+#define MICROPY_PY_UERRNO_LIST \
+ X(EPERM) \
+ X(ENOENT) \
+ X(EIO) \
+ X(EAGAIN) \
+ X(ENOMEM) \
+ X(EACCES) \
+ X(EEXIST) \
+ X(ENODEV) \
+ X(EISDIR) \
+ X(EINVAL) \
+
// We need to provide a declaration/definition of alloca()
#include <alloca.h>
diff --git a/ports/nrf/mpconfigport.h b/ports/nrf/mpconfigport.h
index 442e98de5..e379469c0 100644
--- a/ports/nrf/mpconfigport.h
+++ b/ports/nrf/mpconfigport.h
@@ -82,7 +82,7 @@
#define MICROPY_STREAMS_NON_BLOCK (1)
#define MICROPY_MODULE_WEAK_LINKS (1)
#define MICROPY_CAN_OVERRIDE_BUILTINS (1)
-#define MICROPY_USE_INTERNAL_ERRNO (1)
+#define MICROPY_USE_INTERNAL_ERRNO (0)
#define MICROPY_PY_FUNCTION_ATTRS (1)
#define MICROPY_PY_BUILTINS_STR_UNICODE (1)
#define MICROPY_PY_BUILTINS_STR_CENTER (0)
diff --git a/py/moduerrno.c b/py/moduerrno.c
index ce8a6bf89..660fca07a 100644
--- a/py/moduerrno.c
+++ b/py/moduerrno.c
@@ -30,8 +30,6 @@
#include "py/obj.h"
#include "py/mperrno.h"
-#if MICROPY_PY_UERRNO
-
// This list can be defined per port in mpconfigport.h to tailor it to a
// specific port's needs. If it's not defined then we provide a default.
#ifndef MICROPY_PY_UERRNO_LIST
@@ -61,6 +59,8 @@
#endif
+#if MICROPY_PY_UERRNO
+
#if MICROPY_PY_UERRNO_ERRORCODE
STATIC const mp_rom_map_elem_t errorcode_table[] = {
#define X(e) { MP_ROM_INT(MP_ ## e), MP_ROM_QSTR(MP_QSTR_## e) },
@@ -133,4 +133,15 @@ qstr mp_errno_to_str(mp_obj_t errno_val) {
#endif
}
+#else //MICROPY_PY_UERRNO
+
+qstr mp_errno_to_str(mp_obj_t errno_val) {
+ int v = MP_OBJ_SMALL_INT_VALUE(errno_val);
+ #define X(e) if (v == e) return (MP_QSTR_ ## e);
+ MICROPY_PY_UERRNO_LIST
+ #undef X
+
+ return MP_QSTR_;
+}
+
#endif //MICROPY_PY_UERRNO
diff --git a/py/mperrno.h b/py/mperrno.h
index caac116ab..a028157ba 100644
--- a/py/mperrno.h
+++ b/py/mperrno.h
@@ -142,12 +142,6 @@
#endif
-#if MICROPY_PY_UERRNO
-
-#include "py/obj.h"
-
qstr mp_errno_to_str(mp_obj_t errno_val);
-#endif
-
#endif // MICROPY_INCLUDED_PY_MPERRNO_H
diff --git a/py/objexcept.c b/py/objexcept.c
index a800a13fb..f0874df77 100644
--- a/py/objexcept.c
+++ b/py/objexcept.c
@@ -113,7 +113,6 @@ STATIC void mp_obj_exception_print(const mp_print_t *print, mp_obj_t o_in, mp_pr
mp_print_str(print, "");
return;
} else if (o->args->len == 1) {
- #if MICROPY_PY_UERRNO
// try to provide a nice OSError error message
if (o->base.type == &mp_type_OSError && MP_OBJ_IS_SMALL_INT(o->args->items[0])) {
qstr qst = mp_errno_to_str(o->args->items[0]);
@@ -122,7 +121,6 @@ STATIC void mp_obj_exception_print(const mp_print_t *print, mp_obj_t o_in, mp_pr
return;
}
}
- #endif
mp_obj_print_helper(print, o->args->items[0], PRINT_STR);
return;
}