diff options
author | Christopher Faylor <me@cgf.cx> | 2008-07-27 14:53:42 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2008-07-27 14:53:42 +0000 |
commit | 34aa62035b0630a6d6fae9f577f10d5d191c5bb6 (patch) | |
tree | 3f37df6969d2c082d34712db32349b78bb916f5c /winsup/utils/cygcheck.cc | |
parent | 904413e731347d5fd0e8356c3f79744eb3d977a4 (diff) | |
download | newlib-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.cc | 53 |
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 |