<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/8293f306a86fc69cf1cad584c3389a9fafc15df2">https://github.com/macports/macports-ports/commit/8293f306a86fc69cf1cad584c3389a9fafc15df2</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 8293f306a86fc69cf1cad584c3389a9fafc15df2
</span>Author: David Gilman <davidgilman1@gmail.com>
AuthorDate: Sat Apr 19 20:39:54 2025 -0400
<span style='display:block; white-space:pre;color:#404040;'> postgresql16: fix strchrnul on 15.4
</span>---
databases/postgresql16/Portfile | 5 +-
databases/postgresql16/files/patch-strchrnul.diff | 234 ++++++++++++++++++++++
2 files changed, 238 insertions(+), 1 deletion(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/databases/postgresql16/Portfile b/databases/postgresql16/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 65ef7ff5d5a..bd813ee831e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/databases/postgresql16/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/databases/postgresql16/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -8,7 +8,7 @@ PortGroup legacysupport 1.1
</span>
name postgresql16
version 16.8
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 1
</span>
categories databases
maintainers {gmail.com:davidgilman1 @dgilman} \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -56,6 +56,9 @@ platform darwin powerpc {
</span> path:bin/perl:perl5
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://www.postgresql.org/message-id/flat/E1tziZ6-002AW9-2C%40gemulon.postgresql.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append patch-strchrnul.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> legacysupport.newest_darwin_requires_legacy \
15
worksrcdir postgresql-${version}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/databases/postgresql16/files/patch-strchrnul.diff b/databases/postgresql16/files/patch-strchrnul.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..151df203a25
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/databases/postgresql16/files/patch-strchrnul.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,234 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From a39eb9c77faaf51f8d02da718546e77e00a7622a Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Tom Lane <tgl@sss.pgh.pa.us>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 1 Apr 2025 16:49:51 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Fix detection and handling of strchrnul() for macOS 15.4.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+As of 15.4, macOS has strchrnul(), but access to it is blocked behind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+a check for MACOSX_DEPLOYMENT_TARGET >= 15.4. But our does-it-link
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure check finds it, so we try to use it, and fail with the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+present default deployment target (namely 15.0). This accounts for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+today's buildfarm failures on indri and sifaka.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This is the identical problem that we faced some years ago when Apple
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+introduced preadv and pwritev in the same way. We solved that in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+commit f014b1b9b by using AC_CHECK_DECLS instead of AC_CHECK_FUNCS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+to check the functions' availability. So do the same now for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+strchrnul(). Interestingly, we already had a workaround for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"the link check doesn't agree with <string.h>" cases with glibc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+which we no longer need since only the header declaration is being
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checked.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Testing this revealed that the meson version of this check has never
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+worked, because it failed to use "-Werror=unguarded-availability-new".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(Apparently nobody's tried to build with meson on macOS versions that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+lack preadv/pwritev as standard.) Adjust that while at it. Also,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+we had never put support for "-Werror=unguarded-availability-new"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+into v13, but we need that now.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Co-authored-by: Tom Lane <tgl@sss.pgh.pa.us>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Co-authored-by: Peter Eisentraut <peter@eisentraut.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Discussion: https://postgr.es/m/385134.1743523038@sss.pgh.pa.us
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Backpatch-through: 13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure | 14 +++++++++++++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.ac | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ meson.build | 21 ++++++++++++++++++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/include/pg_config.h.in | 7 ++++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/port/snprintf.c | 29 +++++++++++++----------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/tools/msvc/Solution.pm | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 6 files changed, 50 insertions(+), 25 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git configure configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8c8df505f7014..c8b217e0132bf 100755
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -15715,7 +15715,7 @@ fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LIBS_including_readline="$LIBS"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-for ac_func in backtrace_symbols copyfile getifaddrs getpeerucred inet_pton kqueue mbstowcs_l memset_s posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strchrnul strsignal syncfs sync_file_range uselocale wcstombs_l
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++for ac_func in backtrace_symbols copyfile getifaddrs getpeerucred inet_pton kqueue mbstowcs_l memset_s posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strsignal syncfs sync_file_range uselocale wcstombs_l
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ do :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -16279,6 +16279,18 @@ esac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ac_fn_c_check_decl "$LINENO" "strchrnul" "ac_cv_have_decl_strchrnul" "#include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if test "x$ac_cv_have_decl_strchrnul" = xyes; then :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ac_have_decl=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ac_have_decl=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++cat >>confdefs.h <<_ACEOF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define HAVE_DECL_STRCHRNUL $ac_have_decl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_ACEOF
</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 is probably only present on macOS, but may as well check always
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ac_fn_c_check_decl "$LINENO" "F_FULLFSYNC" "ac_cv_have_decl_F_FULLFSYNC" "#include <fcntl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git configure.ac configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e2d8ca9f1a0d8..e7cd4de01639d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1809,7 +1809,6 @@ AC_CHECK_FUNCS(m4_normalize([
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pthread_is_threaded_np
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ setproctitle
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ setproctitle_fast
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- strchrnul
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strsignal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ syncfs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sync_file_range
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1849,6 +1848,7 @@ AC_CHECK_DECLS([strlcat, strlcpy, strnlen])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # won't handle deployment target restrictions on macOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AC_CHECK_DECLS([preadv], [], [AC_LIBOBJ(preadv)], [#include <sys/uio.h>])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AC_CHECK_DECLS([pwritev], [], [AC_LIBOBJ(pwritev)], [#include <sys/uio.h>])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++AC_CHECK_DECLS([strchrnul], [], [], [#include <string.h>])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # This is probably only present on macOS, but may as well check always
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git meson.build meson.build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2a6e45b79a7ee..ce184c6dfb328 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- meson.build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ meson.build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2323,6 +2323,7 @@ decl_checks = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ decl_checks += [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['preadv', 'sys/uio.h'],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['pwritev', 'sys/uio.h'],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ['strchrnul', 'string.h'],
</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;'>+ foreach c : decl_checks
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2331,8 +2332,23 @@ foreach c : decl_checks
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ args = c.get(2, {})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ varname = 'HAVE_DECL_' + func.underscorify().to_upper()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- found = cc.has_header_symbol(header, func,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- args: test_c_args, include_directories: postgres_inc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ found = cc.compiles('''
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <@0@>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int main()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef @1@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (void) @1@;
</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;'>++return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++'''.format(header, func),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ name: 'test whether @0@ is declared'.format(func),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # need to add cflags_warn to get at least
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # -Werror=unguarded-availability-new if applicable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ args: test_c_args + cflags_warn,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ include_directories: postgres_inc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ kwargs: args)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cdata.set10(varname, found, description:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ '''Define to 1 if you have the declaration of `@0@', and to 0 if you
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2579,7 +2595,6 @@ func_checks = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['shm_unlink', {'dependencies': [rt_dep], 'define': false}],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['shmget', {'dependencies': [cygipc_dep], 'define': false}],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['socket', {'dependencies': [socket_dep], 'define': false}],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ['strchrnul'],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['strerror_r', {'dependencies': [thread_dep]}],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['strlcat'],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ['strlcpy'],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/include/pg_config.h.in src/include/pg_config.h.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ce3063b2b223d..a27cb325aa384 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/include/pg_config.h.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/include/pg_config.h.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -128,6 +128,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ don't. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef HAVE_DECL_PWRITEV
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Define to 1 if you have the declaration of `strchrnul', and to 0 if you
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ don't. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#undef HAVE_DECL_STRCHRNUL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Define to 1 if you have the declaration of `strlcat', and to 0 if you
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ don't. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef HAVE_DECL_STRLCAT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -409,9 +413,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Define to 1 if you have the <stdlib.h> header file. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef HAVE_STDLIB_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-/* Define to 1 if you have the `strchrnul' function. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#undef HAVE_STRCHRNUL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Define to 1 if you have the `strerror_r' function. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef HAVE_STRERROR_R
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/port/snprintf.c src/port/snprintf.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e3e316e04981e..bd5ec7dfad4e2 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/port/snprintf.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/port/snprintf.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -338,13 +338,22 @@ static void leading_pad(int zpad, int signvalue, int *padlen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void trailing_pad(int padlen, PrintfTarget *target);
</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;'>+- * If strchrnul exists (it's a glibc-ism), it's a good bit faster than the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * equivalent manual loop. If it doesn't exist, provide a replacement.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * If strchrnul exists (it's a glibc-ism, but since adopted by some other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * platforms), it's a good bit faster than the equivalent manual loop.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Use it if possible, and if it doesn't exist, use this replacement.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Note: glibc declares this as returning "char *", but that would require
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * casting away const internally, so we don't follow that detail.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Note: macOS has this too as of Sequoia 15.4, but it's hidden behind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * a deployment-target check that causes compile errors if the deployment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * target isn't high enough. So !HAVE_DECL_STRCHRNUL may mean "yes it's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * declared, but it doesn't compile". To avoid failing in that scenario,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * use a macro to avoid matching <string.h>'s name.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifndef HAVE_STRCHRNUL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !HAVE_DECL_STRCHRNUL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define strchrnul pg_strchrnul
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static inline const char *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strchrnul(const char *s, int c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -354,19 +363,7 @@ strchrnul(const char *s, int c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return s;
</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;'>+-#else
</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;'>+- * glibc's <string.h> declares strchrnul only if _GNU_SOURCE is defined.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * While we typically use that on glibc platforms, configure will set
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * HAVE_STRCHRNUL whether it's used or not. Fill in the missing declaration
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * so that this file will compile cleanly with or without _GNU_SOURCE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifndef _GNU_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-extern char *strchrnul(const char *s, int c);
</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;'>+-#endif /* HAVE_STRCHRNUL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* !HAVE_DECL_STRCHRNUL */
</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;'>+diff --git src/tools/msvc/Solution.pm src/tools/msvc/Solution.pm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 557feb00866cd..8f92b3c5c901c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/tools/msvc/Solution.pm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/tools/msvc/Solution.pm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -241,6 +241,7 @@ sub GenerateFiles
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_DECL_POSIX_FADVISE => 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_DECL_PREADV => 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_DECL_PWRITEV => 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ HAVE_DECL_STRCHRNUL => 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_DECL_STRLCAT => 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_DECL_STRLCPY => 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_DECL_STRNLEN => 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -332,7 +333,6 @@ sub GenerateFiles
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_SSL_CTX_SET_NUM_TICKETS => undef,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_STDINT_H => 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_STDLIB_H => 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- HAVE_STRCHRNUL => undef,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_STRERROR_R => undef,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_STRINGS_H => undef,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HAVE_STRING_H => 1,
</span></pre><pre style='margin:0'>
</pre>