On Tue, Nov 15, 2016 at 08:44:17PM +0800, Fam Zheng wrote: > On Tue, 11/15 10:18, Stefan Hajnoczi wrote: > > Fam, Markus: Unfortunately neither the clean-includes script nor its > > patch series cover letter explains *why* osdep.h should be included > > before system headers. > > I don't know Peter's exact intention either, but AFAICT it is about the few > quirks in osdep.h: > > > /* Older versions of C++ don't get definitions of various macros from > * stdlib.h unless we define these macros before first inclusion of > * that system header. > */ > #ifndef __STDC_CONSTANT_MACROS > #define __STDC_CONSTANT_MACROS > #endif > #ifndef __STDC_LIMIT_MACROS > #define __STDC_LIMIT_MACROS > #endif > #ifndef __STDC_FORMAT_MACROS > #define __STDC_FORMAT_MACROS > #endif > > /* The following block of code temporarily renames the daemon() function so the > * compiler does not see the warning associated with it in stdlib.h on OSX > */ > #ifdef __APPLE__ > #define daemon qemu_fake_daemon_function > #include > #undef daemon > extern int daemon(int, int); > #endif > > <...> > > > /* Mac OSX has a bug that incorrectly defines SIZE_MAX with > * the wrong type. Our replacement isn't usable in preprocessor > * expressions, but it is sufficient for our needs. */ > #if defined(HAVE_BROKEN_SIZE_MAX) && HAVE_BROKEN_SIZE_MAX > #undef SIZE_MAX > #define SIZE_MAX ((size_t)-1) > #endif This is exactly the kind of stuff we should not be doing to the libqnio header file! Those redefinitions are useful for QEMU code. They should not be done to third-party system headers though. Stefan