diff options
author | Fedor Indutny <fedor@indutny.com> | 2014-04-07 16:36:51 +0400 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2014-04-07 16:36:51 +0400 |
commit | 962f96d3416ee00c78e729bc1c1b05e02d0c1ef2 (patch) | |
tree | 54b04b551eaa04e280f416b106c0de5c29b39bda /deps/uv/src/unix/fs.c | |
parent | 95dbb6bf647d90947c0c738533dadf391559be98 (diff) | |
download | android-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.c | 30 |
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 |