diff options
author | Damien George <damien.p.george@gmail.com> | 2014-01-21 21:54:15 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-01-21 21:54:15 +0000 |
commit | 12eaccacda83a15500dae4616b3c37deecb57182 (patch) | |
tree | 5ec75424388c0be9e3591f981982d891c07669cc /py/stream.c | |
parent | 55baff4c9bcbc001cbb8972c289ebfa356d4665b (diff) | |
parent | 7280f790881fa174e4d234266ff42f0fe3d847bc (diff) | |
download | micropython-12eaccacda83a15500dae4616b3c37deecb57182.tar.gz micropython-12eaccacda83a15500dae4616b3c37deecb57182.zip |
Merge branch 'master' of github.com:micropython/micropython
Conflicts:
py/objstr.c
py/py.mk
py/stream.c
unix/main.c
unix/socket.c
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 88ddc5e6c9..be560d3c22 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); |