--------------------- PatchSet 8641 Date: 2006/09/16 10:21:23 Author: serassio Branch: nt Tag: (none) Log: More coss on Windows work Members: src/fs/coss/store_io_coss.c:1.15.8.12->1.15.8.13 Index: squid/src/fs/coss/store_io_coss.c =================================================================== RCS file: /cvsroot/squid-sf//squid/src/fs/coss/store_io_coss.c,v retrieving revision 1.15.8.12 retrieving revision 1.15.8.13 diff -u -r1.15.8.12 -r1.15.8.13 --- squid/src/fs/coss/store_io_coss.c 15 Sep 2006 19:20:24 -0000 1.15.8.12 +++ squid/src/fs/coss/store_io_coss.c 16 Sep 2006 10:21:23 -0000 1.15.8.13 @@ -681,6 +681,10 @@ CossInfo *cs = (CossInfo *) SD->fsdata; dlink_node *m; off_t end; +#ifdef _SQUID_WIN32_ + /* Allocate an overlapped structure. */ + LPOVERLAPPED Overlapped = xcalloc(1, sizeof(OVERLAPPED)); +#endif /* First, flush pending IO ops */ #if USE_AUFSOPS @@ -699,8 +703,25 @@ sleep(5); /* XXX EEEWWW! */ } end = (t == cs->current_membuf) ? cs->current_offset : t->diskend; - lseek(cs->fd, t->diskstart, SEEK_SET); +#ifdef _SQUID_WIN32_ +#if __USE_FILE_OFFSET64 + Overlapped->Offset = (DWORD)(t->diskstart % 0x100000000); + Overlapped->OffsetHigh = (DWORD)(t->diskstart / 0x100000000); +#else + Overlapped->Offset = t->diskstart; + Overlapped->OffsetHigh = 0; +#endif + Overlapped->hEvent = NULL; + WriteFile((HANDLE)_get_osfhandle(cs->fd), /* handle to file */ + t->buffer, /* data buffer */ + (size_t)(end - t->diskstart), /* number of bytes to write */ + NULL, /* number of bytes written */ + Overlapped); /* overlapped buffer */ + xfree(Overlapped); +#else + lseek(cs->fd, t->diskstart, SEEK_SET); FD_WRITE_METHOD(cs->fd, t->buffer, end - t->diskstart); +#endif } }