From 8fac939889c6f2db36cc8f1290605812305cea59 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 27 Jul 2016 00:24:09 +0300 Subject: [PATCH] unix/file: Implement MP_STREAM_FLUSH ioctl. --- unix/file.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/unix/file.c b/unix/file.c index a7620e079e..4d3a9f3621 100644 --- a/unix/file.c +++ b/unix/file.c @@ -105,18 +105,26 @@ STATIC mp_uint_t fdfile_write(mp_obj_t o_in, const void *buf, mp_uint_t size, in STATIC mp_uint_t fdfile_ioctl(mp_obj_t o_in, mp_uint_t request, uintptr_t arg, int *errcode) { mp_obj_fdfile_t *o = MP_OBJ_TO_PTR(o_in); - if (request == MP_STREAM_SEEK) { - struct mp_stream_seek_t *s = (struct mp_stream_seek_t*)arg; - off_t off = lseek(o->fd, s->offset, s->whence); - if (off == (off_t)-1) { - *errcode = errno; - return MP_STREAM_ERROR; + switch (request) { + case MP_STREAM_SEEK: { + struct mp_stream_seek_t *s = (struct mp_stream_seek_t*)arg; + off_t off = lseek(o->fd, s->offset, s->whence); + if (off == (off_t)-1) { + *errcode = errno; + return MP_STREAM_ERROR; + } + s->offset = off; + return 0; } - s->offset = off; - return 0; - } else { - *errcode = EINVAL; - return MP_STREAM_ERROR; + case MP_STREAM_FLUSH: + if (fsync(o->fd) < 0) { + *errcode = errno; + return MP_STREAM_ERROR; + } + return 0; + default: + *errcode = EINVAL; + return MP_STREAM_ERROR; } }