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>
pull/12576/head
stijn 2023-10-03 13:12:42 +02:00 zatwierdzone przez Damien George
rodzic 92717a95c0
commit cac666f38c
1 zmienionych plików z 7 dodań i 4 usunięć

Wyświetl plik

@ -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