Commit cac666f3 authored by stijn's avatar stijn Committed by Damien George

extmod/vfs_posix_file: Fix flush handling in msvc builds.

Flushing console output in msvc builds always fails because that
output is not buffered so don't propagate that as an error (in a
simlar way as was done in 1c047742 for macOS).
Signed-off-by: default avatarstijn <stijn@ignitron.net>
parent 92717a95
......@@ -153,11 +153,14 @@ STATIC mp_uint_t vfs_posix_file_ioctl(mp_obj_t o_in, mp_uint_t request, uintptr_
switch (request) {
case MP_STREAM_FLUSH: {
int ret;
// fsync(stdin/stdout/stderr) may fail with EINVAL (or ENOTSUP on macos),
// but don't propagate that error out. Because data is not buffered by
// us, and stdin/out/err.flush() should just be a no-op.
#ifdef __APPLE__
// fsync(stdin/stdout/stderr) may fail with EINVAL (or ENOTSUP on macos or EBADF
// on windows), because the OS doesn't buffer these except for instance when they
// are redirected from/to file, but don't propagate that error out. Because data
// is not buffered by us, and stdin/out/err.flush() should just be a no-op.
#if defined(__APPLE__)
#define VFS_POSIX_STREAM_STDIO_ERR_CATCH (err == EINVAL || err == ENOTSUP)
#elif defined(_MSC_VER)
#define VFS_POSIX_STREAM_STDIO_ERR_CATCH (err == EINVAL || err == EBADF)
#else
#define VFS_POSIX_STREAM_STDIO_ERR_CATCH (err == EINVAL)
#endif
......
Markdown is supported
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