<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/e7ff5e479c43e5aa3b8b9e97bf049706d0b23837">https://github.com/macports/macports-legacy-support/commit/e7ff5e479c43e5aa3b8b9e97bf049706d0b23837</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit e7ff5e479c43e5aa3b8b9e97bf049706d0b23837
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Tue Jul 9 20:53:18 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    Implement __DARWIN_C_LEVEL test cases.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    See: https://trac.macports.org/ticket/69688
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    Without the fixes, all tests get expected errors with the given SDK
</span><span style='display:block; white-space:pre;color:#404040;'>    selection.  With the fixes, all tests pass in all cases.
</span>---
 Makefile                              |  15 +-
 include/_macports_extras/sdkversion.h |   1 +
 manual_tests/darwin_c.c               | 263 ++++++++++++++++++++++++++++++++++
 manual_tests/darwin_c_199309.c        |   8 ++
 manual_tests/darwin_c_200809.c        |   8 ++
 manual_tests/darwin_c_full.c          |   9 ++
 test/test_darwin_c.c                  |  56 --------
 7 files changed, 303 insertions(+), 57 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/Makefile b/Makefile
</span><span style='display:block; white-space:pre;color:#808080;'>index e828f4a..4be0cd6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/Makefile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/Makefile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -125,6 +125,9 @@ MANTESTOBJS_C   := $(patsubst %.c,%.o,$(MANTESTSRCS_C))
</span> MANTESTPRGS_C   := $(patsubst %.c,%,$(MANTESTSRCS_C))
 MANTESTRUNS     := $(patsubst \
                      $(MANTESTPREFIX)%,$(MANRUNPREFIX)%,$(MANTESTPRGS_C))
