last quibble for the day ... perusing the feature test macros related to XPG and XPG XSI in features.h, starting with the comment: _XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if Single Unix conformance is wanted, to 600 for the sixth revision, to 700 for the seventh revision. ok, fair enough, and if we read further, we see the explanation of the associated __USE macros: __USE_XOPEN2K Define XPG6 things. __USE_XOPEN2KXSI Define XPG6 XSI things. __USE_XOPEN2K8 Define XPG7 things. __USE_XOPEN2K8XSI Define XPG7 XSI things. which *suggests* that those represent distinct use definitions. but reading further: #ifdef _XOPEN_SOURCE # define __USE_XOPEN 1 # if (_XOPEN_SOURCE - 0) >= 500 # define __USE_XOPEN_EXTENDED 1 # define __USE_UNIX98 1 # undef _LARGEFILE_SOURCE # define _LARGEFILE_SOURCE 1 # if (_XOPEN_SOURCE - 0) >= 600 # if (_XOPEN_SOURCE - 0) >= 700 # define __USE_XOPEN2K8 1 # define __USE_XOPEN2K8XSI 1 # endif # define __USE_XOPEN2K 1 # define __USE_XOPEN2KXSI 1 it seems clear that, based on the value of _XOPEN_SOURCE, you get either both of the related __USE macros, or neither of them. as in, based on _XOPEN_SOURCE, you'll get both of these defined: # define __USE_XOPEN2K 1 # define __USE_XOPEN2KXSI 1 in other words, using only official feature test macros, you can't, for example, select XPG6 *without* selecting XPG6 XSI. is that about right? i ask only because if you check the man page for posix_openpt(), you see the FTM requirement: posix_openpt(): _XOPEN_SOURCE >= 600 which covers all of XPG6, but if you look in <stdlib.h>, you see the more specific XSI-related conditional: #ifdef __USE_XOPEN2KXSI /* Return a master pseudo-terminal handle. */ extern int posix_openpt (int __oflag) __wur; #endif it just seems like there's a bit of fuzziness between what the developer can specify, and the test being made in the header file. does that make sense? it also makes tests like this in <strings.h> a bit confusing at first glance: #if defined __USE_MISC || !defined __USE_XOPEN2K8 || defined __USE_XOPEN2K8XSI those last two tests seem weird since, if i understand the earlier stuff correctly, you either get both of those, or neither, so it seems strange to test whether the first macro is undefined or the *second* is defined. again, am i making any sense? thoughts? rday -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html