11 HANDLE CreateFileMapping(
12 HANDLE hFile, // handle to file to map
13 LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // optional security attributes
14 DWORD flProtect, // protection for mapping object
15 DWORD dwMaximumSizeHigh, // high-order 32 bits of object size
16 DWORD dwMaximumSizeLow, // low-order 32 bits of object size
17 LPCTSTR lpName // name of file-mapping object
22 HANDLE hFileMappingObject, // file-mapping object to map into address space
23 DWORD dwDesiredAccess, // access mode
24 DWORD dwFileOffsetHigh, // high-order 32 bits of file offset
25 DWORD dwFileOffsetLow, // low-order 32 bits of file offset
26 DWORD dwNumberOfBytesToMap // number of bytes to map
31 long _get_osfhandle( int filehandle );
34 // cygnus's gnu-win32-b17.1 does not have _get_osfhandle
35 // however, after some hacking, it turns out that:
37 static const int OSF_OFFSET_i
= 72;
38 static const int OSF_BASE_i
= -3;
39 static const int OSF_FACTOR_i
= 8;
40 // let-s hope bill doesn-t change his mind any time soon :-)
42 // so that, while waiting for cygnus's mmap, we can write:
44 // #define HAVE_GET_OSFHANDLE // no we still cannot; works only with cl.exe
46 _get_osfhandle( int filedes_i
)
48 return (long)( OSF_OFFSET_i
+ ( filedes_i
+ OSF_BASE_i
) * OSF_FACTOR_i
);
51 #ifdef HAVE_GET_OSFHANDLE
56 mmap(caddr_t addr
, size_t len
, int prot
, int flags
, int fd
, off_t offset
)
61 HANDLE osf
= (HANDLE
)_get_osfhandle( fd
);
62 HANDLE file_handle
= CreateFileMapping( osf
, (void*)0, PAGE_READONLY
,
64 return (caddr_t
)MapViewOfFile( file_handle
, FILE_MAP_READ
, 0, offset
, len
);
69 munmap(caddr_t addr
, size_t len
)
72 return UnmapViewOfFile( addr
);
75 #else // ! HAVE_GET_OSFHANDLE //
78 mmap(caddr_t addr
, size_t len
, int prot
, int flags
, int fd
, off_t offset
)
84 char* ch_p
= new char[ len
];
86 read( fd
, (void*)ch_p
, len
);
92 munmap(caddr_t addr
, size_t len
)
99 #endif // !HAVE_GET_OSFHANDLE //