示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
文件: volicon.c 项目: arritjenof/fuse
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;
}
示例#5
0
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;
}
示例#6
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;
}