aboutsummaryrefslogtreecommitdiff
path: root/winsup/utils/cygcheck.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2008-07-27 14:53:42 +0000
committerChristopher Faylor <me@cgf.cx>2008-07-27 14:53:42 +0000
commit34aa62035b0630a6d6fae9f577f10d5d191c5bb6 (patch)
tree3f37df6969d2c082d34712db32349b78bb916f5c /winsup/utils/cygcheck.cc
parent904413e731347d5fd0e8356c3f79744eb3d977a4 (diff)
downloadnewlib-34aa62035b0630a6d6fae9f577f10d5d191c5bb6.zip
newlib-34aa62035b0630a6d6fae9f577f10d5d191c5bb6.tar.gz
newlib-34aa62035b0630a6d6fae9f577f10d5d191c5bb6.tar.bz2
* cygcheck.cc (load_cygwin): Free the cygwin dll after we're done with it.
Diffstat (limited to 'winsup/utils/cygcheck.cc')
-rw-r--r--winsup/utils/cygcheck.cc53
1 files changed, 27 insertions, 26 deletions
diff --git a/winsup/utils/cygcheck.cc b/winsup/utils/cygcheck.cc
index 84ee45f..f04fcf2 100644
--- a/winsup/utils/cygcheck.cc
+++ b/winsup/utils/cygcheck.cc
@@ -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