From: Zoran V. <vas...@us...> - 2005-06-13 10:17:46
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11133 Modified Files: nswin32.c Log Message: Added (untested) implementation of NsMemMap() and NsMemUmap() Index: nswin32.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/nswin32.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** nswin32.c 11 Jun 2005 18:40:31 -0000 1.5 --- nswin32.c 13 Jun 2005 10:17:27 -0000 1.6 *************** *** 444,448 **** NsMemMap(char *path, int size, int mode, FileMap *mapPtr) { ! return NS_ERROR; } --- 444,513 ---- NsMemMap(char *path, int size, int mode, FileMap *mapPtr) { ! HANDLE hndl, mobj; ! LPCVOID addr; ! char name[256]; ! ! switch (mode) { ! case NS_MMAP_WRITE: ! hndl = CreateFile(path, ! GENERIC_READ|GENERIC_WRITE, ! FILE_SHARE_READ|FILE_SHARE_WRITE, ! NULL, ! OPEN_EXISTING, ! FILE_FLAG_WRITE_THROUGH, ! NULL); ! break; ! case NS_MMAP_READ: ! hndl = CreateFile(path, ! GENERIC_READ, ! FILE_SHARE_READ, ! NULL, ! OPEN_EXISTING, ! 0, ! NULL); ! break; ! default: ! return NS_ERROR; ! } ! ! if (hndl == NULL || hndl == INVALID_HANDLE_VALUE) { ! Ns_Log(Error, "CreateFile(%s): %s", path, GetLastError()); ! return NS_ERROR; ! } ! ! sprintf(name, "MapObj-%s", Ns_ThreadGetName()); ! ! mobj = CreateFileMapping(hndl, ! NULL, ! PAGE_READWRITE|SEC_NOCACHE, ! 0, ! 0, ! name); ! ! if (mobj == NULL || mobj == INVALID_HANDLE_VALUE) { ! Ns_Log(Error, "CreateFileMapping(%s): %s", path, GetLastError()); ! CloseHandle(hndl); ! return NS_ERROR; ! } ! ! addr = MapViewOfFile(mobj, ! FILE_MAP_ALL_ACCESS, ! 0, ! 0, ! size); ! ! if (addr == NULL) { ! Ns_Log(Warning, "MapViewOfFile(%s): %s", path, GetLastError()); ! CloseHandle(mobj); ! CloseHandle(hndl); ! return NS_ERROR; ! } ! ! mapPtr->mapobj = (void *) mobj; ! mapPtr->handle = (int) hndl; ! mapPtr->addr = (void *) addr; ! mapPtr->size = size; ! ! return NS_OK; } *************** *** 467,471 **** NsMemUmap(FileMap *mapPtr) { ! return; } --- 532,538 ---- NsMemUmap(FileMap *mapPtr) { ! UnmapViewOfFile((LPCVOID)mapPtr->addr); ! CloseHandle((HANDLE)mapPtr->mapobj); ! CloseHandle((HANDLE)mapPtr->handle); } |