* dll_init.cc: Throughout convert to use long pathnames.
* dll_init.h (struct dll): Change name to WCHAR, change operator [] to take PWCHAR argument.
This commit is contained in:
parent
e587bc0e7d
commit
69d704beff
@ -1,3 +1,9 @@
|
|||||||
|
2008-08-13 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* dll_init.cc: Throughout convert to use long pathnames.
|
||||||
|
* dll_init.h (struct dll): Change name to WCHAR, change operator [] to
|
||||||
|
take PWCHAR argument.
|
||||||
|
|
||||||
2008-08-11 Corinna Vinschen <corinna@vinschen.de>
|
2008-08-11 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* syscalls.cc (rename): If newpath doesn't exist, check if .exe suffix
|
* syscalls.cc (rename): If newpath doesn't exist, check if .exe suffix
|
||||||
|
@ -18,6 +18,7 @@ details. */
|
|||||||
#include "cygheap.h"
|
#include "cygheap.h"
|
||||||
#include "pinfo.h"
|
#include "pinfo.h"
|
||||||
#include "cygtls.h"
|
#include "cygtls.h"
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
extern void __stdcall check_sanity_and_sync (per_process *);
|
extern void __stdcall check_sanity_and_sync (per_process *);
|
||||||
|
|
||||||
@ -89,11 +90,11 @@ dll::init ()
|
|||||||
|
|
||||||
/* Look for a dll based on name */
|
/* Look for a dll based on name */
|
||||||
dll *
|
dll *
|
||||||
dll_list::operator[] (const char *name)
|
dll_list::operator[] (const PWCHAR name)
|
||||||
{
|
{
|
||||||
dll *d = &start;
|
dll *d = &start;
|
||||||
while ((d = d->next) != NULL)
|
while ((d = d->next) != NULL)
|
||||||
if (strcasematch (name, d->name))
|
if (!wcscasecmp (name, d->name))
|
||||||
return d;
|
return d;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -105,8 +106,8 @@ dll_list::operator[] (const char *name)
|
|||||||
dll *
|
dll *
|
||||||
dll_list::alloc (HINSTANCE h, per_process *p, dll_type type)
|
dll_list::alloc (HINSTANCE h, per_process *p, dll_type type)
|
||||||
{
|
{
|
||||||
char name[NT_MAX_PATH];
|
WCHAR name[NT_MAX_PATH];
|
||||||
DWORD namelen = GetModuleFileName (h, name, sizeof (name));
|
DWORD namelen = GetModuleFileNameW (h, name, sizeof (name));
|
||||||
|
|
||||||
/* Already loaded? */
|
/* Already loaded? */
|
||||||
dll *d = dlls[name];
|
dll *d = dlls[name];
|
||||||
@ -165,7 +166,7 @@ dll_list::alloc (HINSTANCE h, per_process *p, dll_type type)
|
|||||||
info about this DLL. */
|
info about this DLL. */
|
||||||
d->count = 1;
|
d->count = 1;
|
||||||
d->namelen = namelen;
|
d->namelen = namelen;
|
||||||
strcpy (d->name, name);
|
wcscpy (d->name, name);
|
||||||
d->handle = h;
|
d->handle = h;
|
||||||
d->p = p;
|
d->p = p;
|
||||||
d->type = type;
|
d->type = type;
|
||||||
@ -229,7 +230,7 @@ dll_list::init ()
|
|||||||
/* Mark every memory address up to "here" as reserved. This may force
|
/* Mark every memory address up to "here" as reserved. This may force
|
||||||
Windows NT to load a DLL in the next available, lowest slot. */
|
Windows NT to load a DLL in the next available, lowest slot. */
|
||||||
static void
|
static void
|
||||||
reserve_upto (const char *name, DWORD here)
|
reserve_upto (const PWCHAR name, DWORD here)
|
||||||
{
|
{
|
||||||
DWORD size;
|
DWORD size;
|
||||||
MEMORY_BASIC_INFORMATION mb;
|
MEMORY_BASIC_INFORMATION mb;
|
||||||
@ -245,7 +246,7 @@ reserve_upto (const char *name, DWORD here)
|
|||||||
size = here - start;
|
size = here - start;
|
||||||
if (mb.State == MEM_FREE &&
|
if (mb.State == MEM_FREE &&
|
||||||
!VirtualAlloc ((void *) start, size, MEM_RESERVE, PAGE_NOACCESS))
|
!VirtualAlloc ((void *) start, size, MEM_RESERVE, PAGE_NOACCESS))
|
||||||
api_fatal ("couldn't allocate memory %p(%d) for '%s' alignment, %E\n",
|
api_fatal ("couldn't allocate memory %p(%d) for '%W' alignment, %E\n",
|
||||||
start, size, name);
|
start, size, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -254,7 +255,7 @@ reserve_upto (const char *name, DWORD here)
|
|||||||
Note that this may also free otherwise reserved memory. If that becomes
|
Note that this may also free otherwise reserved memory. If that becomes
|
||||||
a problem, we'll have to keep track of the memory that we reserve above. */
|
a problem, we'll have to keep track of the memory that we reserve above. */
|
||||||
static void
|
static void
|
||||||
release_upto (const char *name, DWORD here)
|
release_upto (const PWCHAR name, DWORD here)
|
||||||
{
|
{
|
||||||
DWORD size;
|
DWORD size;
|
||||||
MEMORY_BASIC_INFORMATION mb;
|
MEMORY_BASIC_INFORMATION mb;
|
||||||
@ -271,7 +272,7 @@ release_upto (const char *name, DWORD here)
|
|||||||
| (void *) start > (void *) ((char *) cygheap + CYGHEAPSIZE)))))
|
| (void *) start > (void *) ((char *) cygheap + CYGHEAPSIZE)))))
|
||||||
continue;
|
continue;
|
||||||
if (!VirtualFree ((void *) start, 0, MEM_RELEASE))
|
if (!VirtualFree ((void *) start, 0, MEM_RELEASE))
|
||||||
api_fatal ("couldn't release memory %p(%d) for '%s' alignment, %E\n",
|
api_fatal ("couldn't release memory %p(%d) for '%W' alignment, %E\n",
|
||||||
start, size, name);
|
start, size, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -299,10 +300,10 @@ dll_list::load_after_fork (HANDLE parent, dll *first)
|
|||||||
if (d.type == DLL_LOAD)
|
if (d.type == DLL_LOAD)
|
||||||
{
|
{
|
||||||
bool unload = true;
|
bool unload = true;
|
||||||
HMODULE h = LoadLibraryEx (d.name, NULL, DONT_RESOLVE_DLL_REFERENCES);
|
HMODULE h = LoadLibraryExW (d.name, NULL, DONT_RESOLVE_DLL_REFERENCES);
|
||||||
|
|
||||||
if (!h)
|
if (!h)
|
||||||
system_printf ("can't reload %s", d.name);
|
system_printf ("can't reload %W", d.name);
|
||||||
/* See if DLL will load in proper place. If so, free it and reload
|
/* See if DLL will load in proper place. If so, free it and reload
|
||||||
it the right way.
|
it the right way.
|
||||||
It sort of stinks that we can't invert the order of the FreeLibrary
|
It sort of stinks that we can't invert the order of the FreeLibrary
|
||||||
@ -315,11 +316,11 @@ dll_list::load_after_fork (HANDLE parent, dll *first)
|
|||||||
if (unload)
|
if (unload)
|
||||||
{
|
{
|
||||||
FreeLibrary (h);
|
FreeLibrary (h);
|
||||||
LoadLibrary (d.name);
|
LoadLibraryW (d.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (try2)
|
else if (try2)
|
||||||
api_fatal ("unable to remap %s to same address as parent(%p) != %p",
|
api_fatal ("unable to remap %W to same address as parent(%p) != %p",
|
||||||
d.name, d.handle, h);
|
d.name, d.handle, h);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -51,7 +51,7 @@ struct dll
|
|||||||
int count;
|
int count;
|
||||||
dll_type type;
|
dll_type type;
|
||||||
int namelen;
|
int namelen;
|
||||||
char name[NT_MAX_PATH];
|
WCHAR name[NT_MAX_PATH];
|
||||||
void detach ();
|
void detach ();
|
||||||
int init ();
|
int init ();
|
||||||
};
|
};
|
||||||
@ -68,7 +68,7 @@ public:
|
|||||||
int tot;
|
int tot;
|
||||||
int loaded_dlls;
|
int loaded_dlls;
|
||||||
int reload_on_fork;
|
int reload_on_fork;
|
||||||
dll *operator [] (const char *name);
|
dll *operator [] (const PWCHAR name);
|
||||||
dll *alloc (HINSTANCE, per_process *, dll_type);
|
dll *alloc (HINSTANCE, per_process *, dll_type);
|
||||||
void detach (void *);
|
void detach (void *);
|
||||||
void init ();
|
void init ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user