diff options
Diffstat (limited to 'py/stream.c')
-rw-r--r-- | py/stream.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/py/stream.c b/py/stream.c index 88ddc5e6c..be560d3c2 100644 --- a/py/stream.c +++ b/py/stream.c @@ -30,7 +30,8 @@ static mp_obj_t stream_read(uint n_args, const mp_obj_t *args) { nlr_jump(mp_obj_new_exception_msg_varg(MP_QSTR_OSError, "[Errno %d]", error)); } else { // TODO don't intern this string - return mp_obj_new_str(qstr_from_strn_take(buf, sz, out_sz)); + buf = m_realloc(buf, sz, out_sz); + return mp_obj_new_str(qstr_from_strn_take(buf, out_sz, out_sz)); } } @@ -134,9 +135,18 @@ static mp_obj_t stream_unbuffered_readline(uint n_args, const mp_obj_t *args) { } // TODO don't intern this string vstr_shrink(vstr); - return mp_obj_new_str(qstr_from_strn_take(vstr_str(vstr), vstr->alloc, vstr_len(vstr))); + return MP_OBJ_NEW_QSTR(qstr_from_strn_take(vstr_str(vstr), vstr->alloc, vstr_len(vstr))); } +mp_obj_t mp_stream_unbuffered_iter(mp_obj_t self) { + mp_obj_t l_in = stream_unbuffered_readline(1, &self); + const char *l = qstr_str(MP_OBJ_QSTR_VALUE(l_in)); + // TODO: \0 + if (*l != 0) { + return l_in; + } + return mp_const_stop_iteration; +} MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_read_obj, 1, 2, stream_read); MP_DEFINE_CONST_FUN_OBJ_1(mp_stream_readall_obj, stream_readall); |