If the MSVCRT module is not found in the current binary, proceed to update
authorMagnus Hagander <magnus@hagander.net>
Sun, 27 Dec 2009 16:01:39 +0000 (16:01 +0000)
committerMagnus Hagander <magnus@hagander.net>
Sun, 27 Dec 2009 16:01:39 +0000 (16:01 +0000)
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

index 9a32387337e4d6bc292927ad5b0740b06f293b06..ac6250a5ac6c38e797872c2dcbbb49a57b9882bb 100644 (file)
@@ -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 */