Dominic Lachowicz <cinamod@hotmail.com>

Implement mmap-like code for Windows using MapViewOfFile.
This commit is contained in:
Patrick Lam 2006-04-19 16:53:50 +00:00
parent 56f8358364
commit 93f67dfc73
2 changed files with 27 additions and 3 deletions

View File

@ -6,6 +6,13 @@
Bump version to 2.3.95.
2006-04-19 Patrick Lam <plam@mit.edu>
Dominic Lachowicz <cinamod@hotmail.com>
* src/fccache.c (FcDirCacheConsume):
Implement mmap-like code for Windows using MapViewOfFile.
2006-04-19 Patrick Lam <plam@mit.edu>
* src/fccache.c (FcDirCacheConsume, FcCacheNextOffset):

View File

@ -27,12 +27,12 @@
#include <dirent.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include "fcint.h"
#include <unistd.h>
#if defined(HAVE_MMAP) || defined(__CYGWIN__)
# include <unistd.h>
# include <sys/mman.h>
# include <sys/utsname.h>
#elif defined(_WIN32)
# include <windows.h>
#endif
#define ENDIAN_TEST 0x12345678
@ -1203,6 +1203,23 @@ FcDirCacheConsume (int fd, const char * dir, FcFontSet *set, FcConfig *config)
PROT_READ, MAP_SHARED, fd, pos);
if (current_dir_block == MAP_FAILED)
return FcFalse;
#elif defined(_WIN32)
{
HANDLE hFileMap;
hFileMap = CreateFileMapping((HANDLE) _get_osfhandle(fd), NULL, PAGE_READONLY, 0, 0, NULL);
if (hFileMap == NULL)
return FcFalse;
current_dir_block = MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0, metadata.count + pos);
if (current_dir_block == NULL)
{
CloseHandle (hFileMap);
return FcFalse;
}
current_dir_block = (void *)((char *)current_dir_block + pos);
}
#else
current_dir_block = malloc (metadata.count);
if (!current_dir_block)