Mail Archives: cygwin-developers/1999/04/27/21:58:59
DJ,
Either way, mapname will be NULL since NULL is being passed as the
first parameter to open_shared.
My understanding ( misunderstanding :) ) was that with OpenFileMapping()
a name for the shared memory was needed. However, we are passing a NULL
pointer to it instead...
Is OpenFileMappingA() different. I only have a reference for
OpenFileMapping().
This is the sequence...
hinfo.cc
244 fh = new (buf) fhandler_console (name);
fhandler_console.cc
37 return tty_stuff = (tty_min *) open_shared (NULL,
console_shared_h,
38 sizeof
(*tty_stuff), NULL)
void *
open_shared (const char *name, HANDLE &shared_h, DWORD size, void *addr)
{
void *shared;
if (!shared_h)
{
char *mapname = name ? shared_name (name, 0) : NULL;
shared_h = OpenFileMappingA (FILE_MAP_READ | FILE_MAP_WRITE,
TRUE, mapname);
if (!shared_h &&
!(shared_h = CreateFileMappingA ((HANDLE) 0xffffffff,
&sec_all,
PAGE_READWRITE,
0,
size,
mapname)))
api_fatal ("CreateFileMappingA, %E. Terminating.");
}
...
DJ Delorie wrote:
>
> Looks like OpenFileMapping() doesn't properly check its parameters.
> Try rearranging the code like this:
>
> char *mapname = NULL;
> if (name)
> {
> mapname = shared_name (name, 0);
> shared_h = OpenFileMappingA (FILE_MAP_READ | FILE_MAP_WRITE,
> TRUE, mapname);
> }
> if (!shared_h &&
> !(shared_h = CreateFileMappingA ((HANDLE) 0xffffffff,
> &sec_all,
>
> If this works, mail me a diff for the final source and I'll apply it.
>
> DJ
- Raw text -