summaryrefslogtreecommitdiff
path: root/py/frozenmod.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-05-23 12:42:23 +0100
committerDamien George <damien.p.george@gmail.com>2016-05-23 12:42:23 +0100
commit274952a1174efe27fa90dd793587837584712358 (patch)
tree0d9933dabed53dddfdbf89a3e8771d4a65c1b847 /py/frozenmod.c
parent3e33aeb0db428a312725f4dc4c242200e8e5f9a0 (diff)
py: Allow to stat and import frozen mpy files using new frozen "VFS".
Freezing mpy files using mpy-tool.py now works again.
Diffstat (limited to 'py/frozenmod.c')
-rw-r--r--py/frozenmod.c55
1 files changed, 37 insertions, 18 deletions
diff --git a/py/frozenmod.c b/py/frozenmod.c
index 0fabb06a9..660167eed 100644
--- a/py/frozenmod.c
+++ b/py/frozenmod.c
@@ -43,24 +43,6 @@ extern const char mp_frozen_str_names[];
extern const uint32_t mp_frozen_str_sizes[];
extern const char mp_frozen_str_content[];
-mp_import_stat_t mp_frozen_stat(const char *str) {
- size_t len = strlen(str);
- const char *name = mp_frozen_str_names;
-
- for (int i = 0; *name != 0; i++) {
- size_t l = strlen(name);
- if (l >= len && !memcmp(str, name, len)) {
- if (name[len] == 0) {
- return MP_IMPORT_STAT_FILE;
- } else if (name[len] == '/') {
- return MP_IMPORT_STAT_DIR;
- }
- }
- name += l + 1;
- }
- return MP_IMPORT_STAT_NO_EXIST;
-}
-
STATIC mp_lexer_t *mp_find_frozen_str(const char *str, size_t len) {
const char *name = mp_frozen_str_names;
@@ -103,6 +85,43 @@ STATIC const mp_raw_code_t *mp_find_frozen_mpy(const char *str, size_t len) {
#if MICROPY_MODULE_FROZEN
+STATIC mp_import_stat_t mp_frozen_stat_helper(const char *name, const char *str) {
+ size_t len = strlen(str);
+
+ for (int i = 0; *name != 0; i++) {
+ size_t l = strlen(name);
+ if (l >= len && !memcmp(str, name, len)) {
+ if (name[len] == 0) {
+ return MP_IMPORT_STAT_FILE;
+ } else if (name[len] == '/') {
+ return MP_IMPORT_STAT_DIR;
+ }
+ }
+ name += l + 1;
+ }
+ return MP_IMPORT_STAT_NO_EXIST;
+}
+
+mp_import_stat_t mp_frozen_stat(const char *str) {
+ mp_import_stat_t stat;
+
+ #if MICROPY_MODULE_FROZEN_STR
+ stat = mp_frozen_stat_helper(mp_frozen_str_names, str);
+ if (stat != MP_IMPORT_STAT_NO_EXIST) {
+ return stat;
+ }
+ #endif
+
+ #if MICROPY_MODULE_FROZEN_MPY
+ stat = mp_frozen_stat_helper(mp_frozen_mpy_names, str);
+ if (stat != MP_IMPORT_STAT_NO_EXIST) {
+ return stat;
+ }
+ #endif
+
+ return MP_IMPORT_STAT_NO_EXIST;
+}
+
int mp_find_frozen_module(const char *str, size_t len, void **data) {
#if MICROPY_MODULE_FROZEN_STR
mp_lexer_t *lex = mp_find_frozen_str(str, len);