Commit 45fb143b authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

streams: Make .write() support arbitrary objects with buffer interface.

This in particular fixes writing str vs bytes.
parent 1463c1fa
...@@ -42,10 +42,11 @@ STATIC mp_obj_t stream_write(mp_obj_t self_in, mp_obj_t arg) { ...@@ -42,10 +42,11 @@ STATIC mp_obj_t stream_write(mp_obj_t self_in, mp_obj_t arg) {
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "Operation not supported")); nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "Operation not supported"));
} }
uint sz; mp_buffer_info_t bufinfo;
const char *buf = mp_obj_str_get_data(arg, &sz); mp_get_buffer_raise(arg, &bufinfo, MP_BUFFER_READ);
int error; int error;
machine_int_t out_sz = o->type->stream_p->write(self_in, buf, sz, &error); machine_int_t out_sz = o->type->stream_p->write(self_in, bufinfo.buf, bufinfo.len, &error);
if (out_sz == -1) { if (out_sz == -1) {
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError, "[Errno %d]", error)); nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError, "[Errno %d]", error));
} else { } else {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment