* mmap.cc (fhandler_disk_file::mmap): Try to open file mappings
by a unified name when running under 9x/ME. If that failes, create the file mapping using the unified name.
This commit is contained in:
parent
a8506a1917
commit
8595942c8e
@ -1,3 +1,9 @@
|
|||||||
|
Tue Jul 10 23:01:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* mmap.cc (fhandler_disk_file::mmap): Try to open file mappings
|
||||||
|
by a unified name when running under 9x/ME. If that failes, create
|
||||||
|
the file mapping using the unified name.
|
||||||
|
|
||||||
Mon Jul 9 10:43:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
Mon Jul 9 10:43:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* uinfo.cc (internal_getlogin): Add pointer check.
|
* uinfo.cc (internal_getlogin): Add pointer check.
|
||||||
|
@ -22,6 +22,7 @@ details. */
|
|||||||
#include "sigproc.h"
|
#include "sigproc.h"
|
||||||
#include "pinfo.h"
|
#include "pinfo.h"
|
||||||
#include "security.h"
|
#include "security.h"
|
||||||
|
#include "sys/cygwin.h"
|
||||||
|
|
||||||
#define PAGE_CNT(bytes) howmany(bytes,getpagesize())
|
#define PAGE_CNT(bytes) howmany(bytes,getpagesize())
|
||||||
|
|
||||||
@ -739,13 +740,32 @@ fhandler_disk_file::mmap (caddr_t *addr, size_t len, DWORD access,
|
|||||||
else
|
else
|
||||||
protect = PAGE_READONLY;
|
protect = PAGE_READONLY;
|
||||||
|
|
||||||
HANDLE h = CreateFileMapping (get_handle (),
|
HANDLE h;
|
||||||
&sec_none,
|
|
||||||
protect,
|
/* On 9x/ME try first to open the mapping by name when opening a
|
||||||
0,
|
shared file object. This is needed since 9x/ME only shares
|
||||||
|
objects between processes by name. What a mess... */
|
||||||
|
if (os_being_run != winNT
|
||||||
|
&& get_handle () != INVALID_HANDLE_VALUE
|
||||||
|
&& get_device () == FH_DISK
|
||||||
|
&& !(access & FILE_MAP_COPY))
|
||||||
|
{
|
||||||
|
/* Grrr, the whole stuff is just needed to try to get a reliable
|
||||||
|
mapping of the same file. Even that uprising isn't bullet
|
||||||
|
proof but it does it's best... */
|
||||||
|
char namebuf[MAX_PATH];
|
||||||
|
cygwin_conv_to_full_posix_path (get_name (), namebuf);
|
||||||
|
for (int i = strlen (namebuf) - 1; i >= 0; --i)
|
||||||
|
namebuf[i] = cyg_tolower (namebuf [i]);
|
||||||
|
|
||||||
|
if (!(h = OpenFileMapping (access, TRUE, namebuf)))
|
||||||
|
h = CreateFileMapping (get_handle(), &sec_none, protect, 0, 0, namebuf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
h = CreateFileMapping (get_handle (), &sec_none, protect, 0,
|
||||||
get_handle () == INVALID_HANDLE_VALUE ? len : 0,
|
get_handle () == INVALID_HANDLE_VALUE ? len : 0,
|
||||||
NULL);
|
NULL);
|
||||||
if (h == 0)
|
if (!h)
|
||||||
{
|
{
|
||||||
__seterrno ();
|
__seterrno ();
|
||||||
syscall_printf ("-1 = mmap(): CreateFileMapping failed with %E");
|
syscall_printf ("-1 = mmap(): CreateFileMapping failed with %E");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user