Module Name: src
Committed By: riastradh
Date: Mon Sep 9 15:05:39 UTC 2024
Modified Files:
src/sys/sys: featuretest.h
Log Message:
sys/featuretest.h: Define _POSIX_C_SOURCE according to _XOPEN_SOURCE.
If _XOPEN_SOURCE is defined but _POSIX_C_SOURCE is not, there is a
corresponding value of _POSIX_C_SOURCE that _XOPEN_SOURCE is supposed
to be equivalent to. We could sprinkle conditionals for
_XOPEN_SOURCE everywhere we already have conditionals for
_POSIX_C_SOURCE, like in <locale.h>, but it's simpler and more
reliable to simply define _POSIX_C_SOURCE based on _XOPEN_SOURCE in
one place.
PR standards/55577: locale_t not defined if _XOPEN_SOURCE is defined
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/sys/featuretest.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/sys/featuretest.h
diff -u src/sys/sys/featuretest.h:1.12 src/sys/sys/featuretest.h:1.13
--- src/sys/sys/featuretest.h:1.12 Thu Aug 15 20:42:59 2024
+++ src/sys/sys/featuretest.h Mon Sep 9 15:05:39 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: featuretest.h,v 1.12 2024/08/15 20:42:59 riastradh Exp $ */
+/* $NetBSD: featuretest.h,v 1.13 2024/09/09 15:05:39 riastradh Exp $ */
/*
* Written by Klaus Klein <[email protected]>, February 2, 1998.
@@ -92,3 +92,61 @@
!defined(_REENTRANT)
#define _REENTRANT
#endif
+
+/*
+ * The _XOPEN_SOURCE namespaces are supersets of corresponding
+ * _POSIX_C_SOURCE namespaces, so to keep the namespace tests in header
+ * files simpler, if _XOPEN_SOURCE is defined but _POSIX_C_SOURCE is
+ * not, define _POSIX_C_SOURCE to the corresponding value.
+ */
+#if defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE)
+
+/*
+ * `[I]f _XOPEN_SOURCE is set equal to 800 and _POSIX_C_SOURCE is set
+ * equal to 202405L, the behavior is the same as if only _XOPEN_SOURCE
+ * is defined and set equal to 800.
+ *
+ * IEEE Std 1003.1-2024, 2.2.1.2 `The _XOPEN_SOURCE Feature Test Macro'
+ * https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/functions/V2_chap02.html#tag_16_02_01_02
+ */
+#if (_XOPEN_SOURCE - 0) == 800
+#define _POSIX_C_SOURCE 202405L
+
+/*
+ * `[I]f _XOPEN_SOURCE is set equal to 700 and _POSIX_C_SOURCE is set
+ * equal to 200809L, the behavior is the same as if only _XOPEN_SOURCE
+ * is defined and set equal to 700.'
+ *
+ * IEEE Std 1003.1-2008, 2.2.1 `POSIX.1 Symbols', subsection `The
+ * _XOPEN_SOURCE Feature Test Macro'
+ * https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/functions/V2_chap02.html
+ */
+#elif (_XOPEN_SOURCE - 0) == 700
+#define _POSIX_C_SOURCE 200809L
+
+/*
+ * `[I]f _XOPEN_SOURCE is set equal to 600 and _POSIX_C_SOURCE is set
+ * equal to 200112L, the behavior is the same as if only _XOPEN_SOURCE
+ * is defined and set equal to 600.'
+ *
+ * IEEE Std 1003.1-2001, 2.2.1 `POSIX.1 Symbols', subsection `The
+ * _XOPEN_SOURCE Feature Test Macro'
+ * https://pubs.opengroup.org/onlinepubs/007904875/functions/xsh_chap02_02.html
+ */
+#elif (_XOPEN_SOURCE - 0) == 600
+#define _POSIX_C_SOURCE 200112L
+
+/*
+ * `[I]f _XOPEN_SOURCE is set equal to 500 and _POSIX_SOURCE is
+ * defined, or _POSIX_C_SOURCE is set greater than zero and less than
+ * or equal to 199506L, the behaviour is the same as if only
+ * _XOPEN_SOURCE is defined and set equal to 500.'
+ *
+ * Single UNIX Specification, Version 2, `The Compilation Environment'
+ * https://pubs.opengroup.org/onlinepubs/007908799/xsh/compilation.html
+ */
+#elif (_XOPEN_SOURCE - 0) == 500
+#define _POSIX_C_SOURCE 199506L
+#endif
+
+#endif