-@@ -5009,6 +5034,122 @@
- return wp - obuf;;
- }
-
-+#ifdef HAVE_WIN32
-
-+#include <windef.h>
-+#include <winbase.h>
-
-+int msync(void *start, size_t length, int flags)
-+{
-+ return 0;
-+}
-+int fsync(int fd)
-+{
-+ return 0;
-+}
-+/*
-+ * Emulation of mmap and unmmap for tokyo dbm
-+ */
-+void *mmap(void *start, size_t length, int prot, int flags,
-+ int fd, off_t offset)
-+{
-+ DWORD fm_access = 0;
-+ DWORD mv_access = 0;
-+ HANDLE h;
-+ HANDLE mv;
-+
-+ if (length == 0) {
-+ return MAP_FAILED;
-+ }
-+ if (!fd) {
-+ return MAP_FAILED;
-+ }
-+
-+ if (flags & PROT_WRITE) {
-+ fm_access |= PAGE_READWRITE;
-+ } else if (flags & PROT_READ) {
-+ fm_access |= PAGE_READONLY;
-+ }
-+
-+ if (flags & PROT_READ) {
-+ mv_access |= FILE_MAP_READ;
-+ }
-+ if (flags & PROT_WRITE) {
-+ mv_access |= FILE_MAP_WRITE;
-+ }
-+
-+ h = CreateFileMapping((HANDLE)_get_osfhandle (fd),
-+ NULL /* security */,
-+ fm_access,
-+ 0 /* MaximumSizeHigh */,
-+ 0 /* MaximumSizeLow */,
-+ NULL /* name of the file mapping object */);
-+
-+ if (!h || h == INVALID_HANDLE_VALUE) {
-+ return MAP_FAILED;
-+ }
-+
-+ mv = MapViewOfFile(h, mv_access,
-+ 0 /* offset hi */,
-+ 0 /* offset lo */,
-+ length);
-+ CloseHandle(h);
-+
-+ if (!mv || mv == INVALID_HANDLE_VALUE) {
-+ return MAP_FAILED;
-+ }
-+
-+ return (void *) mv;
-+}
-+
-+int munmap(void *start, size_t length)
-+{
-+ if (!start) {
-+ return -1;
-+ }
-+ UnmapViewOfFile(start);
-+ return 0;
-+}
-+
-+ssize_t pread(int fd, void *buf, size_t count, off_t offset)
-+{
-+ __int64 cur_pos;
-+ ssize_t num_read;
-+
-+ if ((cur_pos = _lseeki64(fd, 0, SEEK_CUR)) == (off_t)-1)
-+ return -1;
-+
-+ if (_lseeki64(fd, offset, SEEK_SET) == (off_t)-1)
-+ return -1;
-+
-+ num_read = read(fd, buf, count);
-+
-+ if (_lseeki64(fd, cur_pos, SEEK_SET) == (off_t)-1)
-+ return -1;
-+
-+ return num_read;
-+}
-+
-+ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset)
-+{
-+ __int64 cur_pos;
-+ ssize_t num_write;
-+
-+ if ((cur_pos = _lseeki64(fd, 0, SEEK_CUR)) == (off_t)-1)
-+ return -1;
-+
-+ if (_lseeki64(fd, offset, SEEK_SET) == (off_t)-1)
-+ return -1;
-+
-+ num_write = write(fd, buf, count);
-+
-+ if (_lseeki64(fd, cur_pos, SEEK_SET) == (off_t)-1)
-+ return -1;
-+
-+ return num_write;
-+}
-+
-+#endif
-+
-+
- // END OF FILE
-Index: tokyocabinet/tcutil.h
-===================================================================
---- tokyocabinet/tcutil.h (révision 7137)
-+++ tokyocabinet/tcutil.h (copie de travail)
-@@ -2160,8 +2160,27 @@
- #define TCMAPRNUM(TC_map) \
- ((TC_map)->rnum)
-
-+#ifdef HAVE_WIN32
-+#include <sys/types.h>
-
-+/* mmap implementation for tokyodbm */
-+#define PROT_WRITE 0x2 /* Page can be written. */
-+#define PROT_READ 0x1 /* page can be read */
-+#define MAP_SHARED 0x01 /* Share changes. */
-+#define MAP_FAILED ((void *) -1)
-+#define MS_SYNC 0
-
-+void *mmap(void *start, size_t length, int prot, int flags,
-+ int fd, off_t offset);
-+int munmap(void *start, size_t length);
-+int msync(void *start, size_t length, int flags);
-+int fsync(int fd);
-+ssize_t pread(int fd, void *buf, size_t count, off_t offset);
-+ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
-+
-+#endif
-+
-+
- __TCUTIL_CLINKAGEEND
- #endif /* duplication check */
-