#if defined _WIN32 #include "winmmap.h" #include /*mmap section got from imagick sources*/ /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % + m m a p % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Method mmap emulates the Unix method of the same name. % % The format of the mmap method is: % % MagickExport void *mmap(char *address,size_t length,int protection, % int access,int file,off_t offset) % % */ void *mmap(char *address,size_t length,int protection,int access, int file,off_t offset) { void *map; HANDLE handle; map=(void *) NULL; handle=INVALID_HANDLE_VALUE; switch (protection) { case PROT_READ: default: { handle=CreateFileMapping((HANDLE) _get_osfhandle(file),0,PAGE_READONLY,0, length,0); if (!handle) break; map=(void *) MapViewOfFile(handle,FILE_MAP_READ,0,0,length); CloseHandle(handle); break; } case PROT_WRITE: { handle=CreateFileMapping((HANDLE) _get_osfhandle(file),0,PAGE_READWRITE,0, length,0); if (!handle) break; map=(void *) MapViewOfFile(handle,FILE_MAP_WRITE,0,0,length); CloseHandle(handle); break; } case PROT_READWRITE: { handle=CreateFileMapping((HANDLE) _get_osfhandle(file),0,PAGE_READWRITE,0, length,0); if (!handle) break; map=(void *) MapViewOfFile(handle,FILE_MAP_ALL_ACCESS,0,0,length); CloseHandle(handle); break; } } if (map == (void *) NULL) return((void *) MAP_FAILED); return((void *) ((char *) map+offset)); } /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % + m u n m a p % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Method munmap emulates the Unix method with the same name. % % The format of the munmap method is: % % int munmap(void *map,size_t length) % % A description of each parameter follows: % % o status: Method munmap returns 0 on success; otherwise, it % returns -1 and sets errno to indicate the error. % % o map: The address of the binary large object. % % o length: The length of the binary large object. % % */ int munmap(void *map,size_t length) { if (!UnmapViewOfFile(map)) return(-1); return(0); } #else int wv_munmap_fakefn (int map) { /* some compilers dislike empty source files */ return map - 1; } #endif