예제 #1
0
int
getpathattr(struct puffs_usermount *pu, const char *path, struct vattr *vap)
{
	PSSHFSAUTOVAR(pu);

	psbuf_req_str(pb, SSH_FXP_LSTAT, reqid, path);
	GETRESPONSE(pb, pctx->sshfd);

	rv = psbuf_expect_attrs(pb, vap);

 out:
	PSSHFSRETURN(rv);
}
예제 #2
0
파일: fs.c 프로젝트: ryo/netbsd-src
int
psshfs_fs_statvfs(struct puffs_usermount *pu, struct statvfs *sbp)
{
	PSSHFSAUTOVAR(pu);
	uint64_t tmpval;
	uint8_t type;

	memset(sbp, 0, sizeof(*sbp));
	sbp->f_bsize = sbp->f_frsize = sbp->f_iosize = 512;

	if ((pctx->extensions & SFTP_EXT_STATVFS) == 0)
		goto out;

	psbuf_req_str(pb, SSH_FXP_EXTENDED, reqid, "*****@*****.**");
	psbuf_put_str(pb, pctx->mountpath);
	GETRESPONSE(pb, pctx->sshfd);

	type = psbuf_get_type(pb);
	if (type != SSH_FXP_EXTENDED_REPLY) {
		/* use the default */
		goto out;
	}

	psbuf_get_8(pb, &tmpval);
	sbp->f_bsize = tmpval;
	psbuf_get_8(pb, &tmpval);
	sbp->f_frsize = tmpval;
	psbuf_get_8(pb, &sbp->f_blocks);
	psbuf_get_8(pb, &sbp->f_bfree);
	psbuf_get_8(pb, &sbp->f_bavail);
	psbuf_get_8(pb, &sbp->f_files);
	psbuf_get_8(pb, &sbp->f_ffree);
	psbuf_get_8(pb, &sbp->f_favail);

	psbuf_get_8(pb, &tmpval); /* fsid */
	psbuf_get_8(pb, &tmpval); /* flag */
	psbuf_get_8(pb, &tmpval);
	sbp->f_namemax = tmpval;

	sbp->f_bresvd = sbp->f_bfree - sbp->f_bavail;
	sbp->f_fresvd = sbp->f_ffree - sbp->f_favail;

 out:
	PSSHFSRETURN(rv);
}