diff options
| author | Damien George <damien@micropython.org> | 2022-03-04 10:54:05 +1100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-12-23 13:04:54 +1100 |
| commit | f870e8d2d406e809b4494e6d029fee0269b1ea05 (patch) | |
| tree | c925e58b53fa4d67b8c45e6c87ac0d8aa431ef82 /py/reader.c | |
| parent | a1c32101ac3bc70ed2774f461c69548ce8dae23d (diff) | |
py/reader: Provide mp_reader_try_read_rom() function.
This allows accessing data directly in ROM if the reader supports it.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/reader.c')
| -rw-r--r-- | py/reader.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/py/reader.c b/py/reader.c index 151e04cac..8feb6d752 100644 --- a/py/reader.c +++ b/py/reader.c @@ -50,7 +50,7 @@ static mp_uint_t mp_reader_mem_readbyte(void *data) { static void mp_reader_mem_close(void *data) { mp_reader_mem_t *reader = (mp_reader_mem_t *)data; - if (reader->free_len > 0) { + if (reader->free_len > 0 && reader->free_len != MP_READER_IS_ROM) { m_del(char, (char *)reader->beg, reader->free_len); } m_del_obj(mp_reader_mem_t, reader); @@ -67,6 +67,19 @@ void mp_reader_new_mem(mp_reader_t *reader, const byte *buf, size_t len, size_t reader->close = mp_reader_mem_close; } +const uint8_t *mp_reader_try_read_rom(mp_reader_t *reader, size_t len) { + if (reader->readbyte != mp_reader_mem_readbyte) { + return NULL; + } + mp_reader_mem_t *m = reader->data; + if (m->free_len != MP_READER_IS_ROM) { + return NULL; + } + const uint8_t *data = m->cur; + m->cur += len; + return data; +} + #if MICROPY_READER_POSIX #include <sys/stat.h> |
