unix: fix uv_fs_write when using an empty buffer

This commit is contained in:
Saúl Ibarra Corretgé 2014-02-26 23:59:29 +01:00
parent 6d463bfe37
commit 3a8767e35e
3 changed files with 36 additions and 2 deletions

View File

@ -598,7 +598,7 @@ static ssize_t uv__fs_write(uv_fs_t* req) {
# endif
written = 0;
index = 0;
r = 1;
r = 0;
do {
if (req->bufs[index].len > 0) {
r = pwrite(req->file,
@ -609,7 +609,7 @@ static ssize_t uv__fs_write(uv_fs_t* req) {
written += r;
}
index++;
} while (index < req->nbufs && r > 0);
} while (index < req->nbufs && r >= 0);
if (written > 0)
r = written;
}

View File

@ -735,6 +735,38 @@ TEST_IMPL(fs_file_sync) {
}
TEST_IMPL(fs_file_write_null_buffer) {
int r;
/* Setup. */
unlink("test_file");
loop = uv_default_loop();
r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT,
S_IWUSR | S_IRUSR, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
iov = uv_buf_init(NULL, 0);
r = uv_fs_write(loop, &write_req, open_req1.result, &iov, 1, -1, NULL);
ASSERT(r == 0);
ASSERT(write_req.result == 0);
uv_fs_req_cleanup(&write_req);
r = uv_fs_close(loop, &close_req, open_req1.result, NULL);
ASSERT(r == 0);
ASSERT(close_req.result == 0);
uv_fs_req_cleanup(&close_req);
unlink("test_file");
MAKE_VALGRIND_HAPPY();
return 0;
}
TEST_IMPL(fs_async_dir) {
int r;

View File

@ -183,6 +183,7 @@ TEST_DECLARE (fs_file_nametoolong)
TEST_DECLARE (fs_file_loop)
TEST_DECLARE (fs_file_async)
TEST_DECLARE (fs_file_sync)
TEST_DECLARE (fs_file_write_null_buffer)
TEST_DECLARE (fs_async_dir)
TEST_DECLARE (fs_async_sendfile)
TEST_DECLARE (fs_fstat)
@ -506,6 +507,7 @@ TASK_LIST_START
TEST_ENTRY (fs_file_loop)
TEST_ENTRY (fs_file_async)
TEST_ENTRY (fs_file_sync)
TEST_ENTRY (fs_file_write_null_buffer)
TEST_ENTRY (fs_async_dir)
TEST_ENTRY (fs_async_sendfile)
TEST_ENTRY (fs_fstat)