9 #include "windhoos-suck-suck-suck-thank-you-cygnus.hh"
12 HANDLE CreateFileMapping(
13 HANDLE hFile, // handle to file to map
14 LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // optional security attributes
15 DWORD flProtect, // protection for mapping object
16 DWORD dwMaximumSizeHigh, // high-order 32 bits of object size
17 DWORD dwMaximumSizeLow, // low-order 32 bits of object size
18 LPCTSTR lpName // name of file-mapping object
23 HANDLE hFileMappingObject, // file-mapping object to map into address space
24 DWORD dwDesiredAccess, // access mode
25 DWORD dwFileOffsetHigh, // high-order 32 bits of file offset
26 DWORD dwFileOffsetLow, // low-order 32 bits of file offset
27 DWORD dwNumberOfBytesToMap // number of bytes to map
32 long _get_osfhandle( int filehandle );
35 // cygnus's gnu-win32-b17.1 does not have _get_osfhandle
36 // however, after some hacking, it turns out that:
38 static const int OSF_OFFSET_i = 72;
39 static const int OSF_BASE_i = -3;
40 static const int OSF_FACTOR_i = 8;
41 // let-s hope bill doesn-t change his mind any time soon :-)
43 // so that, while waiting for cygnus's mmap, we can write:
45 // #define HAVE_GET_OSFHANDLE // no we still cannot; works only with cl.exe
47 _get_osfhandle( int filedes_i )
49 return (long)( OSF_OFFSET_i + ( filedes_i + OSF_BASE_i ) * OSF_FACTOR_i );
52 #ifdef HAVE_GET_OSFHANDLE
57 mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
62 HANDLE osf = (HANDLE)_get_osfhandle( fd );
63 HANDLE file_handle = CreateFileMapping( osf, (void*)0, PAGE_READONLY,
65 return (caddr_t)MapViewOfFile( file_handle, FILE_MAP_READ, 0, offset, len );
70 munmap(caddr_t addr, size_t len)
73 return UnmapViewOfFile( addr );
76 #else // ! HAVE_GET_OSFHANDLE //
79 mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
85 char* ch_p = new char[ len ];
87 read( fd, (void*)ch_p, len );
93 munmap(caddr_t addr, size_t len)
100 #endif // !HAVE_GET_OSFHANDLE //