* cygcheck.cc (load_cygwin): Free the cygwin dll after we're done with it.

This commit is contained in:
Christopher Faylor 2008-07-27 14:53:42 +00:00
parent 904413e731
commit 34aa62035b
2 changed files with 32 additions and 26 deletions

View 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> 2008-07-25 Christopher Faylor <me+cygwin@cgf.cx>
* mount.cc: Remove non-unix-like options (-x,-t,b) throughout. * mount.cc: Remove non-unix-like options (-x,-t,b) throughout.

View File

@ -1,7 +1,7 @@
/* cygcheck.cc /* cygcheck.cc
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 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. This file is part of Cygwin.
@ -2020,35 +2020,36 @@ load_cygwin (int& argc, char **&argv)
if (!(h = LoadLibrary ("cygwin1.dll"))) if (!(h = LoadLibrary ("cygwin1.dll")))
return; return;
if (!(cygwin_internal = (DWORD (*) (int, ...)) GetProcAddress (h, "cygwin_internal"))) if ((cygwin_internal = (DWORD (*) (int, ...)) GetProcAddress (h, "cygwin_internal")))
return;
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 char **av = (char **) cygwin_internal (CW_ARGV);
by the POSIXy Cygwin variation, which breaks cygcheck. if (av && ((DWORD) av != (DWORD) -1))
Another approach would be to use the Cygwin PATH and convert it to for (argc = 0, argv = av; *av; av++)
Win32 again. */ argc++;
char *path = NULL;
char **env; char **envp = (char **) cygwin_internal (CW_ENVP);
while (*(env = _environ)) if (envp && ((DWORD) envp != (DWORD) -1))
{ {
if (strncmp (*env, "PATH=", 5) == 0) /* Store path and revert to this value, otherwise path gets overwritten
path = strdup (*env); by the POSIXy Cygwin variation, which breaks cygcheck.
nuke (*env); 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 int