ptr = env->me_map + wsize;
wsize = txn->mt_next_pgno * env->me_psize - wsize;
+#define MAX_WRITE 2147483648U
#ifdef _WIN32
-#define MAX_UINT32 4294967295U
while (wsize > 0) {
DWORD len, w2;
- if (wsize > MAX_UINT32)
- w2 = MAX_UINT32 - env->me_psize + 1; /* write in pagesize chunks */
+ if (wsize > MAX_WRITE)
+ w2 = MAX_WRITE;
else
w2 = wsize;
rc = WriteFile(newfd, ptr, w2, &len, NULL);
rc = (len == w2) ? MDB_SUCCESS : ErrCode();
if (rc) break;
wsize -= w2;
+ ptr += w2;
}
#else
- rc = write(newfd, ptr, wsize);
- rc = (rc == (int)wsize) ? MDB_SUCCESS : ErrCode();
+ while (wsize > 0) {
+ size_t w2;
+ ssize_t wres;
+ if (wsize > MAX_WRITE)
+ w2 = MAX_WRITE;
+ else
+ w2 = wsize;
+ wres = write(newfd, ptr, w2);
+ rc = (wres > 0) ? MDB_SUCCESS : ErrCode();
+ if (rc) break;
+ wsize -= wres;
+ ptr += wres;
+ }
#endif
mdb_txn_abort(txn);