From cac666f38cbce488a12c4fdcd28c2bb9d084368e Mon Sep 17 00:00:00 2001 From: stijn Date: Tue, 3 Oct 2023 13:12:42 +0200 Subject: [PATCH] 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 --- extmod/vfs_posix_file.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/extmod/vfs_posix_file.c b/extmod/vfs_posix_file.c index 488593230c..81a608d2b6 100644 --- a/extmod/vfs_posix_file.c +++ b/extmod/vfs_posix_file.c @@ -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