From 34aa62035b0630a6d6fae9f577f10d5d191c5bb6 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 27 Jul 2008 14:53:42 +0000 Subject: * cygcheck.cc (load_cygwin): Free the cygwin dll after we're done with it. --- winsup/utils/cygcheck.cc | 53 ++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'winsup/utils/cygcheck.cc') diff --git a/winsup/utils/cygcheck.cc b/winsup/utils/cygcheck.cc index 84ee45f9a..f04fcf229 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 -- cgit v1.2.3