diff options
| author | Damien George <damien.p.george@gmail.com> | 2016-05-23 12:42:23 +0100 |
|---|---|---|
| committer | Damien George <damien.p.george@gmail.com> | 2016-05-23 12:42:23 +0100 |
| commit | 274952a1174efe27fa90dd793587837584712358 (patch) | |
| tree | 0d9933dabed53dddfdbf89a3e8771d4a65c1b847 /py/frozenmod.c | |
| parent | 3e33aeb0db428a312725f4dc4c242200e8e5f9a0 (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.c | 55 |
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); |
