Lines Matching defs:req

145 static struct lo_data *lo_data(fuse_req_t req)
147 return (struct lo_data *) fuse_req_userdata(req);
150 static struct lo_inode *lo_inode(fuse_req_t req, fuse_ino_t ino)
153 return &lo_data(req)->root;
158 static int lo_fd(fuse_req_t req, fuse_ino_t ino)
160 return lo_inode(req, ino)->fd;
163 static bool lo_debug(fuse_req_t req)
165 return lo_data(req)->debug != 0;
200 static void lo_getattr(fuse_req_t req, fuse_ino_t ino,
205 struct lo_data *lo = lo_data(req);
209 res = fstatat(lo_fd(req, ino), "", &buf, AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW);
211 return (void) fuse_reply_err(req, errno);
213 fuse_reply_attr(req, &buf, lo->timeout);
216 static void lo_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr,
221 struct lo_inode *inode = lo_inode(req, ino);
284 return lo_getattr(req, ino, fi);
288 fuse_reply_err(req, saverr);
309 static int lo_do_lookup(fuse_req_t req, fuse_ino_t parent, const char *name,
315 struct lo_data *lo = lo_data(req);
322 newfd = openat(lo_fd(req, parent), name, O_PATH | O_NOFOLLOW);
330 inode = lo_find(lo_data(req), &e->attr);
358 if (lo_debug(req))
371 static void lo_lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
376 if (lo_debug(req))
380 err = lo_do_lookup(req, parent, name, &e);
382 fuse_reply_err(req, err);
384 fuse_reply_entry(req, &e);
387 static void lo_mknod_symlink(fuse_req_t req, fuse_ino_t parent,
393 struct lo_inode *dir = lo_inode(req, parent);
402 saverr = lo_do_lookup(req, parent, name, &e);
406 if (lo_debug(req))
410 fuse_reply_entry(req, &e);
414 fuse_reply_err(req, saverr);
417 static void lo_mknod(fuse_req_t req, fuse_ino_t parent,
420 lo_mknod_symlink(req, parent, name, mode, rdev, NULL);
423 static void lo_mkdir(fuse_req_t req, fuse_ino_t parent, const char *name,
426 lo_mknod_symlink(req, parent, name, S_IFDIR | mode, 0, NULL);
429 static void lo_symlink(fuse_req_t req, const char *link,
432 lo_mknod_symlink(req, parent, name, S_IFLNK, 0, link);
435 static void lo_link(fuse_req_t req, fuse_ino_t ino, fuse_ino_t parent,
439 struct lo_data *lo = lo_data(req);
440 struct lo_inode *inode = lo_inode(req, ino);
450 res = linkat(AT_FDCWD, procname, lo_fd(req, parent), name,
464 if (lo_debug(req))
469 fuse_reply_entry(req, &e);
474 fuse_reply_err(req, saverr);
477 static void lo_rmdir(fuse_req_t req, fuse_ino_t parent, const char *name)
481 res = unlinkat(lo_fd(req, parent), name, AT_REMOVEDIR);
483 fuse_reply_err(req, res == -1 ? errno : 0);
486 static void lo_rename(fuse_req_t req, fuse_ino_t parent, const char *name,
493 fuse_reply_err(req, EINVAL);
497 res = renameat(lo_fd(req, parent), name,
498 lo_fd(req, newparent), newname);
500 fuse_reply_err(req, res == -1 ? errno : 0);
503 static void lo_unlink(fuse_req_t req, fuse_ino_t parent, const char *name)
507 res = unlinkat(lo_fd(req, parent), name, 0);
509 fuse_reply_err(req, res == -1 ? errno : 0);
537 static void lo_forget_one(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup)
539 struct lo_data *lo = lo_data(req);
540 struct lo_inode *inode = lo_inode(req, ino);
542 if (lo_debug(req)) {
552 static void lo_forget(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup)
554 lo_forget_one(req, ino, nlookup);
555 fuse_reply_none(req);
558 static void lo_forget_multi(fuse_req_t req, size_t count,
564 lo_forget_one(req, forgets[i].ino, forgets[i].nlookup);
565 fuse_reply_none(req);
568 static void lo_readlink(fuse_req_t req, fuse_ino_t ino)
573 res = readlinkat(lo_fd(req, ino), "", buf, sizeof(buf));
575 return (void) fuse_reply_err(req, errno);
578 return (void) fuse_reply_err(req, ENAMETOOLONG);
582 fuse_reply_readlink(req, buf);
596 static void lo_opendir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
599 struct lo_data *lo = lo_data(req);
607 fd = openat(lo_fd(req, ino), ".", O_RDONLY);
621 fuse_reply_open(req, fi);
632 fuse_reply_err(req, error);
641 static void lo_do_readdir(fuse_req_t req, fuse_ino_t ino, size_t size,
692 err = lo_do_lookup(req, ino, name, &e);
698 entsize = fuse_add_direntry_plus(req, p, rem, name,
705 entsize = fuse_add_direntry(req, p, rem, name,
710 lo_forget_one(req, entry_ino, 1);
728 fuse_reply_err(req, err);
730 fuse_reply_buf(req, buf, size - rem);
734 static void lo_readdir(fuse_req_t req, fuse_ino_t ino, size_t size,
737 lo_do_readdir(req, ino, size, offset, fi, 0);
740 static void lo_readdirplus(fuse_req_t req, fuse_ino_t ino, size_t size,
743 lo_do_readdir(req, ino, size, offset, fi, 1);
746 static void lo_releasedir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
752 fuse_reply_err(req, 0);
755 static void lo_create(fuse_req_t req, fuse_ino_t parent, const char *name,
759 struct lo_data *lo = lo_data(req);
763 if (lo_debug(req))
767 fd = openat(lo_fd(req, parent), name,
770 return (void) fuse_reply_err(req, errno);
778 err = lo_do_lookup(req, parent, name, &e);
780 fuse_reply_err(req, err);
782 fuse_reply_create(req, &e, fi);
785 static void lo_fsyncdir(fuse_req_t req, fuse_ino_t ino, int datasync,
795 fuse_reply_err(req, res == -1 ? errno : 0);
798 static void lo_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
802 struct lo_data *lo = lo_data(req);
804 if (lo_debug(req))
824 sprintf(buf, "/proc/self/fd/%i", lo_fd(req, ino));
827 return (void) fuse_reply_err(req, errno);
834 fuse_reply_open(req, fi);
837 static void lo_release(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
842 fuse_reply_err(req, 0);
845 static void lo_flush(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
850 fuse_reply_err(req, res == -1 ? errno : 0);
853 static void lo_fsync(fuse_req_t req, fuse_ino_t ino, int datasync,
862 fuse_reply_err(req, res == -1 ? errno : 0);
865 static void lo_read(fuse_req_t req, fuse_ino_t ino, size_t size,
870 if (lo_debug(req))
878 fuse_reply_data(req, &buf, FUSE_BUF_SPLICE_MOVE);
881 static void lo_write_buf(fuse_req_t req, fuse_ino_t ino,
893 if (lo_debug(req))
899 fuse_reply_err(req, -res);
901 fuse_reply_write(req, (size_t) res);
904 static void lo_statfs(fuse_req_t req, fuse_ino_t ino)
909 res = fstatvfs(lo_fd(req, ino), &stbuf);
911 fuse_reply_err(req, errno);
913 fuse_reply_statfs(req, &stbuf);
916 static void lo_fallocate(fuse_req_t req, fuse_ino_t ino, int mode,
929 fuse_reply_err(req, EOPNOTSUPP);
936 fuse_reply_err(req, err);
939 static void lo_flock(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi,
947 fuse_reply_err(req, res == -1 ? errno : 0);
950 static void lo_getxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
955 struct lo_inode *inode = lo_inode(req, ino);
960 if (!lo_data(req)->xattr)
963 if (lo_debug(req)) {
982 fuse_reply_buf(req, value, ret);
988 fuse_reply_xattr(req, ret);
997 fuse_reply_err(req, saverr);
1001 static void lo_listxattr(fuse_req_t req, fuse_ino_t ino, size_t size)
1005 struct lo_inode *inode = lo_inode(req, ino);
1010 if (!lo_data(req)->xattr)
1013 if (lo_debug(req)) {
1032 fuse_reply_buf(req, value, ret);
1038 fuse_reply_xattr(req, ret);
1047 fuse_reply_err(req, saverr);
1051 static void lo_setxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
1055 struct lo_inode *inode = lo_inode(req, ino);
1060 if (!lo_data(req)->xattr)
1063 if (lo_debug(req)) {
1074 fuse_reply_err(req, saverr);
1077 static void lo_removexattr(fuse_req_t req, fuse_ino_t ino, const char *name)
1080 struct lo_inode *inode = lo_inode(req, ino);
1085 if (!lo_data(req)->xattr)
1088 if (lo_debug(req)) {
1099 fuse_reply_err(req, saverr);
1103 static void lo_copy_file_range(fuse_req_t req, fuse_ino_t ino_in, off_t off_in,
1111 if (lo_debug(req))
1121 fuse_reply_err(req, errno);
1123 fuse_reply_write(req, res);
1127 static void lo_lseek(fuse_req_t req, fuse_ino_t ino, off_t off, int whence,
1135 fuse_reply_lseek(req, res);
1137 fuse_reply_err(req, errno);