static void lo_read(fuse_req_t req, fuse_ino_t ino, size_t size, off_t offset, struct fuse_file_info *fi) { struct fuse_bufvec buf = FUSE_BUFVEC_INIT(size); (void) ino; buf.buf[0].flags = FUSE_BUF_IS_FD | FUSE_BUF_FD_SEEK; buf.buf[0].fd = fi->fh; buf.buf[0].pos = offset; fuse_reply_data(req, &buf, FUSE_BUF_SPLICE_MOVE); }
static int xmp_write_buf(const char *path, struct fuse_bufvec *buf, off_t offset, struct fuse_file_info *fi) { struct fuse_bufvec dst = FUSE_BUFVEC_INIT(fuse_buf_size(buf)); (void) path; dst.buf[0].flags = FUSE_BUF_IS_FD | FUSE_BUF_FD_SEEK; dst.buf[0].fd = fi->fh; dst.buf[0].pos = offset; return fuse_buf_copy(&dst, buf, FUSE_BUF_SPLICE_NONBLOCK); }
static int _write_buf(const int fd, fuse_bufvec &src, const off_t offset) { size_t size = fuse_buf_size(&src); fuse_bufvec dst = FUSE_BUFVEC_INIT(size); const fuse_buf_copy_flags cpflags = (fuse_buf_copy_flags)(FUSE_BUF_SPLICE_MOVE|FUSE_BUF_SPLICE_NONBLOCK); dst.buf->flags = (fuse_buf_flags)(FUSE_BUF_IS_FD|FUSE_BUF_FD_SEEK); dst.buf->fd = fd; dst.buf->pos = offset; return fuse_buf_copy(&dst,&src,cpflags); }
static int volicon_read_buf(const char *path, struct fuse_bufvec **bufp, size_t size, off_t offset, struct fuse_file_info *fi) { int res = 0; if (volicon_is_icon_magic_file(path)) { struct fuse_bufvec *buf; void *mem; size_t a_size; buf = malloc(sizeof(struct fuse_bufvec)); if (buf == NULL) { return -ENOMEM; } if ((offset + size) <= volicon_get()->volicon_size) { a_size = size; } else if (offset < volicon_get()->volicon_size) { a_size = volicon_get()->volicon_size - offset; } else { a_size = 0; } mem = malloc(a_size); if (mem == NULL) { free(buf); return -ENOMEM; } memcpy(mem, (char *)(volicon_get()->volicon_data) + offset, a_size); *buf = FUSE_BUFVEC_INIT(size); buf->buf[0].mem = mem; buf->buf[0].size = a_size; *bufp = buf; } else { res = fuse_fs_read_buf(volicon_get()->next, path, bufp, size, offset, fi); } return res; }
static int xmp_read_buf(const char *path, struct fuse_bufvec **bufp, size_t size, off_t offset, struct fuse_file_info *fi) { struct fuse_bufvec *src; (void) path; src = malloc(sizeof(struct fuse_bufvec)); if (src == NULL) return -ENOMEM; *src = FUSE_BUFVEC_INIT(size); src->buf[0].flags = FUSE_BUF_IS_FD | FUSE_BUF_FD_SEEK; src->buf[0].fd = fi->fh; src->buf[0].pos = offset; *bufp = src; return 0; }
static int _read_buf(const int fd, fuse_bufvec **bufp, const size_t size, const off_t offset) { fuse_bufvec *src; src = (fuse_bufvec*)malloc(sizeof(fuse_bufvec)); if(src == NULL) return -ENOMEM; *src = FUSE_BUFVEC_INIT(size); src->buf->flags = (fuse_buf_flags)(FUSE_BUF_IS_FD|FUSE_BUF_FD_SEEK|FUSE_BUF_FD_RETRY); src->buf->fd = fd; src->buf->pos = offset; *bufp = src; return 0; }