Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2012-05-30 18:37:53 +0400
committerCorinna Vinschen <corinna@vinschen.de>2012-05-30 18:37:53 +0400
commit0b592aeef28a5942322ea353096b85d0e8600459 (patch)
tree27dcca8f028bd993c8149efc0e7ff44db99cf573 /winsup/cygwin/hookapi.cc
parent52174bb4cc09ea59a998476ec4f7566409c6e4d0 (diff)
* hookapi.cc (find_first_notloaded_dll): Extend comment. Fix usage of
mapped memory. Shorten static library name buffer to MAX_PATH. Use strlcpy to copy library name to buffer. Only Unmap "map" if it has been Mapped before. * pinfo.cc (status_exit): Drop unneeded declaration of find_first_notloaded_dll in favor of the declaration in winsup.h.
Diffstat (limited to 'winsup/cygwin/hookapi.cc')
-rw-r--r--winsup/cygwin/hookapi.cc22
1 files changed, 14 insertions, 8 deletions
diff --git a/winsup/cygwin/hookapi.cc b/winsup/cygwin/hookapi.cc
index ba9d55112..8a9a2bfdd 100644
--- a/winsup/cygwin/hookapi.cc
+++ b/winsup/cygwin/hookapi.cc
@@ -165,7 +165,8 @@ makename (const char *name, char *&buf, int& i, int inc)
/* Find first missing dll in a given executable.
FIXME: This is not foolproof since it doesn't look for dlls in the
same directory as the given executable, like Windows. Instead it
- searches for dlls in the context of the current executable. */
+ searches for dlls in the context of the current executable.
+ It also only finds direct dependencies, not indirect ones. */
const char *
find_first_notloaded_dll (path_conv& pc)
{
@@ -226,32 +227,37 @@ find_first_notloaded_dll (path_conv& pc)
importRVA -= delta;
DWORD offset = 0;
- char *map = NULL;
+ HMODULE map = NULL;
if (importRVA + importRVAMaxSize > wincap.allocation_granularity ())
{
offset = rounddown (importRVA, wincap.allocation_granularity ());
DWORD size = importRVA - offset + importRVAMaxSize;
- map = (char *) MapViewOfFile (hc, FILE_MAP_READ, 0, offset, size);
+ map = (HMODULE) MapViewOfFile (hc, FILE_MAP_READ, 0,
+ offset, size);
if (!map)
goto out;
}
// Convert imports RVA to a usable pointer
PIMAGE_IMPORT_DESCRIPTOR pdfirst;
- pdfirst = rva (PIMAGE_IMPORT_DESCRIPTOR, hm, importRVA - offset);
+ pdfirst = rva (PIMAGE_IMPORT_DESCRIPTOR, map ?: hm,
+ importRVA - offset);
// Iterate through each import descriptor, and redirect if appropriate
for (PIMAGE_IMPORT_DESCRIPTOR pd = pdfirst; pd->FirstThunk; pd++)
{
- const char *lib = rva (PSTR, hm, pd->Name - delta - offset);
+ const char *lib = rva (PSTR, map ?: hm,
+ pd->Name - delta - offset);
if (!LoadLibraryEx (lib, NULL, DONT_RESOLVE_DLL_REFERENCES
| LOAD_LIBRARY_AS_DATAFILE))
{
- static char buf[NT_MAX_PATH];
- res = strcpy (buf, lib);
+ static char buf[MAX_PATH];
+ strlcpy (buf, lib, MAX_PATH);
+ res = buf;
}
}
- UnmapViewOfFile (map);
+ if (map)
+ UnmapViewOfFile (map);
}
}