OSDN Git Service

* cygcheck.cc (load_cygwin): Free the cygwin dll after we're done with it.
authorcgf <cgf>
Sun, 27 Jul 2008 14:53:42 +0000 (14:53 +0000)
committercgf <cgf>
Sun, 27 Jul 2008 14:53:42 +0000 (14:53 +0000)
winsup/utils/ChangeLog
winsup/utils/cygcheck.cc

index ae61a41..2581bfe 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-27  Christopher Faylor  <me+cygwin@cgf.cx>
+
+       * cygcheck.cc (load_cygwin): Free the cygwin dll after we're done with
+       it.
+
 2008-07-25  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * mount.cc: Remove non-unix-like options (-x,-t,b) throughout.
index 84ee45f..f04fcf2 100644 (file)
@@ -1,7 +1,7 @@
 /* cygcheck.cc
 
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007 Red Hat, Inc.
+   2006, 2007, 2008 Red Hat, Inc.
 
    This file is part of Cygwin.
 
@@ -2020,35 +2020,36 @@ load_cygwin (int& argc, char **&argv)
 
   if (!(h = LoadLibrary ("cygwin1.dll")))
     return;
-  if (!(cygwin_internal = (DWORD (*) (int, ...)) GetProcAddress (h, "cygwin_internal")))
-    return;
+  if ((cygwin_internal = (DWORD (*) (int, ...)) GetProcAddress (h, "cygwin_internal")))
+    {
+      char **av = (char **) cygwin_internal (CW_ARGV);
+      if (av && ((DWORD) av != (DWORD) -1))
+       for (argc = 0, argv = av; *av; av++)
+         argc++;
 
-  char **av = (char **) cygwin_internal (CW_ARGV);
-  if (av && ((DWORD) av != (DWORD) -1))
-    for (argc = 0, argv = av; *av; av++)
-      argc++;
-
-  char **envp = (char **) cygwin_internal (CW_ENVP);
-  if (envp && ((DWORD) envp != (DWORD) -1))
-    {
-      /* Store path and revert to this value, otherwise path gets overwritten
-        by the POSIXy Cygwin variation, which breaks cygcheck.
-        Another approach would be to use the Cygwin PATH and convert it to
-        Win32 again. */
-      char *path = NULL;
-      char **env;
-      while (*(env = _environ))
+      char **envp = (char **) cygwin_internal (CW_ENVP);
+      if (envp && ((DWORD) envp != (DWORD) -1))
        {
-         if (strncmp (*env, "PATH=", 5) == 0)
-           path = strdup (*env);
-         nuke (*env);
+         /* Store path and revert to this value, otherwise path gets overwritten
+            by the POSIXy Cygwin variation, which breaks cygcheck.
+            Another approach would be to use the Cygwin PATH and convert it to
+            Win32 again. */
+         char *path = NULL;
+         char **env;
+         while (*(env = _environ))
+           {
+             if (strncmp (*env, "PATH=", 5) == 0)
+               path = strdup (*env);
+             nuke (*env);
+           }
+         for (char **ev = envp; *ev; ev++)
+           if (strncmp (*ev, "PATH=", 5) != 0)
+            putenv (*ev);
+         if (path)
+           putenv (path);
        }
-      for (char **ev = envp; *ev; ev++)
-       if (strncmp (*ev, "PATH=", 5) != 0)
-        putenv (*ev);
-      if (path)
-       putenv (path);
     }
+  FreeLibrary (h);
 }
 
 int