py: Improve stream_read so it doesn't need to alloc 2 bits of heap.
This commit is contained in:
parent
297d8469b8
commit
b7a4b0f86f
@ -166,7 +166,8 @@ STATIC mp_obj_t stream_read(uint n_args, const mp_obj_t *args) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
byte *buf = m_new(byte, sz);
|
byte *buf;
|
||||||
|
mp_obj_t ret_obj = mp_obj_str_builder_start(STREAM_CONTENT_TYPE(o->type->stream_p), sz, &buf);
|
||||||
int error;
|
int error;
|
||||||
mp_uint_t out_sz = o->type->stream_p->read(o, buf, sz, &error);
|
mp_uint_t out_sz = o->type->stream_p->read(o, buf, sz, &error);
|
||||||
if (out_sz == MP_STREAM_ERROR) {
|
if (out_sz == MP_STREAM_ERROR) {
|
||||||
@ -180,9 +181,7 @@ STATIC mp_obj_t stream_read(uint n_args, const mp_obj_t *args) {
|
|||||||
}
|
}
|
||||||
nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(error)));
|
nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(error)));
|
||||||
} else {
|
} else {
|
||||||
mp_obj_t s = mp_obj_new_str_of_type(STREAM_CONTENT_TYPE(o->type->stream_p), buf, out_sz); // will reallocate to use exact size
|
return mp_obj_str_builder_end_with_len(ret_obj, out_sz);
|
||||||
m_free(buf, sz);
|
|
||||||
return s;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user