diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-03-25 14:33:38 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-03-25 14:33:38 +0200 |
commit | 063e6e7d0aa6fa6ad9f9c65cac4eb49e4a5a6548 (patch) | |
tree | cfe16bf66b96d44d9798f40c00d5692fd17dabfd /py/modio.c | |
parent | 5d93dfbc2cca21806970d3a6a26b488191703f0b (diff) | |
download | micropython-063e6e7d0aa6fa6ad9f9c65cac4eb49e4a5a6548.tar.gz micropython-063e6e7d0aa6fa6ad9f9c65cac4eb49e4a5a6548.zip |
py/modio: Implement io.BufferedWriter.flush().
Diffstat (limited to 'py/modio.c')
-rw-r--r-- | py/modio.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/py/modio.c b/py/modio.c index 04d3d79af3..d41e9592bf 100644 --- a/py/modio.c +++ b/py/modio.c @@ -82,8 +82,25 @@ STATIC mp_uint_t bufwriter_write(mp_obj_t self_in, const void *buf, mp_uint_t si return org_size; } +STATIC mp_obj_t bufwriter_flush(mp_obj_t self_in) { + mp_obj_bufwriter_t *self = MP_OBJ_TO_PTR(self_in); + + if (self->len != 0) { + int err; + mp_uint_t out_sz = mp_stream_writeall(self->stream, self->buf, self->len, &err); + self->len = 0; + if (out_sz == MP_STREAM_ERROR) { + nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(err))); + } + } + + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_1(bufwriter_flush_obj, bufwriter_flush); + STATIC const mp_map_elem_t bufwriter_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_write), (mp_obj_t)&mp_stream_write_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_flush), (mp_obj_t)&bufwriter_flush_obj }, }; STATIC MP_DEFINE_CONST_DICT(bufwriter_locals_dict, bufwriter_locals_dict_table); |