Fix warnings about declaration of environ on MinGW.
authorThomas Munro <tmunro@postgresql.org>
Sat, 14 Dec 2024 11:36:30 +0000 (00:36 +1300)
committerThomas Munro <tmunro@postgresql.org>
Sat, 14 Dec 2024 11:41:27 +0000 (00:41 +1300)
POSIX says that the global variable environ shouldn't be declared in a
header, and that you have to declare it yourself.  MinGW declares it in
<stdlib.h> with some macrology that messes up our declarations.  Visual
Studio doesn't warn (there are clues that it may also declare it, but if
so, apparently compatibly).  Suppress our declarations, on MinGW only.

This clears the last warnings on CI's optional MinGW task, and hopefully
on build farm animal fairywren too.

Like 1319997d, no back-patch for now as it's not known to be breaking
anything, and my humble goal is just to keep the MinGW build clean going
forward.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> (earlier version)
Discussion: https://postgr.es/m/CA%2BhUKGJLMh%2B6W5E4M_jSFb43gnrA_-Q6-%2BBf3HkBXyGfRFcBsQ%40mail.gmail.com

src/backend/postmaster/postmaster.c
src/backend/utils/misc/ps_status.c
src/test/regress/regress.c

index f0f9c66487c91583fac78e2ca201879965b79768..6f37822c8875a3f0f27e84818650f3e964ebaaa9 100644 (file)
@@ -854,7 +854,9 @@ PostmasterMain(int argc, char *argv[])
    /* For debugging: display postmaster environment */
    if (message_level_is_interesting(DEBUG3))
    {
+#if !defined(WIN32) || defined(_MSC_VER)
        extern char **environ;
+#endif
        char      **p;
        StringInfoData si;
 
index 9da6377402024466030a2fa3eb2db4b1f489e3b0..27798dc51e1a3cde3630ee841532c2b00ade271a 100644 (file)
@@ -23,7 +23,9 @@
 #include "utils/guc.h"
 #include "utils/ps_status.h"
 
+#if !defined(WIN32) || defined(_MSC_VER)
 extern char **environ;
+#endif
 
 /* GUC variable */
 bool       update_process_title = DEFAULT_UPDATE_PROCESS_TITLE;
index 8309166f5b2360e0970df09cb183f294f99e9bd8..64460327f409bee3e30f05cc1987904c75b7679d 100644 (file)
@@ -647,7 +647,9 @@ PG_FUNCTION_INFO_V1(get_environ);
 Datum
 get_environ(PG_FUNCTION_ARGS)
 {
+#if !defined(WIN32) || defined(_MSC_VER)
    extern char **environ;
+#endif
    int         nvals = 0;
    ArrayType  *result;
    Datum      *env;