3075 Jonas Oreland 2008-11-17
ndb - enable pread/pwrite for windows
modified:
storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp
3074 Jonas Oreland 2008-11-11 [merge]
merge 63 to 64
modified:
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
=== modified file 'storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp'
--- a/storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp 2008-10-22 10:17:12 +0000
+++ b/storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp 2008-11-17 14:42:22 +0000
@@ -207,20 +207,23 @@ int
Win32AsyncFile::readBuffer(Request* req, char * buf, size_t size, off_t offset){
req->par.readWrite.pages[0].size = 0;
- DWORD dwSFP = SetFilePointer(hFile, offset, 0, FILE_BEGIN);
- if(dwSFP != offset) {
- return GetLastError();
- }
-
while (size > 0) {
size_t bytes_read = 0;
+ OVERLAPPED ov;
+ bzero(&ov, sizeof(ov));
+
+ LARGE_INTEGER li;
+ li.QuadPart = offset;
+ ov.Offset = li.LowPart;
+ ov.OffsetHigh = li.HighPart;
+
DWORD dwBytesRead;
BOOL bRead = ReadFile(hFile,
buf,
size,
&dwBytesRead,
- 0);
+ &ov);
if(!bRead){
return GetLastError();
}
@@ -257,12 +260,15 @@ Win32AsyncFile::writeBuffer(const char *
m_write_wo_sync += size;
- DWORD dwSFP = SetFilePointer(hFile, offset, 0, FILE_BEGIN);
- if(dwSFP != offset) {
- return GetLastError();
- }
-
while (size > 0) {
+ OVERLAPPED ov;
+ bzero(&ov, sizeof(ov));
+
+ LARGE_INTEGER li;
+ li.QuadPart = offset;
+ ov.Offset = li.LowPart;
+ ov.OffsetHigh = li.HighPart;
+
if (size < bytes_to_write){
// We are at the last chunk
bytes_to_write = size;
@@ -270,7 +276,7 @@ Win32AsyncFile::writeBuffer(const char *
size_t bytes_written = 0;
DWORD dwWritten;
- BOOL bWrite = WriteFile(hFile, buf, bytes_to_write, &dwWritten, 0);
+ BOOL bWrite = WriteFile(hFile, buf, bytes_to_write, &dwWritten, &ov);
if(!bWrite) {
return GetLastError();
}
| Thread |
|---|
| • bzr push into mysql-5.1 branch (jonas:3074 to 3075) | Jonas Oreland | 17 Nov |