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: stijn <stijn@ignitron.net>
This commit is contained in:
stijn 2023-10-03 13:12:42 +02:00 committed by Damien George
parent 92717a95c0
commit cac666f38c

View File

@ -153,11 +153,14 @@ STATIC mp_uint_t vfs_posix_file_ioctl(mp_obj_t o_in, mp_uint_t request, uintptr_
switch (request) { switch (request) {
case MP_STREAM_FLUSH: { case MP_STREAM_FLUSH: {
int ret; int ret;
// fsync(stdin/stdout/stderr) may fail with EINVAL (or ENOTSUP on macos), // fsync(stdin/stdout/stderr) may fail with EINVAL (or ENOTSUP on macos or EBADF
// but don't propagate that error out. Because data is not buffered by // on windows), because the OS doesn't buffer these except for instance when they
// us, and stdin/out/err.flush() should just be a no-op. // are redirected from/to file, but don't propagate that error out. Because data
#ifdef __APPLE__ // 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) #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 #else
#define VFS_POSIX_STREAM_STDIO_ERR_CATCH (err == EINVAL) #define VFS_POSIX_STREAM_STDIO_ERR_CATCH (err == EINVAL)
#endif #endif