diff --git a/source/vibe/core/file.d b/source/vibe/core/file.d index e9dedd5..9058d04 100644 --- a/source/vibe/core/file.d +++ b/source/vibe/core/file.d @@ -459,11 +459,12 @@ struct FileStream { } size_t read(ubyte[] dst, IOMode mode) - { + { auto res = asyncAwait!(FileIOCallback, cb => eventDriver.files.read(m_fd, ctx.ptr, dst, mode, cb), cb => eventDriver.files.cancelRead(m_fd) ); + ctx.ptr += res[2]; enforce(res[1] == IOStatus.ok, "Failed to read data from disk."); return res[2]; } diff --git a/tests/vibe.core.file.d b/tests/vibe.core.file.d index 2f212cf..44f8457 100644 --- a/tests/vibe.core.file.d +++ b/tests/vibe.core.file.d @@ -12,16 +12,23 @@ void main() { auto f = openFile("test.dat", FileMode.createTrunc); assert(f.size == 0); + assert(f.tell == 0); f.write(bytes!(1, 2, 3, 4, 5)); assert(f.size == 5); + assert(f.tell == 5); f.seek(0); + assert(f.tell == 0); f.write(bytes!(1, 2, 3, 4, 5)); assert(f.size == 5); + assert(f.tell == 5); f.write(bytes!(6, 7, 8, 9, 10)); assert(f.size == 10); + assert(f.tell == 10); ubyte[5] dst; f.seek(2); + assert(f.tell == 2); f.read(dst); + assert(f.tell == 7); assert(dst[] == bytes!(3, 4, 5, 6, 7)); f.close();