Make pgwin32_putenv() probe every known CRT, regardless of compiler.
authorNoah Misch <noah@leadboat.com>
Sun, 4 Dec 2016 05:16:54 +0000 (00:16 -0500)
committerNoah Misch <noah@leadboat.com>
Sun, 4 Dec 2016 05:16:54 +0000 (00:16 -0500)
This extends to MinGW builds the provision for MSVC-built libraries to
see putenv() effects.  Doing so repairs, for example, the handling of
the krb_server_keyfile parameter when linked with MSVC-built MIT
Kerberos.  Like the previous commit, no back-patch.

src/port/win32env.c

index a491497152cac5244d4421989e34796a29d21d94..214e5bee1eec2347d9e1cbd03986af450eab4e29 100644 (file)
@@ -21,7 +21,6 @@ pgwin32_putenv(const char *envval)
 {
        char       *envcpy;
        char       *cp;
-#ifdef _MSC_VER
        typedef int (_cdecl * PUTENVPROC) (const char *);
        static const char *const modulenames[] = {
                "msvcrt",                               /* Visual Studio 6.0 / MinGW */
@@ -45,7 +44,6 @@ pgwin32_putenv(const char *envval)
                NULL
        };
        int                     i;
-#endif   /* _MSC_VER */
 
        /*
         * Update process environment, making this change visible to child
@@ -88,7 +86,6 @@ pgwin32_putenv(const char *envval)
         * against.  Addresses within these modules may become invalid the moment
         * we call FreeLibrary(), so don't cache them.
         */
-#ifdef _MSC_VER
        for (i = 0; modulenames[i]; i++)
        {
                HMODULE         hmodule = NULL;
@@ -104,9 +101,12 @@ pgwin32_putenv(const char *envval)
                        FreeLibrary(hmodule);
                }
        }
-#endif   /* _MSC_VER */
 
-       /* Finally, update our "own" cache */
+       /*
+        * Finally, update our "own" cache.  This is redundant with the loop
+        * above, except when PostgreSQL itself links to a CRT not listed above.
+        * Ideally, the loop does visit all possible CRTs, making this redundant.
+        */
        return _putenv(envval);
 }