summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/fs.c
diff options
context:
space:
mode:
authorFedor Indutny <fedor@indutny.com>2014-04-07 16:36:51 +0400
committerFedor Indutny <fedor@indutny.com>2014-04-07 16:36:51 +0400
commit962f96d3416ee00c78e729bc1c1b05e02d0c1ef2 (patch)
tree54b04b551eaa04e280f416b106c0de5c29b39bda /deps/uv/src/unix/fs.c
parent95dbb6bf647d90947c0c738533dadf391559be98 (diff)
downloadandroid-node-v8-962f96d3416ee00c78e729bc1c1b05e02d0c1ef2.tar.gz
android-node-v8-962f96d3416ee00c78e729bc1c1b05e02d0c1ef2.tar.bz2
android-node-v8-962f96d3416ee00c78e729bc1c1b05e02d0c1ef2.zip
deps: update libuv to v0.11.23
Diffstat (limited to 'deps/uv/src/unix/fs.c')
-rw-r--r--deps/uv/src/unix/fs.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
index cf45669cd9..8a4edcbc0a 100644
--- a/deps/uv/src/unix/fs.c
+++ b/deps/uv/src/unix/fs.c
@@ -217,9 +217,17 @@ skip:
static ssize_t uv__fs_read(uv_fs_t* req) {
ssize_t result;
- if (req->off < 0)
- result = readv(req->file, (struct iovec*) req->bufs, req->nbufs);
- else {
+ if (req->off < 0) {
+ if (req->nbufs == 1)
+ result = read(req->file, req->bufs[0].base, req->bufs[0].len);
+ else
+ result = readv(req->file, (struct iovec*) req->bufs, req->nbufs);
+ } else {
+ if (req->nbufs == 1) {
+ result = pread(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
+ goto done;
+ }
+
#if HAVE_PREADV
result = preadv(req->file, (struct iovec*) req->bufs, req->nbufs, req->off);
#else
@@ -265,6 +273,8 @@ static ssize_t uv__fs_read(uv_fs_t* req) {
# endif
#endif
}
+
+done:
if (req->bufs != req->bufsml)
free(req->bufs);
return result;
@@ -583,9 +593,16 @@ static ssize_t uv__fs_write(uv_fs_t* req) {
pthread_mutex_lock(&lock);
#endif
- if (req->off < 0)
- r = writev(req->file, (struct iovec*) req->bufs, req->nbufs);
- else {
+ if (req->off < 0) {
+ if (req->nbufs == 1)
+ r = write(req->file, req->bufs[0].base, req->bufs[0].len);
+ else
+ r = writev(req->file, (struct iovec*) req->bufs, req->nbufs);
+ } else {
+ if (req->nbufs == 1) {
+ r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
+ goto done;
+ }
#if HAVE_PREADV
r = pwritev(req->file, (struct iovec*) req->bufs, req->nbufs, req->off);
#else
@@ -632,6 +649,7 @@ static ssize_t uv__fs_write(uv_fs_t* req) {
#endif
}
+done:
#if defined(__APPLE__)
pthread_mutex_unlock(&lock);
#endif