<span style='display:block; white-space:pre;background:#e0ffe0;'>+DARWINSRCS_C    := $(wildcard $(MANTESTPREFIX)darwin_c*.c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+DARWINRUNS      := $(patsubst \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     $(MANTESTPREFIX)%.c,$(MANRUNPREFIX)%,$(DARWINSRCS_C))
</span> 
 TIGERBINDIR      = tiger_only/bin
 TIGERBINS       := $(wildcard $(TIGERBINDIR)/*)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -289,8 +292,10 @@ $(TESTPRGS_C): %: %.o $(BUILDDLIBPATH)
</span> $(TESTPRGS_CPP): %: %.o $(BUILDDLIBPATH)
        $(CXX) $(TESTLDFLAGS) $< $(TESTLIBS) -o $@
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# The "darwin_c" tests need the -fno-builtin option with some compilers.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# It shouldn't hurt the other manual tests.
</span> $(MANTESTOBJS_C): %.o: %.c $(ALLHEADERS)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        $(CC) -c -std=c99 -I$(SRCINCDIR) $(CFLAGS) $< -o $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) -c -std=c99 -fno-builtin -I$(SRCINCDIR) $(CFLAGS) $< -o $@
</span> 
 # Currently, the manual tests don't require the library
 $(MANTESTPRGS_C): %: %.o $(BUILDLIBDIR)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -346,6 +351,14 @@ $(TESTNAMEPREFIX)strncpy_chk_forced.o: $(TESTNAMEPREFIX)strncpy_chk.c
</span> $(TESTNAMEPREFIX)strncpy_chk_force0.o: $(TESTNAMEPREFIX)strncpy_chk.c
 $(TESTNAMEPREFIX)strncpy_chk_force1.o: $(TESTNAMEPREFIX)strncpy_chk.c
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# The "darwin_c" tests include the basic "darwin_c" source
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(MANTESTPREFIX)darwin_c_199309.o: $(MANTESTPREFIX)darwin_c.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(MANTESTPREFIX)darwin_c_200809.o: $(MANTESTPREFIX)darwin_c.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(MANTESTPREFIX)darwin_c_full.o: $(MANTESTPREFIX)darwin_c.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Provide a target for all "darwin_c" tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(MANRUNPREFIX)darwin_c_all: $(DARWINRUNS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> $(MANTESTRUNS): $(MANRUNPREFIX)%: $(MANTESTPREFIX)%
        $< $(TEST_ARGS)
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/_macports_extras/sdkversion.h b/include/_macports_extras/sdkversion.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 5bf0ca6..d1e7de8 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/_macports_extras/sdkversion.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/_macports_extras/sdkversion.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -124,6 +124,7 @@
</span> 
 #include <AvailabilityMacros.h>
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Now restore _DARWIN_C_SOURCE to the way it was. */
</span> #ifdef __MPLS_DARWIN_C_UNDEF
 #undef _DARWIN_C_SOURCE
 #undef __MPLS_DARWIN_C_UNDEF
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/manual_tests/darwin_c.c b/manual_tests/darwin_c.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..bcc04ef
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/manual_tests/darwin_c.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,263 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2024 Frederick H. G. Wright II <fw@fwright.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This provides tests for the proper effects of __DARWIN_C_LEVEL.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Except for the initial macro definition tests, these involve providing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * definitions which would conflict with the standard headers if the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * normal declarations/definitions weren't suppressed by __DARWIN_C_LEVEL.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Since only one value of __DARWIN_C_LEVEL can be effective in a given build,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * this entire test is wrapped multiple times with different values.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Since there's no easy way to defer such conflicts until runtime, all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * failures (including the few that could be deferred) manifest themselves
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * as build failures.  The runtime test is just a dummy (almost).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Make sure we have the SDK version for reporting. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <_macports_extras/sdkversion.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* First verify that the basic macros are defined. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/cdefs.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_ANSI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error __DARWIN_C_ANSI is not defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error __DARWIN_C_FULL is not defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_LEVEL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error __DARWIN_C_LEVEL is not defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Now test various conflict cases. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* dirent.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <dirent.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fdopendir = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* stdio.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int dprintf = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int getdelim = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int getline = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int open_memstream = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fmemopen = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* string.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int stpncpy = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int strnlen = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int strndup = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int memmem = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < __DARWIN_C_FULL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* strings.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <strings.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int ffsl = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int ffsll = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fls = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int flsl = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int flsll = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < __DARWIN_C_FULL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* sys/fcntl.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/fcntl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef AT_FDCWD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error AT_FDCWD is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef AT_FDCWD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error AT_FDCWD is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef AT_EACCESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error AT_EACCESS is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef AT_SYMLINK_NOFOLLOW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error AT_SYMLINK_NOFOLLOW is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef AT_SYMLINK_FOLLOW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error AT_SYMLINK_FOLLOW is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef AT_REMOVEDIR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error AT_REMOVEDIR is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int openat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* sys/stat.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef UTIME_NOW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error UTIME_NOW is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef UTIME_OMIT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error UTIME_OMIT is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int futimens = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fstatat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fstatat64 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int mkdirat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* sys/stdio.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int renameat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Apple inappropriately placed getattrlistat() in the 200809 category
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * in the 10.10-10.12 SDKs, though it's actually a Darwin extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * We test it in the correct category where possible, but in the incorrect
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * category with 10.10-10.12 SDKs to avoid an Apple-induced failure.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define GETATTRLISTAT_APPLE_ERR (__MPLS_SDK_MAJOR >= 101000 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 && __MPLS_SDK_MAJOR < 101300)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if GETATTRLISTAT_APPLE_ERR  /* Dummy ref to suppress warning */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* sys/unistd.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int readlinkat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int faccessat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fchownat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int linkat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int symlinkat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int unlinkat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if GETATTRLISTAT_APPLE_ERR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int getattrlistat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !GETATTRLISTAT_APPLE_ERR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int getattrlistat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int setattrlistat = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < __DARWIN_C_FULL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* time.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 199309L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_REALTIME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_REALTIME is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_MONOTONIC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_MONOTONIC is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_MONOTONIC_RAW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_MONOTONIC_RAW is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_MONOTONIC_RAW_APPROX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_MONOTONIC_RAW_APPROX is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_UPTIME_RAW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_UPTIME_RAW is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_UPTIME_RAW_APPROX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_UPTIME_RAW_APPROX is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_PROCESS_CPUTIME_ID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_PROCESS_CPUTIME_ID is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef CLOCK_THREAD_CPUTIME_ID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error CLOCK_THREAD_CPUTIME_ID is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef void *clockid_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int clock_gettime = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int clock_getres = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 199309L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if !((__DARWIN_C_LEVEL >= __DARWIN_C_FULL) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          (defined(__cplusplus) && __cplusplus >= 201703L))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef TIME_UTC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error TIME_UTC is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int timespec_get = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* !__DARWIN_C_LEVEL ... */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* unistd.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef _SC_NPROCESSORS_CONF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error _SC_NPROCESSORS_CONF is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef _SC_NPROCESSORS_ONLN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error _SC_NPROCESSORS_ONLN is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef _SC_PHYS_PAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error _SC_PHYS_PAGES is unexpectedly defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int fsetattrlist = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < __DARWIN_C_FULL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* wchar.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <wchar.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcsdup = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcsnlen = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcpcpy = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcpncpy = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcscasecmp = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcsncasecmp = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* xlocale/_wchar.h via wchar.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __DARWIN_C_LEVEL < 200809L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcscasecmp_l = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int wcsncasecmp_l = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL < 200809L */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Quasi-dummy runtime test, just reports values */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Get status of representative 11.x+ version macro. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Not reentrant or thread-safe. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static const char *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+get_vermac(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  static char buf[128]; (void) buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  if (__MPLS_SDK_MAJOR < 110000) return "";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef MAC_OS_VERSION_11_0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return ", MAC_OS_VERSION_11_0 is undefined";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  sprintf(buf, ", MAC_OS_VERSION_11_0 = %d", MAC_OS_VERSION_11_0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+main(int argc, char *argv[])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  (void) argc; (void) argv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf("__DARWIN_C_LEVEL = %ld, __MPLS_SDK_MAJOR = %d%s\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         __DARWIN_C_LEVEL, __MPLS_SDK_MAJOR, get_vermac());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/manual_tests/darwin_c_199309.c b/manual_tests/darwin_c_199309.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..7954a23
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/manual_tests/darwin_c_199309.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Version of test_darwin_c with __DARWIN_C_LEVEL set to 199309L-1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Set __DARWIN_C_LEVEL indirectly (can't be set directly) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _POSIX_C_SOURCE (199309L-1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "darwin_c.c"
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/manual_tests/darwin_c_200809.c b/manual_tests/darwin_c_200809.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..efebc84
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/manual_tests/darwin_c_200809.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Version of test_darwin_c with __DARWIN_C_LEVEL set to 200809L-1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Set __DARWIN_C_LEVEL indirectly (can't be set directly) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _POSIX_C_SOURCE (200809L-1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "darwin_c.c"
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/manual_tests/darwin_c_full.c b/manual_tests/darwin_c_full.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..a2c5db7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/manual_tests/darwin_c_full.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Version of test_darwin_c with __DARWIN_C_LEVEL set to __DARWIN_C_FULL-1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Set __DARWIN_C_LEVEL indirectly (can't be set directly) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Use assumed __DARWIN_C_FULL value */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _POSIX_C_SOURCE (900000L-1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "darwin_c.c"
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_darwin_c.c b/test/test_darwin_c.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index ac16e90..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_darwin_c.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,56 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2024 Frederick H. G. Wright II <fw@fwright.net>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * This provides tests for the proper effects of __DARWIN_C_LEVEL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Except for the initial macro definition tests, these involve providing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * definitions which would conflict with the standard headers if the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * normal declarations/definitions weren't suppressed by __DARWIN_C_LEVEL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Since only one value of __DARWIN_C_LEVEL can be effective in a given build,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * this entire test is wrapped multiple times with different values.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Since there's no easy way to defer such conflicts until runtime, all
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * failures (including the few that could be deferred) manifest themselves
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * as build failures.  The runtime test is just a dummy (almost).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* First verify that the basic macros are defined. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/cdefs.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef __DARWIN_C_ANSI
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#error __DARWIN_C_ANSI is not defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#error __DARWIN_C_FULL is not defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#ifndef __DARWIN_C_LEVEL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#error __DARWIN_C_LEVEL is not defined
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* Dummy runtime test, just reports value */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main(int argc, char *argv[])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  (void) argc; (void) argv;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  printf("__DARWIN_C_LEVEL = %d\n", (int) __DARWIN_C_LEVEL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  return 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span></pre><pre style='margin:0'>

</pre>