diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-26 05:46:06 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-26 05:54:16 +0300 |
commit | 45fb143ba62b70fc25264401f86ed79494d73ff9 (patch) | |
tree | 7e4901df3dc22d484bb593631b9f524146aced69 /py/stream.c | |
parent | 1463c1fa82e930edfef9df9b70c6b8c12cdcb1c1 (diff) | |
download | micropython-45fb143ba62b70fc25264401f86ed79494d73ff9.tar.gz micropython-45fb143ba62b70fc25264401f86ed79494d73ff9.zip |
streams: Make .write() support arbitrary objects with buffer interface.
This in particular fixes writing str vs bytes.
Diffstat (limited to 'py/stream.c')
-rw-r--r-- | py/stream.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/py/stream.c b/py/stream.c index ba80250216..72e6ab509d 100644 --- a/py/stream.c +++ b/py/stream.c @@ -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")); } - uint sz; - const char *buf = mp_obj_str_get_data(arg, &sz); + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(arg, &bufinfo, MP_BUFFER_READ); + 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) { nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError, "[Errno %d]", error)); } else { |