Skip to content

Commit

Permalink
extmod/vfs_posix_file: Fix flush handling in msvc builds.
Browse files Browse the repository at this point in the history
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 1c04774 for macOS).

Signed-off-by: stijn <stijn@ignitron.net>
  • Loading branch information
stinos authored and dpgeorge committed Oct 4, 2023
1 parent 92717a9 commit cac666f
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions extmod/vfs_posix_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit cac666f

Please sign in to comment.