]> git.wh0rd.org - fontconfig.git/blobdiff - src/fccache.c
Include $(top_srcdir), $(top_srcdir)/src before anything else.
[fontconfig.git] / src / fccache.c
index c98c001e2893c3ae2055cc2b562461ac6058f778..7467f2d1cd7dbd07f46d09f0b6c254a199f850b6 100644 (file)
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include "fcint.h"
 #include <fcntl.h>
 #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)