summaryrefslogtreecommitdiffstatshomepage
path: root/py/stream.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-01-21 21:54:15 +0000
committerDamien George <damien.p.george@gmail.com>2014-01-21 21:54:15 +0000
commit12eaccacda83a15500dae4616b3c37deecb57182 (patch)
tree5ec75424388c0be9e3591f981982d891c07669cc /py/stream.c
parent55baff4c9bcbc001cbb8972c289ebfa356d4665b (diff)
parent7280f790881fa174e4d234266ff42f0fe3d847bc (diff)
downloadmicropython-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.c14
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);