@@ -44,13 +44,13 @@ extern const uint32_t mp_frozen_str_sizes[];
44
44
extern const char mp_frozen_str_content [];
45
45
46
46
// On input, *len contains size of name, on output - size of content
47
- const char * mp_find_frozen_str (const char * str , size_t * len ) {
47
+ const char * mp_find_frozen_str (const char * str , size_t str_len , size_t * len ) {
48
48
const char * name = mp_frozen_str_names ;
49
49
50
50
size_t offset = 0 ;
51
51
for (int i = 0 ; * name != 0 ; i ++ ) {
52
52
size_t l = strlen (name );
53
- if (l == * len && !memcmp (str , name , l )) {
53
+ if (l == str_len && !memcmp (str , name , l )) {
54
54
* len = mp_frozen_str_sizes [i ];
55
55
return mp_frozen_str_content + offset ;
56
56
}
@@ -60,16 +60,16 @@ const char *mp_find_frozen_str(const char *str, size_t *len) {
60
60
return NULL ;
61
61
}
62
62
63
- STATIC mp_lexer_t * mp_lexer_frozen_str (const char * str , size_t len ) {
64
- size_t name_len = len ;
65
- const char * content = mp_find_frozen_str (str , & len );
63
+ STATIC mp_lexer_t * mp_lexer_frozen_str (const char * str , size_t str_len ) {
64
+ size_t file_len ;
65
+ const char * content = mp_find_frozen_str (str , str_len , & file_len );
66
66
67
67
if (content == NULL ) {
68
68
return NULL ;
69
69
}
70
70
71
- qstr source = qstr_from_strn (str , name_len );
72
- mp_lexer_t * lex = MICROPY_MODULE_FROZEN_LEXER (source , content , len , 0 );
71
+ qstr source = qstr_from_strn (str , str_len );
72
+ mp_lexer_t * lex = MICROPY_MODULE_FROZEN_LEXER (source , content , file_len , 0 );
73
73
return lex ;
74
74
}
75
75
@@ -82,11 +82,11 @@ STATIC mp_lexer_t *mp_lexer_frozen_str(const char *str, size_t len) {
82
82
extern const char mp_frozen_mpy_names [];
83
83
extern const mp_raw_code_t * const mp_frozen_mpy_content [];
84
84
85
- STATIC const mp_raw_code_t * mp_find_frozen_mpy (const char * str , size_t len ) {
85
+ STATIC const mp_raw_code_t * mp_find_frozen_mpy (const char * str , size_t str_len ) {
86
86
const char * name = mp_frozen_mpy_names ;
87
87
for (size_t i = 0 ; * name != 0 ; i ++ ) {
88
88
size_t l = strlen (name );
89
- if (l == len && !memcmp (str , name , l )) {
89
+ if (l == str_len && !memcmp (str , name , l )) {
90
90
return mp_frozen_mpy_content [i ];
91
91
}
92
92
name += l + 1 ;
@@ -136,15 +136,16 @@ mp_import_stat_t mp_frozen_stat(const char *str) {
136
136
}
137
137
138
138
int mp_find_frozen_module (const char * str , size_t len , void * * data ) {
139
+ // The +8/-8 account for the .frozen/ path prefix used on frozen modules.
139
140
#if MICROPY_MODULE_FROZEN_STR
140
- mp_lexer_t * lex = mp_lexer_frozen_str (str , len );
141
+ mp_lexer_t * lex = mp_lexer_frozen_str (str + 8 , len - 8 );
141
142
if (lex != NULL ) {
142
143
* data = lex ;
143
144
return MP_FROZEN_STR ;
144
145
}
145
146
#endif
146
147
#if MICROPY_MODULE_FROZEN_MPY
147
- const mp_raw_code_t * rc = mp_find_frozen_mpy (str , len );
148
+ const mp_raw_code_t * rc = mp_find_frozen_mpy (str + 8 , len - 8 );
148
149
if (rc != NULL ) {
149
150
* data = (void * )rc ;
150
151
return MP_FROZEN_MPY ;
0 commit comments