|
static int | uv__fs_close (int fd) |
|
static ssize_t | uv__fs_fsync (uv_fs_t *req) |
|
static ssize_t | uv__fs_fdatasync (uv_fs_t *req) |
|
| UV_UNUSED (static struct timespec uv__fs_to_timespec(double time)) |
|
| UV_UNUSED (static struct timeval uv__fs_to_timeval(double time)) |
|
static ssize_t | uv__fs_futime (uv_fs_t *req) |
|
static ssize_t | uv__fs_mkdtemp (uv_fs_t *req) |
|
static void | uv__mkostemp_initonce (void) |
|
static int | uv__fs_mkstemp (uv_fs_t *req) |
|
static ssize_t | uv__fs_open (uv_fs_t *req) |
|
static ssize_t | uv__fs_preadv (uv_file fd, uv_buf_t *bufs, unsigned int nbufs, off_t off) |
|
static ssize_t | uv__fs_read (uv_fs_t *req) |
|
static int | uv__fs_scandir_filter (UV_CONST_DIRENT *dent) |
|
static int | uv__fs_scandir_sort (UV_CONST_DIRENT **a, UV_CONST_DIRENT **b) |
|
static ssize_t | uv__fs_scandir (uv_fs_t *req) |
|
static int | uv__fs_opendir (uv_fs_t *req) |
|
static int | uv__fs_readdir (uv_fs_t *req) |
|
static int | uv__fs_closedir (uv_fs_t *req) |
|
static int | uv__fs_statfs (uv_fs_t *req) |
|
static ssize_t | uv__fs_pathmax_size (const char *path) |
|
static ssize_t | uv__fs_readlink (uv_fs_t *req) |
|
static ssize_t | uv__fs_realpath (uv_fs_t *req) |
|
static ssize_t | uv__fs_sendfile_emul (uv_fs_t *req) |
|
static ssize_t | uv__fs_sendfile (uv_fs_t *req) |
|
static ssize_t | uv__fs_utime (uv_fs_t *req) |
|
static ssize_t | uv__fs_lutime (uv_fs_t *req) |
|
static ssize_t | uv__fs_write (uv_fs_t *req) |
|
static ssize_t | uv__fs_copyfile (uv_fs_t *req) |
|
static void | uv__to_stat (struct stat *src, uv_stat_t *dst) |
|
static int | uv__fs_statx (int fd, const char *path, int is_fstat, int is_lstat, uv_stat_t *buf) |
|
static int | uv__fs_stat (const char *path, uv_stat_t *buf) |
|
static int | uv__fs_lstat (const char *path, uv_stat_t *buf) |
|
static int | uv__fs_fstat (int fd, uv_stat_t *buf) |
|
static size_t | uv__fs_buf_offset (uv_buf_t *bufs, size_t size) |
|
static ssize_t | uv__fs_write_all (uv_fs_t *req) |
|
static void | uv__fs_work (struct uv__work *w) |
|
static void | uv__fs_done (struct uv__work *w, int status) |
|
int | uv_fs_access (uv_loop_t *loop, uv_fs_t *req, const char *path, int flags, uv_fs_cb cb) |
|
int | uv_fs_chmod (uv_loop_t *loop, uv_fs_t *req, const char *path, int mode, uv_fs_cb cb) |
|
int | uv_fs_chown (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb) |
|
int | uv_fs_close (uv_loop_t *loop, uv_fs_t *req, uv_file file, uv_fs_cb cb) |
|
int | uv_fs_fchmod (uv_loop_t *loop, uv_fs_t *req, uv_file file, int mode, uv_fs_cb cb) |
|
int | uv_fs_fchown (uv_loop_t *loop, uv_fs_t *req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb) |
|
int | uv_fs_lchown (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb) |
|
int | uv_fs_fdatasync (uv_loop_t *loop, uv_fs_t *req, uv_file file, uv_fs_cb cb) |
|
int | uv_fs_fstat (uv_loop_t *loop, uv_fs_t *req, uv_file file, uv_fs_cb cb) |
|
int | uv_fs_fsync (uv_loop_t *loop, uv_fs_t *req, uv_file file, uv_fs_cb cb) |
|
int | uv_fs_ftruncate (uv_loop_t *loop, uv_fs_t *req, uv_file file, int64_t off, uv_fs_cb cb) |
|
int | uv_fs_futime (uv_loop_t *loop, uv_fs_t *req, uv_file file, double atime, double mtime, uv_fs_cb cb) |
|
int | uv_fs_lutime (uv_loop_t *loop, uv_fs_t *req, const char *path, double atime, double mtime, uv_fs_cb cb) |
|
int | uv_fs_lstat (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_link (uv_loop_t *loop, uv_fs_t *req, const char *path, const char *new_path, uv_fs_cb cb) |
|
int | uv_fs_mkdir (uv_loop_t *loop, uv_fs_t *req, const char *path, int mode, uv_fs_cb cb) |
|
int | uv_fs_mkdtemp (uv_loop_t *loop, uv_fs_t *req, const char *tpl, uv_fs_cb cb) |
|
int | uv_fs_mkstemp (uv_loop_t *loop, uv_fs_t *req, const char *tpl, uv_fs_cb cb) |
|
int | uv_fs_open (uv_loop_t *loop, uv_fs_t *req, const char *path, int flags, int mode, uv_fs_cb cb) |
|
int | uv_fs_read (uv_loop_t *loop, uv_fs_t *req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t off, uv_fs_cb cb) |
|
int | uv_fs_scandir (uv_loop_t *loop, uv_fs_t *req, const char *path, int flags, uv_fs_cb cb) |
|
int | uv_fs_opendir (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_readdir (uv_loop_t *loop, uv_fs_t *req, uv_dir_t *dir, uv_fs_cb cb) |
|
int | uv_fs_closedir (uv_loop_t *loop, uv_fs_t *req, uv_dir_t *dir, uv_fs_cb cb) |
|
int | uv_fs_readlink (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_realpath (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_rename (uv_loop_t *loop, uv_fs_t *req, const char *path, const char *new_path, uv_fs_cb cb) |
|
int | uv_fs_rmdir (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_sendfile (uv_loop_t *loop, uv_fs_t *req, uv_file out_fd, uv_file in_fd, int64_t off, size_t len, uv_fs_cb cb) |
|
int | uv_fs_stat (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_symlink (uv_loop_t *loop, uv_fs_t *req, const char *path, const char *new_path, int flags, uv_fs_cb cb) |
|
int | uv_fs_unlink (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_utime (uv_loop_t *loop, uv_fs_t *req, const char *path, double atime, double mtime, uv_fs_cb cb) |
|
int | uv_fs_write (uv_loop_t *loop, uv_fs_t *req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t off, uv_fs_cb cb) |
|
void | uv_fs_req_cleanup (uv_fs_t *req) |
|
int | uv_fs_copyfile (uv_loop_t *loop, uv_fs_t *req, const char *path, const char *new_path, int flags, uv_fs_cb cb) |
|
int | uv_fs_statfs (uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb) |
|
int | uv_fs_get_system_error (const uv_fs_t *req) |
|
Definition at line 1136 of file fs.c.
1140 struct stat src_statsbuf;
1141 struct stat dst_statsbuf;
1145 off_t bytes_to_send;
1147 off_t bytes_written;
1161 if (
fstat(srcfd, &src_statsbuf)) {
1176 src_statsbuf.st_mode,
1189 if (
fstat(dstfd, &dst_statsbuf)) {
1195 if (src_statsbuf.st_dev == dst_statsbuf.st_dev &&
1196 src_statsbuf.st_ino == dst_statsbuf.st_ino) {
1207 if (
fchmod(dstfd, src_statsbuf.st_mode) == -1) {
1210 if (
err != UV_EPERM)
1223 if (
s.f_type != 0xFF534D42u)
1236 if (
ioctl(dstfd, FICLONE, srcfd) == 0) {
1254 bytes_to_send = src_statsbuf.st_size;
1256 while (bytes_to_send != 0) {
1258 if (bytes_to_send < (
off_t) bytes_chunk)
1259 bytes_chunk = bytes_to_send;
1261 bytes_written = fs_req.
result;
1264 if (bytes_written < 0) {
1265 err = bytes_written;
1269 bytes_to_send -= bytes_written;
1270 in_offset += bytes_written;
1283 if (
err != 0 && result == 0)
1291 if (
err != 0 && result == 0)
const lzma_allocator const uint8_t size_t uint8_t * out
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence ftruncate
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count fchmod
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len static semflg const void static shmflg const struct timespec struct timespec static rem const char static group const void static flags fstatfs
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset fstat
static static sync static getppid static getegid const char static filename ioctl
int uv__close_nocheckstdio(int fd)
int uv_fs_open(uv_loop_t *loop, uv_fs_t *req, const char *path, int flags, int mode, uv_fs_cb cb)
int uv_fs_sendfile(uv_loop_t *loop, uv_fs_t *req, uv_file out_fd, uv_file in_fd, int64_t off, size_t len, uv_fs_cb cb)
int uv_fs_unlink(uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb)
void uv_fs_req_cleanup(uv_fs_t *req)
#define UV_FS_COPYFILE_FICLONE_FORCE
#define UV_FS_COPYFILE_EXCL
#define UV_FS_COPYFILE_FICLONE
References err, fchmod, fstat, fstatfs, ftruncate, ioctl, NULL, O_CREAT, O_EXCL, O_RDONLY, O_WRONLY, out, req, uv_fs_s::result, s, SSIZE_MAX, uv__close_nocheckstdio(), UV__ERR, UV_FS_COPYFILE_EXCL, UV_FS_COPYFILE_FICLONE, UV_FS_COPYFILE_FICLONE_FORCE, uv_fs_open(), uv_fs_req_cleanup(), uv_fs_sendfile(), and uv_fs_unlink().
Referenced by uv__fs_work().
Definition at line 291 of file fs.c.
295 static int no_cloexec_support;
297 static const char pattern[] =
"XXXXXX";
298 static const size_t pattern_size =
sizeof(pattern) - 1;
303 path_length = strlen(
path);
310 if (path_length < pattern_size ||
311 strcmp(
path + path_length - pattern_size, pattern)) {
static int(* uv__mkostemp)(char *, int)
static void uv__mkostemp_initonce(void)
#define uv__load_relaxed(p)
#define uv__store_relaxed(p, v)
UV_EXTERN void uv_once(uv_once_t *guard, void(*callback)(void))
UV_EXTERN void uv_rwlock_rdlock(uv_rwlock_t *rwlock)
UV_EXTERN void uv_rwlock_rdunlock(uv_rwlock_t *rwlock)
References EINVAL, NULL, O_CLOEXEC, once, path, r, req, uv__cloexec, uv__close(), uv__load_relaxed, uv__mkostemp, uv__mkostemp_initonce(), uv__store_relaxed, uv_once(), UV_ONCE_INIT, uv_rwlock_rdlock(), and uv_rwlock_rdunlock().
Referenced by uv__fs_work().
Definition at line 441 of file fs.c.
442 #if defined(__linux__)
443 static int no_preadv;
449 if (
req->nbufs > iovmax)
454 result =
read(
req->file,
req->bufs[0].base,
req->bufs[0].len);
458 if (
req->nbufs == 1) {
466 # if defined(__linux__)
472 # if defined(__linux__)
478 if (result == -1 && errno == ENOSYS) {
489 if (
req->bufs !=
req->bufsml)
static const char struct stat static buf struct stat static buf static idle const char static path static fd const char static len const void static prot const char struct module static image struct kernel_sym static table unsigned char static buf static fsuid unsigned struct dirent unsigned static count readv
ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t offset)
static ssize_t uv__fs_preadv(uv_file fd, uv_buf_t *bufs, unsigned int nbufs, off_t off)
int read(izstream &zs, T *x, Items items)
References done, EISDIR, EOPNOTSUPP, fstat, NULL, pread, read(), readv, req, S_ISDIR, uv__free(), uv__fs_preadv(), uv__getiovmax(), uv__load_relaxed, uv__preadv(), and uv__store_relaxed.
Referenced by uv__fs_work().
Definition at line 890 of file fs.c.
897 #if defined(__linux__) || defined(__sun)
906 static int copy_file_range_support = 1;
908 if (copy_file_range_support) {
911 if (
r == -1 && errno == ENOSYS) {
913 copy_file_range_support = 0;
921 r = sendfile(out_fd, in_fd, &
off,
req->bufsml[0].len);
928 if (
r != -1 ||
off >
req->off) {
944 #elif defined(__APPLE__) || \
945 defined(__DragonFly__) || \
946 defined(__FreeBSD__) || \
947 defined(__FreeBSD_kernel__)
957 #if defined(__FreeBSD__) || defined(__DragonFly__)
959 r = sendfile(in_fd, out_fd,
req->off,
req->bufsml[0].len,
NULL, &
len, 0);
960 #elif defined(__FreeBSD_kernel__)
962 r = bsd_sendfile(in_fd,
973 r = sendfile(in_fd, out_fd,
req->off, &
len,
NULL, 0);
ssize_t uv__fs_copy_file_range(int fd_in, ssize_t *off_in, int fd_out, ssize_t *off_out, size_t len, unsigned int flags)
static ssize_t uv__fs_sendfile_emul(uv_fs_t *req)
References EAGAIN, EINTR, EINVAL, EIO, ENOTSOCK, EXDEV, len, NULL, off, ok, r, req, uv__fs_copy_file_range(), and uv__fs_sendfile_emul().
Referenced by uv__fs_work().
Definition at line 776 of file fs.c.
820 for (nsent = 0; (
size_t) nsent <
len; ) {
831 while (nread == -1 && errno ==
EINTR);
837 if (use_pread && nsent == 0 && (errno ==
EIO || errno ==
ESPIPE)) {
848 for (nwritten = 0; nwritten < nread; ) {
850 n =
write(out_fd,
buf + nwritten, nread - nwritten);
851 while (
n == -1 && errno ==
EINTR);
858 if (errno !=
EAGAIN && errno != EWOULDBLOCK) {
864 pfd.events = POLLOUT;
868 n =
poll(&pfd, 1, -1);
869 while (
n == -1 && errno ==
EINTR);
871 if (
n == -1 || (pfd.revents & ~POLLOUT) != 0) {
static const char struct stat static buf struct stat static buf static vhangup int struct rusage static rusage struct sysinfo static info unsigned static __unused struct utsname static buf const char static size const char static name static pid unsigned static persona static fsgid const void static flags const struct iovec static count static fd const void static len static munlockall struct sched_param static p static sched_yield static policy const struct timespec struct timespec static rem uid_t uid_t uid_t static suid poll
References buflen, EAGAIN, EINTR, EIO, ESPIPE, len, n, out, poll, pread, read(), req, and write.
Referenced by uv__fs_sendfile().
Definition at line 1386 of file fs.c.
1393 static int no_statx;
1413 flags |= AT_SYMLINK_NOFOLLOW;
1424 if (errno !=
EINVAL && errno !=
EPERM && errno != ENOSYS)
1437 buf->st_dev = 256 * statxbuf.stx_dev_major + statxbuf.stx_dev_minor;
1438 buf->st_mode = statxbuf.stx_mode;
1439 buf->st_nlink = statxbuf.stx_nlink;
1440 buf->st_uid = statxbuf.stx_uid;
1441 buf->st_gid = statxbuf.stx_gid;
1442 buf->st_rdev = statxbuf.stx_rdev_major;
1443 buf->st_ino = statxbuf.stx_ino;
1444 buf->st_size = statxbuf.stx_size;
1445 buf->st_blksize = statxbuf.stx_blksize;
1446 buf->st_blocks = statxbuf.stx_blocks;
1447 buf->st_atim.tv_sec = statxbuf.stx_atime.tv_sec;
1448 buf->st_atim.tv_nsec = statxbuf.stx_atime.tv_nsec;
1449 buf->st_mtim.tv_sec = statxbuf.stx_mtime.tv_sec;
1450 buf->st_mtim.tv_nsec = statxbuf.stx_mtime.tv_nsec;
1451 buf->st_ctim.tv_sec = statxbuf.stx_ctime.tv_sec;
1452 buf->st_ctim.tv_nsec = statxbuf.stx_ctime.tv_nsec;
1453 buf->st_birthtim.tv_sec = statxbuf.stx_btime.tv_sec;
1454 buf->st_birthtim.tv_nsec = statxbuf.stx_btime.tv_nsec;
int uv__statx(int dirfd, const char *path, int flags, unsigned int mask, struct uv__statx *statxbuf)
static struct sockaddr static addrlen static backlog const void static flags void flags
#define STATIC_ASSERT(expr)
References EINVAL, EPERM, fd, flags, path, STATIC_ASSERT, uv__statx::stx_atime, uv__statx::stx_blksize, uv__statx::stx_blocks, uv__statx::stx_btime, uv__statx::stx_ctime, uv__statx::stx_dev_major, uv__statx::stx_dev_minor, uv__statx::stx_gid, uv__statx::stx_ino, uv__statx::stx_mode, uv__statx::stx_mtime, uv__statx::stx_nlink, uv__statx::stx_rdev_major, uv__statx::stx_size, uv__statx::stx_uid, uv__statx_timestamp::tv_nsec, uv__statx_timestamp::tv_sec, uv__load_relaxed, uv__statx(), and uv__store_relaxed.
Referenced by uv__fs_fstat(), uv__fs_lstat(), and uv__fs_stat().
static void uv__fs_work |
( |
struct uv__work * |
w | ) |
|
|
static |
Definition at line 1572 of file fs.c.
1584 #define X(type, action) \
1585 case UV_FS_ ## type: \
1589 switch (
req->fs_type) {
1596 X(FCHOWN, fchown(
req->file,
req->uid,
req->gid));
1629 }
while (
r == -1 && errno ==
EINTR && retry_on_eintr);
1639 req->ptr = &
req->statbuf;
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen rmdir
static static fork const void static count static fd const char const char static newpath const char static path chmod
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len static semflg const void static shmflg const struct timespec struct timespec static rem lchown
static static fork const void static count static fd link
static static fork const void static count static fd const char const char static newpath char char char static envp time_t static t const char static mode static whence const char static dir time_t static t unsigned static seconds const char struct utimbuf static buf static inc static sig mkdir
static static fork const void static count static fd const char static mode const char static pathname const char static path const char static dev const char static group static getpid static getuid void void static data static pause access
static static fork const void static count static fd const char static mode const char static pathname const char static path const char static dev const char static group static getpid static getuid void void static data static pause const char static mode static sync const char const char static newpath const char static pathname unsigned long static filedes void static end_data_segment static handler static getegid char static len static pgid const char static path static newfd static getpgrp static euid const sigset_t static mask const char static len const gid_t static list symlink
static static fork const void static count static fd const char static mode unlink
static const char struct stat static buf struct stat static buf static vhangup int struct rusage static rusage struct sysinfo static info unsigned static __unused struct utsname static buf const char static size const char static name static pid unsigned static persona static fsgid const void static flags const struct iovec static count static fd const void static len static munlockall struct sched_param static p static sched_yield static policy const struct timespec struct timespec static rem uid_t uid_t uid_t static suid struct pollfd unsigned static timeout chown
static static fork const void static count static fd const char static mode const char static pathname const char static path const char static dev const char static group static getpid static getuid void void static data static pause const char static mode static sync rename
static int uv__fs_statfs(uv_fs_t *req)
static ssize_t uv__fs_utime(uv_fs_t *req)
static ssize_t uv__fs_futime(uv_fs_t *req)
static int uv__fs_close(int fd)
static int uv__fs_readdir(uv_fs_t *req)
static ssize_t uv__fs_mkdtemp(uv_fs_t *req)
static ssize_t uv__fs_open(uv_fs_t *req)
static ssize_t uv__fs_readlink(uv_fs_t *req)
static ssize_t uv__fs_fdatasync(uv_fs_t *req)
static ssize_t uv__fs_realpath(uv_fs_t *req)
static ssize_t uv__fs_scandir(uv_fs_t *req)
static int uv__fs_opendir(uv_fs_t *req)
static int uv__fs_mkstemp(uv_fs_t *req)
static int uv__fs_closedir(uv_fs_t *req)
static int uv__fs_fstat(int fd, uv_stat_t *buf)
static ssize_t uv__fs_read(uv_fs_t *req)
static ssize_t uv__fs_sendfile(uv_fs_t *req)
static int uv__fs_lstat(const char *path, uv_stat_t *buf)
static ssize_t uv__fs_write_all(uv_fs_t *req)
static ssize_t uv__fs_lutime(uv_fs_t *req)
static ssize_t uv__fs_copyfile(uv_fs_t *req)
static int uv__fs_stat(const char *path, uv_stat_t *buf)
References access, chmod, chown, container_of, EINTR, fchmod, ftruncate, lchown, link, mkdir, r, READ, rename, req, rmdir, symlink, unlink, UV__ERR, uv__fs_close(), uv__fs_closedir(), uv__fs_copyfile(), uv__fs_fdatasync(), uv__fs_fstat(), uv__fs_fsync(), uv__fs_futime(), uv__fs_lstat(), uv__fs_lutime(), uv__fs_mkdtemp(), uv__fs_mkstemp(), uv__fs_open(), uv__fs_opendir(), uv__fs_read(), uv__fs_readdir(), uv__fs_readlink(), uv__fs_realpath(), uv__fs_scandir(), uv__fs_sendfile(), uv__fs_stat(), uv__fs_statfs(), uv__fs_utime(), uv__fs_write_all(), UV_FS_CLOSE, UV_FS_FSTAT, UV_FS_LSTAT, UV_FS_READ, UV_FS_STAT, w, and X.