summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'deps/uv/src/unix/fs.c')
-rw-r--r--deps/uv/src/unix/fs.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
index 5a172cc780..2684c814a2 100644
--- a/deps/uv/src/unix/fs.c
+++ b/deps/uv/src/unix/fs.c
@@ -438,7 +438,12 @@ static ssize_t uv__fs_readlink(uv_fs_t* req) {
return -1;
}
+#if defined(__MVS__)
+ len = os390_readlink(req->path, buf, len);
+#else
len = readlink(req->path, buf, len);
+#endif
+
if (len == -1) {
uv__free(buf);
@@ -795,6 +800,7 @@ static ssize_t uv__fs_copyfile(uv_fs_t* req) {
int64_t in_offset;
dstfd = -1;
+ err = 0;
/* Open the source file. */
srcfd = uv_fs_open(NULL, &fs_req, req->path, O_RDONLY, 0, NULL);
@@ -809,7 +815,7 @@ static ssize_t uv__fs_copyfile(uv_fs_t* req) {
goto out;
}
- dst_flags = O_WRONLY | O_CREAT;
+ dst_flags = O_WRONLY | O_CREAT | O_TRUNC;
if (req->flags & UV_FS_COPYFILE_EXCL)
dst_flags |= O_EXCL;
@@ -828,6 +834,11 @@ static ssize_t uv__fs_copyfile(uv_fs_t* req) {
goto out;
}
+ if (fchmod(dstfd, statsbuf.st_mode) == -1) {
+ err = -errno;
+ goto out;
+ }
+
bytes_to_send = statsbuf.st_size;
in_offset = 0;
while (bytes_to_send != 0) {