Eli Zaretskii wrote: > > > > > -# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ > > > > > +# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ || > > > > > defined __MINGW32__ > > > > > # include <io.h> /* declares setmode() */ > > > > > # else > > > > > # define setmode _setmode > > > > > > > > What is the rationale/benefit for this proposed change? > > > > > > MinGW provides 'setmode' whose declaration is in io.h. > > > > But mingw's declaration of 'fileno' in stdio.h is not always enabled > > (only if !defined _NO_OLDNAMES). > > _NO_OLDNAMES is undefined by default.
But it may be defined. > > Therefore the #else branch is needed on mingw. > > That's okay, but then io.h should be included anyway, because it > provides the prototype of _setmode as well. According to MSDN, the > same is true for MSVC. <io.h> is not needed here. When I add a use of setmode() to the unit test, with the existing code, I do not get a warning about _setmode() being undeclared - neither with mingw nor with MSVC. (Maybe this is because <fcntl.h> already includes <io.h>.) There is no need to change the code to #include a non-POSIX include file. Bruno
