Esempio n. 1
0
static int send_reply_iov(fuse_req_t req, int error, struct iovec *iov,
			  int count)
{
	int res;

	res = fuse_send_reply_iov_nofree(req, error, iov, count);
	fuse_free_req(req);
	return res;
}
void cuse_lowlevel_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
{
	struct fuse_init_in *arg = (struct fuse_init_in *) inarg;
	struct cuse_init_out outarg;
	struct fuse_ll *f = req->f;
	struct cuse_data *cd = f->cuse_data;
	size_t bufsize = fuse_chan_bufsize(req->ch);
	struct cuse_lowlevel_ops *clop = req_clop(req);

	(void) nodeid;
	if (f->debug) {
		fprintf(stderr, "CUSE_INIT: %u.%u\n", arg->major, arg->minor);
		fprintf(stderr, "flags=0x%08x\n", arg->flags);
	}
	f->conn.proto_major = arg->major;
	f->conn.proto_minor = arg->minor;
	f->conn.capable = 0;
	f->conn.want = 0;

	if (arg->major < 7) {
		fprintf(stderr, "cuse: unsupported protocol version: %u.%u\n",
			arg->major, arg->minor);
		fuse_reply_err(req, EPROTO);
		return;
	}

	if (bufsize < FUSE_MIN_READ_BUFFER) {
		fprintf(stderr, "cuse: warning: buffer size too small: %zu\n",
			bufsize);
		bufsize = FUSE_MIN_READ_BUFFER;
	}

	bufsize -= 4096;
	if (bufsize < f->conn.max_write)
		f->conn.max_write = bufsize;

	f->got_init = 1;
	if (f->op.init)
		f->op.init(f->userdata, &f->conn);

	memset(&outarg, 0, sizeof(outarg));
	outarg.major = FUSE_KERNEL_VERSION;
	outarg.minor = FUSE_KERNEL_MINOR_VERSION;
	outarg.flags = cd->flags;
	outarg.max_read = cd->max_read;
	outarg.max_write = f->conn.max_write;
	outarg.dev_major = cd->dev_major;
	outarg.dev_minor = cd->dev_minor;

	if (f->debug) {
		fprintf(stderr, "   CUSE_INIT: %u.%u\n",
			outarg.major, outarg.minor);
		fprintf(stderr, "   flags=0x%08x\n", outarg.flags);
		fprintf(stderr, "   max_read=0x%08x\n", outarg.max_read);
		fprintf(stderr, "   max_write=0x%08x\n", outarg.max_write);
		fprintf(stderr, "   dev_major=%u\n", outarg.dev_major);
		fprintf(stderr, "   dev_minor=%u\n", outarg.dev_minor);
		fprintf(stderr, "   dev_info: %.*s\n", cd->dev_info_len,
			cd->dev_info);
	}

	cuse_reply_init(req, &outarg, cd->dev_info, cd->dev_info_len);

	if (clop->init_done)
		clop->init_done(f->userdata);

	fuse_free_req(req);
}
Esempio n. 3
0
void fuse_reply_none(fuse_req_t req)
{
	fuse_chan_send(req->ch, NULL, 0);
	fuse_free_req(req);
}