unix/file: Implement MP_STREAM_FLUSH ioctl.

This commit is contained in:
Paul Sokolovsky 2016-07-27 00:24:09 +03:00
parent 6ead9f6f3d
commit 8fac939889
1 changed files with 19 additions and 11 deletions

View File

@ -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) { 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); mp_obj_fdfile_t *o = MP_OBJ_TO_PTR(o_in);
if (request == MP_STREAM_SEEK) { switch (request) {
struct mp_stream_seek_t *s = (struct mp_stream_seek_t*)arg; case MP_STREAM_SEEK: {
off_t off = lseek(o->fd, s->offset, s->whence); struct mp_stream_seek_t *s = (struct mp_stream_seek_t*)arg;
if (off == (off_t)-1) { off_t off = lseek(o->fd, s->offset, s->whence);
*errcode = errno; if (off == (off_t)-1) {
return MP_STREAM_ERROR; *errcode = errno;
return MP_STREAM_ERROR;
}
s->offset = off;
return 0;
} }
s->offset = off; case MP_STREAM_FLUSH:
return 0; if (fsync(o->fd) < 0) {
} else { *errcode = errno;
*errcode = EINVAL; return MP_STREAM_ERROR;
return MP_STREAM_ERROR; }
return 0;
default:
*errcode = EINVAL;
return MP_STREAM_ERROR;
} }
} }