Skip to content
This repository was archived by the owner on Apr 25, 2021. It is now read-only.

Commit 88d05a8

Browse files
committed
Fix vfs_reader
1 parent 5b0563f commit 88d05a8

File tree

3 files changed

+21
-17
lines changed

3 files changed

+21
-17
lines changed

src/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ SRC_C = \
6060
moduvalue.c \
6161
gccollect.c \
6262
openpython_vfs.c \
63+
vfs_reader.c \
6364
msgpack.c \
6465
syscall.c \
6566

src/mpconfigport.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
// Python internal features
4646
#define MICROPY_ENABLE_EXTERNAL_IMPORT (1)
4747
#define MICROPY_READER_POSIX (0)
48-
#define MICROPY_READER_VFS (1)
48+
#define MICROPY_READER_VFS (0)
49+
#define MICROPY_READER_CUSTOM_VFS (1)
4950
#define MICROPY_VM_HOOK_INIT
5051
#define MICROPY_VM_HOOK_LOOP
5152
#define MICROPY_VM_HOOK_RETURN

src/vfs_reader.c

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,35 @@
3232
#include "py/reader.h"
3333
#include "extmod/vfs.h"
3434

35-
#if MICROPY_READER_VFS
35+
#if MICROPY_READER_CUSTOM_VFS
36+
37+
mp_lexer_t *mp_lexer_new_from_file(const char *filename) {
38+
mp_reader_t reader;
39+
mp_reader_new_file(&reader, filename);
40+
return mp_lexer_new(qstr_from_str(filename), reader);
41+
}
3642

3743
typedef struct _mp_reader_vfs_t {
3844
mp_obj_t file;
3945
uint16_t len;
4046
uint16_t pos;
41-
byte buf[2048];
47+
byte buf[4096];
4248
} mp_reader_vfs_t;
4349

4450
STATIC mp_uint_t mp_reader_vfs_readbyte(void *data) {
4551
mp_reader_vfs_t *reader = (mp_reader_vfs_t*)data;
4652
if (reader->pos >= reader->len) {
47-
if (reader->len < sizeof(reader->buf)) {
53+
int errcode;
54+
reader->len = mp_stream_rw(reader->file, reader->buf, sizeof(reader->buf),
55+
&errcode, MP_STREAM_RW_READ | MP_STREAM_RW_ONCE);
56+
if (errcode != 0) {
57+
// TODO handle errors properly
58+
return MP_READER_EOF;
59+
}
60+
if (reader->len == 0) {
4861
return MP_READER_EOF;
49-
} else {
50-
int errcode;
51-
reader->len = mp_stream_rw(reader->file, reader->buf, sizeof(reader->buf),
52-
&errcode, MP_STREAM_RW_READ | MP_STREAM_RW_ONCE);
53-
if (errcode != 0) {
54-
// TODO handle errors properly
55-
return MP_READER_EOF;
56-
}
57-
if (reader->len == 0) {
58-
return MP_READER_EOF;
59-
}
60-
reader->pos = 0;
6162
}
63+
reader->pos = 0;
6264
}
6365
return reader->buf[reader->pos++];
6466
}
@@ -84,4 +86,4 @@ void mp_reader_new_file(mp_reader_t *reader, const char *filename) {
8486
reader->close = mp_reader_vfs_close;
8587
}
8688

87-
#endif // MICROPY_READER_VFS
89+
#endif // MICROPY_READER_CUSTOM_VFS

0 commit comments

Comments
 (0)