The open_datasync code opens the output file as a test to make sure the flags are accepted by the OS, and if it succeeds it then immediately opens the file again with the same flags, overwriting and so leaking the descriptor from the previous open.
On Windows MinGW, this prevents the final unlink from working, as the file is still open.
Trivial fix attached.
Thanks,
Jeff