Evil header file io_util.h effectively requires its callers to include fcntl.h first (on platforms where fcntl.h defines O_SYNC and D_SYNC) and that is a BIG NONO. I would try hard to fix io_util.h now (instead of adding workarounds to callers) and further, if any of its callers were including fcntl.h merely for io_util.h's benefit, remove those include statements. IWYU!
Admittedly, google has far more IWYU religion than most. https://code.google.com/p/include-what-you-use/ On Wed, May 27, 2015 at 7:24 AM, Roger Riggs <[email protected]> wrote: > Hi Martin, > > Untangling the past a bit. Perhaps this code could be cleaner but > priority-wise, > I've got some other things to do first. > > The Windows fcntl.h does not define O_SYNC/O_DSYNC so its relative include > order is not significant. > The explicit define of O_SYNC and O_DSYNC make the API to the Unix and > Windows > file support APIs consistent. > > On Windows file access is done using CreateFileW to get the native Windows > semantics. > The O_SYNC/DSYNC flags are mapped to the corresponding flags/attributes to > CreateFileW. > > Roger > > > > On 5/27/2015 2:59 AM, Martin Buchholz wrote: > > > > On Tue, May 26, 2015 at 7:52 PM, Roger Riggs <[email protected]> > wrote: > >> Hi, >> >> Sadly, but not entirely unexpectedly there is an anomaly in the include >> files: >> It seems that Windows does not define O_SYNC and O_DSYNC. >> To make up for the absence >> jdk/src/java.base/share/native/libjava/io_util.h >> conditionally defines them. There is no problem if the system include >> files appear >> first, but in the other order, fcntl.h tries to re-define it. >> In the recommended order, there is no issue. >> > > We should work hard to remove order dependencies in include files. > > I see that io_util.h includes <fcntl.h>, but only on BSD. Why not > include it wherever it is available, (which may be all supported > platforms!) before trying to define O_SYNC and D_SYNC? > > >
