Go to the documentation of this file.
39 #include <sys/types.h>
40 #include <sys/socket.h>
49 #if defined(__DragonFly__) || \
50 defined(__FreeBSD__) || \
51 defined(__FreeBSD_kernel__) || \
52 defined(__OpenBSD__) || \
54 # define HAVE_PREADV 1
56 # define HAVE_PREADV 0
59 #if defined(__linux__) || defined(__sun)
60 # include <sys/sendfile.h>
63 #if defined(__APPLE__)
64 # include <sys/sysctl.h>
65 #elif defined(__linux__) && !defined(FICLONE)
66 # include <sys/ioctl.h>
67 # define FICLONE _IOW(0x94, 9, int)
70 #if defined(_AIX) && !defined(_AIX71)
74 #if defined(__APPLE__) || \
75 defined(__DragonFly__) || \
76 defined(__FreeBSD__) || \
77 defined(__FreeBSD_kernel__) || \
78 defined(__OpenBSD__) || \
80 # include <sys/param.h>
81 # include <sys/mount.h>
82 #elif defined(__sun) || defined(__MVS__) || defined(__NetBSD__) || defined(__HAIKU__)
83 # include <sys/statvfs.h>
85 # include <sys/statfs.h>
88 #if defined(_AIX) && _XOPEN_SOURCE <= 600
89 extern char *
mkdtemp(
char *
template);
92 #define INIT(subtype) \
96 UV_REQ_INIT(req, UV_FS); \
97 req->fs_type = UV_FS_ ## subtype; \
102 req->new_path = NULL; \
110 assert(path != NULL); \
114 req->path = uv__strdup(path); \
115 if (req->path == NULL) \
125 req->new_path = new_path; \
128 size_t new_path_len; \
129 path_len = strlen(path) + 1; \
130 new_path_len = strlen(new_path) + 1; \
131 req->path = uv__malloc(path_len + new_path_len); \
132 if (req->path == NULL) \
134 req->new_path = req->path + path_len; \
135 memcpy((void*) req->path, path, path_len); \
136 memcpy((void*) req->new_path, new_path, new_path_len); \
144 uv__req_register(loop, req); \
145 uv__work_submit(loop, \
153 uv__fs_work(&req->work_req); \
154 return req->result; \
165 if (errno == EINTR || errno == EINPROGRESS)
173 #if defined(__APPLE__)
184 r = fcntl(
req->file, F_FULLFSYNC);
186 r = fcntl(
req->file, 85 );
188 r = fsync(
req->file);
191 return fsync(
req->file);
197 #if defined(__linux__) || defined(__sun) || defined(__NetBSD__)
198 return fdatasync(
req->file);
199 #elif defined(__APPLE__)
203 return fsync(
req->file);
208 UV_UNUSED(
static struct timespec uv__fs_to_timespec(
double time)) {
211 ts.tv_nsec = (
uint64_t)(time * 1000000) % 1000000 * 1000;
223 #if defined(__linux__) \
225 || defined(__HAIKU__)
229 struct timespec ts[2];
230 ts[0] = uv__fs_to_timespec(
req->atime);
231 ts[1] = uv__fs_to_timespec(
req->mtime);
232 #if defined(__ANDROID_API__) && __ANDROID_API__ < 21
233 return utimensat(
req->file, NULL, ts, 0);
235 return futimens(
req->file, ts);
237 #elif defined(__APPLE__) \
238 || defined(__DragonFly__) \
239 || defined(__FreeBSD__) \
240 || defined(__FreeBSD_kernel__) \
241 || defined(__NetBSD__) \
242 || defined(__OpenBSD__) \
245 tv[0] = uv__fs_to_timeval(
req->atime);
246 tv[1] = uv__fs_to_timeval(
req->mtime);
248 return futimesat(
req->file, NULL, tv);
250 return futimes(
req->file, tv);
252 #elif defined(__MVS__)
254 memset(&atr, 0,
sizeof(atr));
255 atr.att_mtimechg = 1;
256 atr.att_atimechg = 1;
257 atr.att_mtime =
req->mtime;
258 atr.att_atime =
req->atime;
259 return __fchattr(
req->file, &atr,
sizeof(atr));
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)) {
332 no_cloexec_support = 1;
408 while (rc == -1 && errno == EINTR);
413 if (rc == -1 &&
result == 0)
438 #if defined(__linux__)
439 static int no_preadv;
445 if (
req->nbufs > iovmax)
454 if (
req->nbufs == 1) {
462 # if defined(__linux__)
463 if (no_preadv)
retry:
468 # if defined(__linux__)
474 if (
result == -1 && errno == ENOSYS) {
485 if (
req->bufs !=
req->bufsml)
493 if (
result == -1 && errno == EOPNOTSUPP) {
496 rc = fstat(
req->file, &
buf);
497 if (rc == 0 && S_ISDIR(
buf.st_mode)) {
507 #if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_8)
508 #define UV_CONST_DIRENT uv__dirent_t
510 #define UV_CONST_DIRENT const uv__dirent_t
515 return strcmp(dent->d_name,
".") != 0 && strcmp(dent->d_name,
"..") != 0;
520 return strcmp((*a)->d_name, (*b)->d_name);
540 }
else if (
n == -1) {
556 dir->dir = opendir(
req->path);
557 if (dir->dir == NULL)
573 unsigned int dirent_idx;
579 while (dirent_idx < dir->nentries) {
583 res = readdir(dir->dir);
591 if (strcmp(res->d_name,
".") == 0 || strcmp(res->d_name,
"..") == 0)
594 dirent = &dir->
dirents[dirent_idx];
597 if (dirent->
name == NULL)
607 for (
i = 0;
i < dirent_idx; ++
i) {
620 if (dir->dir != NULL) {
632 #if defined(__sun) || defined(__MVS__) || defined(__NetBSD__) || defined(__HAIKU__)
635 if (0 != statvfs(
req->path, &
buf))
639 if (0 != statfs(
req->path, &
buf))
644 if (stat_fs == NULL) {
649 #if defined(__sun) || defined(__MVS__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__)
667 pathmax = pathconf(
path, _PC_PATH_MAX);
680 #if defined(_POSIX_PATH_MAX) || defined(PATH_MAX)
686 ret = lstat(
req->path, &st);
689 if (!S_ISLNK(st.st_mode)) {
737 #if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L
738 buf = realpath(
req->path, NULL);
752 if (realpath(
req->path,
buf) == NULL) {
810 if (buflen >
sizeof(
buf))
811 buflen =
sizeof(
buf);
815 nread = pread(in_fd,
buf, buflen,
offset);
817 nread =
read(in_fd,
buf, buflen);
818 while (nread == -1 && errno == EINTR);
824 if (use_pread &&
nsent == 0 && (errno == EIO || errno == ESPIPE)) {
835 for (nwritten = 0; nwritten < nread; ) {
837 n =
write(out_fd,
buf + nwritten, nread - nwritten);
838 while (
n == -1 && errno == EINTR);
845 if (errno != EAGAIN && errno != EWOULDBLOCK) {
851 pfd.events = POLLOUT;
855 n = poll(&pfd, 1, -1);
856 while (
n == -1 && errno == EINTR);
858 if (
n == -1 || (pfd.revents & ~POLLOUT) != 0) {
884 #if defined(__linux__) || defined(__sun)
890 r = sendfile(out_fd, in_fd, &off,
req->bufsml[0].len);
896 if (
r != -1 || off >
req->off) {
902 if (errno == EINVAL ||
912 #elif defined(__APPLE__) || \
913 defined(__DragonFly__) || \
914 defined(__FreeBSD__) || \
915 defined(__FreeBSD_kernel__)
925 #if defined(__FreeBSD__) || defined(__DragonFly__)
927 r = sendfile(in_fd, out_fd,
req->off,
req->bufsml[0].len, NULL, &
len, 0);
928 #elif defined(__FreeBSD_kernel__)
930 r = bsd_sendfile(in_fd,
941 r = sendfile(in_fd, out_fd,
req->off, &
len, NULL, 0);
951 if (
r == 0 || ((errno == EAGAIN || errno == EINTR) &&
len != 0)) {
956 if (errno == EINVAL ||
977 #if defined(__linux__) \
980 || defined(__HAIKU__)
984 struct timespec ts[2];
985 ts[0] = uv__fs_to_timespec(
req->atime);
986 ts[1] = uv__fs_to_timespec(
req->mtime);
987 return utimensat(AT_FDCWD,
req->path, ts, 0);
988 #elif defined(__APPLE__) \
989 || defined(__DragonFly__) \
990 || defined(__FreeBSD__) \
991 || defined(__FreeBSD_kernel__) \
992 || defined(__NetBSD__) \
993 || defined(__OpenBSD__)
995 tv[0] = uv__fs_to_timeval(
req->atime);
996 tv[1] = uv__fs_to_timeval(
req->mtime);
997 return utimes(
req->path, tv);
998 #elif defined(_AIX) \
1002 buf.modtime =
req->mtime;
1003 return utime(
req->path, &
buf);
1004 #elif defined(__MVS__)
1006 memset(&atr, 0,
sizeof(atr));
1007 atr.att_mtimechg = 1;
1008 atr.att_atimechg = 1;
1009 atr.att_mtime =
req->mtime;
1010 atr.att_atime =
req->atime;
1011 return __lchattr((
char*)
req->path, &atr,
sizeof(atr));
1020 #if defined(__linux__) || \
1021 defined(_AIX71) || \
1024 struct timespec ts[2];
1025 ts[0] = uv__fs_to_timespec(
req->atime);
1026 ts[1] = uv__fs_to_timespec(
req->mtime);
1027 return utimensat(AT_FDCWD,
req->path, ts, AT_SYMLINK_NOFOLLOW);
1028 #elif defined(__APPLE__) || \
1029 defined(__DragonFly__) || \
1030 defined(__FreeBSD__) || \
1031 defined(__FreeBSD_kernel__) || \
1034 tv[0] = uv__fs_to_timeval(
req->atime);
1035 tv[1] = uv__fs_to_timeval(
req->mtime);
1036 return lutimes(
req->path, tv);
1045 #if defined(__linux__)
1046 static int no_pwritev;
1054 #if defined(__APPLE__)
1055 static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
1057 if (pthread_mutex_lock(&lock))
1062 if (
req->nbufs == 1)
1067 if (
req->nbufs == 1) {
1068 r = pwrite(
req->file,
req->bufs[0].base,
req->bufs[0].len,
req->off);
1074 # if defined(__linux__)
1075 if (no_pwritev)
retry:
1078 r = pwrite(
req->file,
req->bufs[0].base,
req->bufs[0].len,
req->off);
1080 # if defined(__linux__)
1086 if (
r == -1 && errno == ENOSYS) {
1096 #if defined(__APPLE__)
1097 if (pthread_mutex_unlock(&lock))
1108 struct stat src_statsbuf;
1109 struct stat dst_statsbuf;
1113 size_t bytes_to_send;
1128 if (fstat(srcfd, &src_statsbuf)) {
1133 dst_flags = O_WRONLY | O_CREAT | O_TRUNC;
1136 dst_flags |= O_EXCL;
1143 src_statsbuf.st_mode,
1153 if (fstat(dstfd, &dst_statsbuf)) {
1159 if (src_statsbuf.st_dev == dst_statsbuf.st_dev &&
1160 src_statsbuf.st_ino == dst_statsbuf.st_ino) {
1164 if (fchmod(dstfd, src_statsbuf.st_mode) == -1) {
1167 if (
err != UV_EPERM)
1177 if (fstatfs(dstfd, &s) == -1)
1180 if (s.f_type != 0xFF534D42u)
1193 if (ioctl(dstfd, FICLONE, srcfd) == 0) {
1211 bytes_to_send = src_statsbuf.st_size;
1213 while (bytes_to_send != 0) {
1264 dst->st_dev = src->st_dev;
1265 dst->st_mode = src->st_mode;
1266 dst->st_nlink = src->st_nlink;
1267 dst->st_uid = src->st_uid;
1268 dst->st_gid = src->st_gid;
1269 dst->st_rdev = src->st_rdev;
1270 dst->st_ino = src->st_ino;
1271 dst->st_size = src->st_size;
1272 dst->st_blksize = src->st_blksize;
1273 dst->st_blocks = src->st_blocks;
1275 #if defined(__APPLE__)
1276 dst->st_atim.tv_sec = src->st_atimespec.tv_sec;
1277 dst->st_atim.tv_nsec = src->st_atimespec.tv_nsec;
1278 dst->st_mtim.tv_sec = src->st_mtimespec.tv_sec;
1279 dst->st_mtim.tv_nsec = src->st_mtimespec.tv_nsec;
1280 dst->st_ctim.tv_sec = src->st_ctimespec.tv_sec;
1281 dst->st_ctim.tv_nsec = src->st_ctimespec.tv_nsec;
1282 dst->st_birthtim.tv_sec = src->st_birthtimespec.tv_sec;
1283 dst->st_birthtim.tv_nsec = src->st_birthtimespec.tv_nsec;
1284 dst->st_flags = src->st_flags;
1285 dst->st_gen = src->st_gen;
1286 #elif defined(__ANDROID__)
1287 dst->st_atim.tv_sec = src->st_atime;
1288 dst->st_atim.tv_nsec = src->st_atimensec;
1289 dst->st_mtim.tv_sec = src->st_mtime;
1290 dst->st_mtim.tv_nsec = src->st_mtimensec;
1291 dst->st_ctim.tv_sec = src->st_ctime;
1292 dst->st_ctim.tv_nsec = src->st_ctimensec;
1293 dst->st_birthtim.tv_sec = src->st_ctime;
1294 dst->st_birthtim.tv_nsec = src->st_ctimensec;
1297 #elif !defined(_AIX) && ( \
1298 defined(__DragonFly__) || \
1299 defined(__FreeBSD__) || \
1300 defined(__OpenBSD__) || \
1301 defined(__NetBSD__) || \
1302 defined(_GNU_SOURCE) || \
1303 defined(_BSD_SOURCE) || \
1304 defined(_SVID_SOURCE) || \
1305 defined(_XOPEN_SOURCE) || \
1306 defined(_DEFAULT_SOURCE))
1307 dst->st_atim.tv_sec = src->st_atim.tv_sec;
1308 dst->st_atim.tv_nsec = src->st_atim.tv_nsec;
1309 dst->st_mtim.tv_sec = src->st_mtim.tv_sec;
1310 dst->st_mtim.tv_nsec = src->st_mtim.tv_nsec;
1311 dst->st_ctim.tv_sec = src->st_ctim.tv_sec;
1312 dst->st_ctim.tv_nsec = src->st_ctim.tv_nsec;
1313 # if defined(__FreeBSD__) || \
1315 dst->st_birthtim.tv_sec = src->st_birthtim.tv_sec;
1316 dst->st_birthtim.tv_nsec = src->st_birthtim.tv_nsec;
1317 dst->st_flags = src->st_flags;
1318 dst->st_gen = src->st_gen;
1320 dst->st_birthtim.tv_sec = src->st_ctim.tv_sec;
1321 dst->st_birthtim.tv_nsec = src->st_ctim.tv_nsec;
1326 dst->st_atim.tv_sec = src->st_atime;
1327 dst->st_atim.tv_nsec = 0;
1328 dst->st_mtim.tv_sec = src->st_mtime;
1329 dst->st_mtim.tv_nsec = 0;
1330 dst->st_ctim.tv_sec = src->st_ctime;
1331 dst->st_ctim.tv_nsec = 0;
1332 dst->st_birthtim.tv_sec = src->st_ctime;
1333 dst->st_birthtim.tv_nsec = 0;
1347 static int no_statx;
1367 flags |= AT_SYMLINK_NOFOLLOW;
1378 if (errno != EINVAL && errno != EPERM && errno != ENOSYS)
1424 if (
ret != UV_ENOSYS)
1440 if (
ret != UV_ENOSYS)
1456 if (
ret != UV_ENOSYS)
1459 ret = fstat(fd, &pbuf);
1481 unsigned int iovmax;
1494 if (
req->nbufs > iovmax)
1495 req->nbufs = iovmax;
1499 while (
result < 0 && errno == EINTR);
1512 nbufs -=
req->nbufs;
1538 #define X(type, action) \
1539 case UV_FS_ ## type: \
1543 switch (
req->fs_type) {
1545 X(CHMOD, chmod(
req->path,
req->mode));
1546 X(CHOWN, chown(
req->path,
req->uid,
req->gid));
1549 X(FCHMOD, fchmod(
req->file,
req->mode));
1550 X(FCHOWN, fchown(
req->file,
req->uid,
req->gid));
1551 X(LCHOWN, lchown(
req->path,
req->uid,
req->gid));
1555 X(FTRUNCATE, ftruncate(
req->file,
req->off));
1560 X(MKDIR, mkdir(
req->path,
req->mode));
1571 X(RENAME, rename(
req->path,
req->new_path));
1576 X(SYMLINK, symlink(
req->path,
req->new_path));
1583 }
while (
r == -1 && errno == EINTR && retry_on_eintr);
1593 req->ptr = &
req->statbuf;
1604 if (
status == UV_ECANCELED) {
1605 assert(
req->result == 0);
1606 req->result = UV_ECANCELED;
1768 const char* new_path,
1794 if (
req->path == NULL)
1806 if (
req->path == NULL)
1834 if (
bufs == NULL || nbufs == 0)
1844 if (
req->bufs == NULL)
1880 if (dir == NULL || dir->dir == NULL || dir->
dirents == NULL)
1923 const char* new_path,
1949 req->bufsml[0].len =
len;
1964 const char* new_path,
2004 if (
bufs == NULL || nbufs == 0)
2014 if (
req->bufs == NULL)
2033 if (
req->path != NULL &&
2039 req->new_path = NULL;
2047 if (
req->bufs !=
req->bufsml)
2060 const char* new_path,
static ssize_t uv__fs_sendfile_emul(uv_fs_t *req)
#define UV_FS_COPYFILE_EXCL
static int uv__fs_fstat(int fd, uv_stat_t *buf)
int uv_fs_opendir(uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb)
static int uv__fs_readdir(uv_fs_t *req)
static void uv__fs_work(struct uv__work *w)
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_futime(uv_loop_t *loop, uv_fs_t *req, uv_file file, double atime, double mtime, 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_utime(uv_loop_t *loop, uv_fs_t *req, const char *path, double atime, double mtime, 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)
#define ARRAY_SIZE(array)
ssize_t uv__pwritev(int fd, const struct iovec *iov, int iovcnt, int64_t offset)
static int uv__fs_close(int fd)
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)
int uv_fs_chmod(uv_loop_t *loop, uv_fs_t *req, const char *path, int mode, uv_fs_cb cb)
return memset(p, 0, total)
static void uv__fs_done(struct uv__work *w, int status)
const grpc_generator::File * file
int uv_fs_mkdir(uv_loop_t *loop, uv_fs_t *req, const char *path, 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)
void * uv__malloc(size_t size)
int scandir(const char *maindir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const struct dirent **, const struct dirent **))
int uv__close_nocheckstdio(int fd)
#define STATIC_ASSERT(expr)
struct uv__statx_timestamp stx_atime
uv_dirent_type_t uv__fs_get_dirent_type(uv__dirent_t *dent)
struct dirent uv__dirent_t
int uv__statx(int dirfd, const char *path, int flags, unsigned int mask, struct uv__statx *statxbuf)
static ssize_t uv__fs_read(uv_fs_t *req)
void(* uv_fs_cb)(uv_fs_t *req)
int uv_fs_fchmod(uv_loop_t *loop, uv_fs_t *req, uv_file file, int mode, uv_fs_cb cb)
char * mkdtemp(char *path)
static ssize_t uv__fs_utime(uv_fs_t *req)
int uv_fs_statfs(uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb)
#define container_of(ptr, type, member)
UV_UNUSED(static struct timespec uv__fs_to_timespec(double time))
static ssize_t uv__fs_open(uv_fs_t *req)
UV_REQ_FIELDS uv_connect_cb cb
void retry(grpc_end2end_test_config config)
int uv_fs_readdir(uv_loop_t *loop, uv_fs_t *req, uv_dir_t *dir, uv_fs_cb cb)
int uv_fs_rmdir(uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb)
static ssize_t uv__fs_copyfile(uv_fs_t *req)
static void uv__mkostemp_initonce(void)
static int uv__fs_scandir_sort(UV_CONST_DIRENT **a, UV_CONST_DIRENT **b)
int uv_fs_open(uv_loop_t *loop, uv_fs_t *req, const char *path, int flags, int mode, uv_fs_cb cb)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
int uv_fs_access(uv_loop_t *loop, uv_fs_t *req, const char *path, int flags, uv_fs_cb cb)
static ssize_t uv__fs_pathmax_size(const char *path)
int uv_fs_fstat(uv_loop_t *loop, uv_fs_t *req, uv_file file, uv_fs_cb cb)
static int uv__fs_stat(const char *path, uv_stat_t *buf)
int uv_fs_mkstemp(uv_loop_t *loop, uv_fs_t *req, const char *tpl, uv_fs_cb cb)
UV_EXTERN void uv_once(uv_once_t *guard, void(*callback)(void))
static int uv__fs_closedir(uv_fs_t *req)
char * uv__strdup(const char *s)
#define UV_FS_COPYFILE_FICLONE
int uv__close_nocancel(int fd)
int uv_fs_stat(uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb)
unsigned __int64 uint64_t
static ssize_t uv__fs_readlink(uv_fs_t *req)
int uv_fs_closedir(uv_loop_t *loop, uv_fs_t *req, uv_dir_t *dir, uv_fs_cb cb)
static int uv__fs_lstat(const char *path, uv_stat_t *buf)
int uv_fs_realpath(uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb)
static ssize_t uv__fs_futime(uv_fs_t *req)
#define writev(s, ptr, cnt)
struct uv__statx_timestamp stx_mtime
static ssize_t uv__fs_sendfile(uv_fs_t *req)
static ssize_t uv__fs_lutime(uv_fs_t *req)
void * uv__reallocf(void *ptr, size_t size)
int uv_fs_lutime(uv_loop_t *loop, uv_fs_t *req, const char *path, double atime, double mtime, uv_fs_cb cb)
#define UV_FS_COPYFILE_FICLONE_FORCE
ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t offset)
static ssize_t uv__fs_mkdtemp(uv_fs_t *req)
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)
static ssize_t uv__fs_scandir(uv_fs_t *req)
int read(izstream &zs, T *x, Items items)
struct uv__statx_timestamp stx_ctime
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)
static ssize_t uv__fs_realpath(uv_fs_t *req)
int uv_fs_mkdtemp(uv_loop_t *loop, uv_fs_t *req, const char *tpl, uv_fs_cb cb)
static ssize_t uv__fs_preadv(uv_file fd, uv_buf_t *bufs, unsigned int nbufs, off_t off)
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)
UniquePtr< SSL_SESSION > ret
void uv__fs_scandir_cleanup(uv_fs_t *req)
static int uv__fs_opendir(uv_fs_t *req)
static int uv__fs_scandir_filter(UV_CONST_DIRENT *dent)
static size_t uv__fs_buf_offset(uv_buf_t *bufs, size_t size)
static ssize_t uv__fs_fdatasync(uv_fs_t *req)
struct uv__statx_timestamp stx_btime
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__mkostemp)(char *, int)
static ssize_t uv__fs_write(uv_fs_t *req)
int uv_fs_close(uv_loop_t *loop, uv_fs_t *req, uv_file file, 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_readlink(uv_loop_t *loop, uv_fs_t *req, const char *path, uv_fs_cb cb)
void uv__fs_readdir_cleanup(uv_fs_t *req)
UV_EXTERN void uv_rwlock_rdunlock(uv_rwlock_t *rwlock)
int uv_fs_lstat(uv_loop_t *loop, uv_fs_t *req, const char *path, 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)
static int uv__fs_statfs(uv_fs_t *req)
static size_t bytes_written
int uv_fs_fsync(uv_loop_t *loop, uv_fs_t *req, uv_file file, 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)
static uv_work_t work_req
static ssize_t uv__fs_fsync(uv_fs_t *req)
ssize_t os390_readlink(const char *path, char *buf, size_t len)
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_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)
static int uv__fs_mkstemp(uv_fs_t *req)
OPENSSL_EXPORT pem_password_cb * cb
#define uv__req_unregister(loop, req)
static ssize_t uv__fs_write_all(uv_fs_t *req)
UV_EXTERN void uv_rwlock_rdlock(uv_rwlock_t *rwlock)
int uv_fs_fdatasync(uv_loop_t *loop, uv_fs_t *req, uv_file file, uv_fs_cb cb)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:22