From 8c940a30ae7ed41298c81012f9542ada1e26eb72 Mon Sep 17 00:00:00 2001
From: Magnus Hagander <magnus@hagander.net>
Date: Sun, 27 Dec 2009 16:01:39 +0000
Subject: [PATCH] If the MSVCRT module is not found in the current binary,
 proceed to update system and local environments anyway, instead of aborting.
 (This will happen in a MSVC build with no or very few external libraries
 linked in)

---
 src/port/win32env.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/port/win32env.c b/src/port/win32env.c
index 9a32387337e..ac6250a5ac6 100644
--- a/src/port/win32env.c
+++ b/src/port/win32env.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/port/win32env.c,v 1.3 2009/06/11 14:49:15 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/port/win32env.c,v 1.4 2009/12/27 16:01:39 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -40,15 +40,20 @@ pgwin32_putenv(const char *envval)
 	if (putenvFunc == NULL)
 	{
 		hmodule = GetModuleHandle("msvcrt");
-		if (hmodule == NULL)
-			return 1;
-		putenvFunc = (PUTENVPROC) GetProcAddress(hmodule, "_putenv");
-		if (putenvFunc == NULL)
-			return 1;
+		if (hmodule != NULL)
+		{
+			/*
+			 * If the module is found, attempt to find the function. If not, that just
+			 * means we're not linked with msvcrt, so fall through and make our other
+			 * modifications anyway.
+			 * Ignore any errors and update whatever we can, since callers don't
+			 * check the return value anyway.
+			 */
+			putenvFunc = (PUTENVPROC) GetProcAddress(hmodule, "_putenv");
+			if (putenvFunc != NULL)
+				putenvFunc(envval);
+		}
 	}
-	ret = putenvFunc(envval);
-	if (ret != 0)
-		return ret;
 #endif   /* _MSC_VER >= 1300 */
 
 
-- 
GitLab