OSDN Git Service

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 9a32387..ac6250a 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 */